Можно ходить, используя различные стрелки.
SCREEN 7, 1, 1, 0
DIM SHARED Znear
Znear = .5
TYPE vec3: x AS SINGLE: y AS SINGLE: z AS SINGLE: END TYPE
TYPE vec2: x AS SINGLE: y AS SINGLE: END TYPE
DIM a1 AS vec3, a2 AS vec3, rot AS vec3, org AS vec3
size = 16
org.x = 0: org.y = -.25: org.z = 0
rot.x = 0: rot.y = 2: rot.z = 0
DO
LINE (0, 0)-(320, 200), 0, BF
FOR x = -size TO size
a1.x = x: a1.y = 0: a1.z = -size
a2.x = x: a2.y = 0: a2.z = size
pd a1, a2, org, rot
NEXT
FOR z = -size TO size
a1.x = -size: a1.y = 0: a1.z = z
a2.x = size: a2.y = 0: a2.z = z
pd a1, a2, org, rot
NEXT
PCOPY 1, 0
DO: i$ = INKEY$: LOOP WHILE i$ = ""
IF i$ = CHR$(0) + "H" THEN org.x = org.x - SIN(rot.y) * .1: org.z = org.z - COS(rot.y) * .1
IF i$ = CHR$(0) + "P" THEN org.x = org.x + SIN(rot.y) * .1: org.z = org.z + COS(rot.y) * .1
IF i$ = CHR$(0) + "K" THEN rot.y = rot.y - .05
IF i$ = CHR$(0) + "M" THEN rot.y = rot.y + .05
IF i$ = CHR$(0) + "I" THEN org.y = org.y - .1
IF i$ = CHR$(0) + "Q" THEN org.y = org.y + .1
LOOP UNTIL i$ = CHR$(27)
SUB pd (v1 AS vec3, v2 AS vec3, o AS vec3, r AS vec3)
DIM a AS vec3, b AS vec3, e AS vec3
DIM c AS vec2, d AS vec2
a.x = v1.x + o.x: b.x = v2.x + o.x
a.y = v1.y + o.y: b.y = v2.y + o.y
a.z = v1.z + o.z: b.z = v2.z + o.z
rt a, r
rt b, r
t = (Znear - a.z) / (b.z - a.z)
e.x = a.x + t * (b.x - a.x)
e.y = a.y + t * (b.y - a.y)
e.z = a.z + t * (b.z - a.z)
IF a.z < Znear AND b.z < Znear THEN EXIT SUB
IF a.z > Znear AND b.z < Znear THEN b = e ELSE IF a.z < Znear AND b.z > Znear THEN a = e
vp a, c
vp b, d
LINE (c.x, c.y)-(d.x, d.y), 15
END SUB
SUB rt (v AS vec3, r AS vec3)
DIM m AS vec3
m.x = v.x * COS(r.y) - v.z * SIN(r.y)
m.y = v.y
m.z = v.z * COS(r.y) + v.x * SIN(r.y)
v = m
END SUB
SUB vp (a AS vec3, b AS vec2)
b.x = 160 + a.x * 200 / a.z
b.y = 100 - a.y * 200 / a.z
END SUB