§ Что рисуется
Моск в Нарнии поплыл, протух и прокис (кис-кис)
Hint: можно двигать мышкой
§ Программный код
1SCREEN 13 2 3' Карта 4DATA 1,1,1,1,1,1,1,1 5DATA 1,1,0,0,1,0,0,1 6DATA 1,0,0,0,1,0,0,1 7DATA 1,0,0,0,0,0,0,1 8DATA 1,0,0,0,0,0,0,1 9DATA 1,0,0,0,0,0,0,1 10DATA 1,0,0,2,0,0,0,1 11DATA 1,1,1,1,1,1,1,1 12 13' Чтение карты 14DIM map(8, 8) 15FOR i = 1 TO 8 16FOR j = 1 TO 8 17 READ a% 18 map(i, j) = a% 19 20 ' Ставим игрока в центр квадрата 21 IF a% = 2 THEN px = j + 0.5: py = i + 0.5 22NEXT 23NEXT 24 25' Рисуем линии слева направо 26FOR x = -160 TO 159 27 28 z = 0 29 dx = x / 160 30 dz = -1 31 32 ' Положение игрока в пространстве 33 intx = INT(px): fx = px - intx 34 inty = INT(py): fy = py - inty 35 36 ' 16 шагов для поиска пересечения 37 FOR i = 1 TO 16 38 39 ' Минимальная дистанция 40 IF dx > 0 THEN crx = (1 - fx) / dx ELSE IF dx < 0 THEN crx = -fx / dx ELSE crx = 100 41 IF dz > 0 THEN cry = (1 - fy) / dz ELSE IF dz < 0 THEN cry = -fy / dz ELSE cry = 100 42 43 ' Если ближе до грани по X 44 IF crx < cry THEN 45 46 z = z + crx 47 fy = fy + crx * dz 48 IF dx > 0 THEN intx = intx + 1: fx = 0 ELSE intx = intx - 1: fx = 1 49 bounce = 0 50 51 ELSE 52 53 z = z + cry 54 fx = fx + cry * dx 55 IF dz > 0 THEN inty = inty + 1: fy = 0 ELSE inty = inty - 1: fy = 1 56 bounce = 1 57 58 END IF 59 60 ' Есть пересечение 61 IF map(inty, intx) = 1 THEN 62 63 h = 100 / z 64 LINE (160 + x, 100 - h)-(160 + x, 100 + h), 1 + bounce 65 EXIT FOR 66 67 END IF 68 69 NEXT 70 71NEXT