§ Что рисуется
Моск в Нарнии поплыл, протух и прокис (кис-кис)
Hint: можно двигать мышкой
§ Программный код
SCREEN 13 ' Карта DATA 1,1,1,1,1,1,1,1 DATA 1,1,0,0,1,0,0,1 DATA 1,0,0,0,1,0,0,1 DATA 1,0,0,0,0,0,0,1 DATA 1,0,0,0,0,0,0,1 DATA 1,0,0,0,0,0,0,1 DATA 1,0,0,2,0,0,0,1 DATA 1,1,1,1,1,1,1,1 ' Чтение карты DIM map(8, 8) FOR i = 1 TO 8 FOR j = 1 TO 8 READ a% map(i, j) = a% ' Ставим игрока в центр квадрата IF a% = 2 THEN px = j + 0.5: py = i + 0.5 NEXT NEXT ' Рисуем линии слева направо FOR x = -160 TO 159 z = 0 dx = x / 160 dz = -1 ' Положение игрока в пространстве intx = INT(px): fx = px - intx inty = INT(py): fy = py - inty ' 16 шагов для поиска пересечения FOR i = 1 TO 16 ' Минимальная дистанция IF dx > 0 THEN crx = (1 - fx) / dx ELSE IF dx < 0 THEN crx = -fx / dx ELSE crx = 100 IF dz > 0 THEN cry = (1 - fy) / dz ELSE IF dz < 0 THEN cry = -fy / dz ELSE cry = 100 ' Если ближе до грани по X IF crx < cry THEN z = z + crx fy = fy + crx * dz IF dx > 0 THEN intx = intx + 1: fx = 0 ELSE intx = intx - 1: fx = 1 bounce = 0 ELSE z = z + cry fx = fx + cry * dx IF dz > 0 THEN inty = inty + 1: fy = 0 ELSE inty = inty - 1: fy = 1 bounce = 1 END IF ' Есть пересечение IF map(inty, intx) = 1 THEN h = 100 / z LINE (160 + x, 100 - h)-(160 + x, 100 + h), 1 + bounce EXIT FOR END IF NEXT NEXT