Skip to content

Instantly share code, notes, and snippets.

@programaths
Created January 4, 2026 11:02
Show Gist options
  • Select an option

  • Save programaths/f6ab5632fd94d1b37c6985b525cd58e4 to your computer and use it in GitHub Desktop.

Select an option

Save programaths/f6ab5632fd94d1b37c6985b525cd58e4 to your computer and use it in GitHub Desktop.
Simple maze game in QB64-PE (Phoenix Edition)
OPTION BASE 0
SCREEN 13
WINDOW SCREEN(-400, -300)-(400, 300)
DIM SHARED x AS INTEGER
DIM SHARED y AS INTEGER
DIM SHARED o AS INTEGER
DIM SHARED canMove AS _BIT
DIM up AS _BIT
DIM down AS _BIT
DIM left AS _BIT
DIM right AS _BIT
DIM upJustPressed AS _BIT
DIM downJustPressed AS _BIT
DIM leftJustPressed AS _BIT
DIM rightJustPressed AS _BIT
DIM SHARED maze(5, 5) AS _UNSIGNED _BIT * 4
DIM SHARED mazeKeys(5, 5) AS _UNSIGNED INTEGER
TYPE vec3
x AS DOUBLE
y AS DOUBLE
z AS DOUBLE
END TYPE
TYPE vec2
x AS DOUBLE
y AS DOUBLE
END TYPE
x = 0
y = 0
o = 0
maze1:
DATA &b0101,&b0110,&b0000,&b0000,&b0000,&b0000
DATA &b1000,&b1001,&b0010,&b0000,&b0000,&b0000
DATA &b0000,&b0000,&b0000,&b0000,&b0000,&b0000
DATA &b0000,&b0000,&b0000,&b0000,&b0000,&b0000
DATA &b0000,&b0000,&b0000,&b0000,&b0000,&b0000
DATA &b0000,&b0000,&b0000,&b0000,&b0000,&b0000
mazeKeys1:
DATA 0,0,0,0,0,0
DATA 1,0,2,0,0,0
DATA 0,0,0,0,0,0
DATA 0,0,0,0,0,0
DATA 0,0,0,0,0,0
DATA 0,0,0,0,0,0
COLOR 2
loadMaze
DO
CLS
_LIMIT 60
upJustPressed = (NOT up) AND _KEYDOWN(119)
up = _KEYDOWN(119)
downJustPressed = (NOT down) AND _KEYDOWN(115)
down = _KEYDOWN(115)
leftJustPressed = (NOT left) AND _KEYDOWN(97)
left = _KEYDOWN(97)
rightJustPressed = (NOT right) AND _KEYDOWN(100)
right = _KEYDOWN(100)
quit = _KEYDOWN(27)
IF rightJustPressed THEN
o = (o + 1) MOD 4
END IF
IF leftJustPressed THEN
o = (o + 3) MOD 4
END IF
IF upJustPressed AND canMove THEN
SELECT CASE o
CASE 0: y = y - 1
CASE 1: x = x + 1
CASE 2: y = y + 1
CASE 3: x = x - 1
END SELECT
END IF
displayCell
_DISPLAY
LOOP UNTIL quit
SYSTEM
SUB loadMaze
RESTORE maze1
FOR r = 0 TO 5
FOR c = 0 TO 5
READ maze(c, r)
NEXT c
NEXT r
RESTORE mazeKeys1
FOR r = 0 TO 5
FOR c = 0 TO 5
READ mazeKeys(c, r)
NEXT c
NEXT r
END SUB
SUB displayCell
c = maze(x, y)
u = _READBIT(c, 3)
d = _READBIT(c, 2)
l = _READBIT(c, 1)
r = _READBIT(c, 0)
d0 = 0
d1 = 0
d2 = 0
SELECT CASE o
CASE 0 'up
d0 = l
d1 = u
d2 = r
CASE 1 'right
d0 = u
d1 = r
d2 = d
CASE 2 'down
d0 = r
d1 = d
d2 = l
CASE 3 'left
d0 = d
d1 = l
d2 = u
END SELECT
k = mazeKeys(x, y)
REM the room
l3d -600, -600, 2, 600, -600, 2
l3d 600, -600, 2, 600, 600, 2
l3d 600, 600, 2, -600, 600, 2
l3d -600, 600, 2, -600, -600, 2
l3d -600, -600, 6, 600, -600, 6
l3d 600, -600, 6, 600, 600, 6
l3d 600, 600, 6, -600, 600, 6
l3d -600, 600, 6, -600, -600, 6
l3d -600, -600, 2, -600, -600, 6
l3d 600, -600, 2, 600, -600, 6
l3d 600, 600, 2, 600, 600, 6
l3d -600, 600, 2, -600, 600, 6
canMove = 0
IF d0 THEN
REM left door
l3d -600, 600, 3, -600, -300, 3
l3d -600, 600, 5, -600, -300, 5
l3d -600, -300, 3, -600, -300, 5
END IF
IF d1 THEN
REM center door
l3d -300, -300, 6, -300, 600, 6
l3d 300, -300, 6, 300, 600, 6
l3d -300, -300, 6, 300, -300, 6
canMove = -1
END IF
IF d2 THEN
REM right door
l3d 600, 600, 3, 600, -300, 3
l3d 600, 600, 5, 600, -300, 5
l3d 600, -300, 3, 600, -300, 5
END IF
SELECT CASE k
CASE 1: COLOR 3
CASE 2: COLOR 4
END SELECT
IF k THEN
l3d -200, 600, 3, -200, 600, 5
l3d 200, 600, 3, 200, 600, 5
l3d -200, 600, 3, 200, 600, 3
l3d -200, 600, 5, 200, 600, 5
END IF
COLOR 2
END SUB
SUB project2d (v2 AS vec2, v3 AS vec3)
v2.y = v3.y / v3.z
v2.x = v3.x / v3.z
END SUB
SUB line3d (a3 AS vec3, b3 AS vec3)
DIM a2 AS vec2
DIM b2 AS vec2
CALL project2d(a2, a3)
CALL project2d(b2, b3)
LINE (a2.x, a2.y)-(b2.x, b2.y)
END SUB
SUB l3d (x1 AS DOUBLE, y1 AS DOUBLE, z1 AS DOUBLE, x2 AS DOUBLE, y2 AS DOUBLE, z2 AS DOUBLE)
DIM a AS vec3
DIM b AS vec3
a.x = x1
a.y = y1
a.z = z1
b.x = x2
b.y = y2
b.z = z2
line3d a, b
END SUB
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment