Created
January 4, 2026 11:02
-
-
Save programaths/f6ab5632fd94d1b37c6985b525cd58e4 to your computer and use it in GitHub Desktop.
Simple maze game in QB64-PE (Phoenix Edition)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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