Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
SkyRoads Clone
#1
A and D change lanes, W accelerates, Space Jumps and R restarts when youre dead...

Code: (Select All)
' SkyRoads 2025: Wide Lanes, Golden Path, Triangle Ship
$RESIZE:ON
SCREEN _NEWIMAGE(1024, 768, 32)
_TITLE "SKYROADS 2025: PRO WIDE"

DECLARE LIBRARY
  SUB gluPerspective (BYVAL fovy AS DOUBLE, BYVAL aspect AS DOUBLE, BYVAL zNear AS DOUBLE, BYVAL zFar AS DOUBLE)
  SUB gluLookAt (BYVAL eyex AS DOUBLE, BYVAL eyey AS DOUBLE, BYVAL eyez AS DOUBLE, BYVAL cx AS DOUBLE, BYVAL cy AS DOUBLE, BYVAL cz AS DOUBLE, BYVAL ux AS DOUBLE, BYVAL uy AS DOUBLE, BYVAL uz AS DOUBLE)
END DECLARE

' --- Core Constants ---
CONST MAX_DIST = 150, MIN_SPEED = 0.25, MAX_SPEED = 1.3
TYPE Tile: active AS INTEGER: x AS SINGLE: z AS SINGLE: END TYPE
DIM SHARED road(1 TO MAX_DIST, -2 TO 2) AS Tile
DIM SHARED px, py, pz, pvx, pvy, pSpeed, lives, state, on_ground

lives = 3: state = 0
GOSUB BuildLevel: GOSUB ResetPlayer

DO
  _LIMIT 60
  IF state = 0 THEN GOSUB UpdateLogic
  CLS
  IF state = 1 THEN
    COLOR _RGB32(255, 50, 50): _PRINTSTRING (420, 350), "GAME OVER - PRESS R"
    IF _KEYDOWN(114) OR _KEYDOWN(82) THEN lives = 3: state = 0: GOSUB BuildLevel: GOSUB ResetPlayer
  END IF
  GOSUB DrawUI
  _DISPLAY
LOOP

UpdateLogic:
' 1. Forward Momentum & Min Speed
IF _KEYDOWN(119) OR _KEYDOWN(87) THEN pSpeed = pSpeed + 0.01 ELSE pSpeed = pSpeed - 0.004
IF pSpeed < MIN_SPEED THEN pSpeed = MIN_SPEED
IF pSpeed > MAX_SPEED THEN pSpeed = MAX_SPEED

' 2. Wide-Lane Steering
IF _KEYDOWN(97) OR _KEYDOWN(65) THEN pvx = -0.18
IF _KEYDOWN(100) OR _KEYDOWN(68) THEN pvx = 0.18
px = px + pvx: pvx = pvx * 0.8: pz = pz - pSpeed

' 3. Gravity & Conditional Jump (Ground Check)
IF _KEYDOWN(32) AND on_ground = 1 THEN pvy = 0.4: on_ground = 0
py = py + pvy: pvy = pvy - 0.018

' 4. Path-First Collision
iz = INT(ABS(pz) / 3) + 1: ix = INT(px / 2.5 + 0.5)
on_ground = 0
IF iz >= 1 AND iz <= MAX_DIST AND ix >= -2 AND ix <= 2 THEN
  IF road(iz, ix).active AND py <= 0 AND py > -0.8 THEN
    py = 0: pvy = 0: on_ground = 1
  END IF
END IF

' 5. Death/Reset
IF py < -6 THEN lives = lives - 1: IF lives <= 0 THEN state = 1 ELSE GOSUB ResetPlayer
RETURN

BuildLevel:
RANDOMIZE TIMER
FOR z = 1 TO MAX_DIST: FOR x = -2 TO 2: road(z, x).active = 0: NEXT: NEXT
currLane = 0
FOR z = 1 TO MAX_DIST
  ' The "Walker" chooses a lane to guarantee a route
  IF z MOD 5 = 0 THEN currLane = currLane + (INT(RND * 3) - 1)
  IF currLane < -2 THEN currLane = -1 ELSE IF currLane > 2 THEN currLane = 1
  road(z, currLane).active = 1
  road(z, currLane).x = currLane * 2.5: road(z, currLane).z = -z * 3
  ' Fill start zone (Rows 1-8)
  IF z <= 8 THEN FOR i = -2 TO 2: road(z, i).active = 1: road(z, i).x = i * 2.5: road(z, i).z = -z * 3: NEXT
NEXT: RETURN

ResetPlayer:
px = 0: py = 0: pz = 0: pSpeed = MIN_SPEED: pvy = 0: pvx = 0: on_ground = 1: RETURN

DrawUI:
COLOR _RGB32(255, 255, 255)
_PRINTSTRING (10, 10), "LIVES:" + STR$(lives)
_PRINTSTRING (10, 30), "SPEED:" + STR$(INT(pSpeed * 100))
IF on_ground THEN _PRINTSTRING (10, 50), "STATUS: GROUNDED" ELSE _PRINTSTRING (10, 50), "STATUS: AIRBORNE"
RETURN

SUB _GL
  _GLCLEAR _GL_COLOR_BUFFER_BIT OR _GL_DEPTH_BUFFER_BIT
  _GLMATRIXMODE _GL_PROJECTION: _GLLOADIDENTITY
  gluPerspective 60, 1024 / 768, 0.1, 200
  _GLMATRIXMODE _GL_MODELVIEW: _GLLOADIDENTITY
  gluLookAt px, py + 3.5, pz + 8, px, py + 1, pz - 15, 0, 1, 0

  ' Render Wide Road
  FOR z = 1 TO MAX_DIST: FOR x = -2 TO 2
      IF road(z, x).active THEN
        _GLCOLOR3F 0.1, 0.4, 0.8: DrawBox road(z, x).x, -0.2, road(z, x).z, 1.2, 0.1, 1.45
      END IF
  NEXT: NEXT

  ' Draw Triangle Ship (3D Pyramid)
  _GLPUSHMATRIX: _GLTRANSLATEF px, py + 0.3, pz
  _GLBEGIN _GL_TRIANGLES
  _GLCOLOR3F 1, 0.8, 0 ' Nose
  _GLVERTEX3F 0, 0.1, -1.0: _GLVERTEX3F -0.4, -0.2, 0.4: _GLVERTEX3F 0.4, -0.2, 0.4
  _GLCOLOR3F 0.7, 0.5, 0 ' Side R
  _GLVERTEX3F 0, 0.1, -1.0: _GLVERTEX3F 0.4, -0.2, 0.4: _GLVERTEX3F 0, -0.3, 0.4
  _GLCOLOR3F 0.9, 0.6, 0 ' Side L
  _GLVERTEX3F 0, 0.1, -1.0: _GLVERTEX3F -0.4, -0.2, 0.4: _GLVERTEX3F 0, -0.3, 0.4
  _GLEND: _GLPOPMATRIX
END SUB

SUB DrawBox (x, y, z, sx, sy, sz)
  _GLPUSHMATRIX: _GLTRANSLATEF x, y, z: _GLBEGIN _GL_QUADS
  _GLVERTEX3F -sx, sy, sz: _GLVERTEX3F sx, sy, sz: _GLVERTEX3F sx, -sy, sz: _GLVERTEX3F -sx, -sy, sz
  _GLVERTEX3F -sx, sy, -sz: _GLVERTEX3F sx, sy, -sz: _GLVERTEX3F sx, sy, sz: _GLVERTEX3F -sx, sy, sz
  _GLEND: _GLPOPMATRIX
END SUB

It's a premise not a FINAL but I DID NOT write a single line...i just gave a prompt to Google, few tweaks and BOOM!

Unseen
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  QB64 Pac-Man Clone TerryRitchie 49 12,631 02-08-2023, 12:54 PM
Last Post: madscijr
  Space Invaders Clone TerryRitchie 23 5,083 11-06-2022, 07:16 AM
Last Post: TerryRitchie
Heart Words of Wonders by Fugo - basic clone Petr 2 946 09-05-2022, 07:00 PM
Last Post: SMcNeill
  Pong Clone SierraKen 18 3,557 05-29-2022, 09:24 PM
Last Post: SierraKen

Forum Jump:


Users browsing this thread: 1 Guest(s)