mobilebasic/cars/main.bas

200 lines
4.1 KiB
QBasic
Raw Normal View History

FUNCTION CONSTRAINT(NUM AS INTEGER, MIN AS INTEGER, MAX AS INTEGER) AS INTEGER
IF (NUM < MIN) THEN
CONSTRAINT=MIN
ELSEIF (NUM > MAX) THEN
CONSTRAINT=MAX
ELSE
CONSTRAINT=NUM
END IF
END FUNCTION
FUNCTION GETROT() AS INTEGER
DIM ACCX, ACCY, ACCZ AS INTEGER
DIM RESULT AS INTEGER
SLEEP 1000
REM IF ISACCELEROMETERAVAILABLE() THEN
ACCX = GETACCELEROMETERX()
ACCY = GETACCELEROMETERY()
ACCZ = GETACCELEROMETERZ()
IF ACCY < 9 AND ACCY > 1 THEN
RESULT = 1
ELSEIF ACCX < 10 AND ACCX > 4 THEN
RESULT = 2
ELSEIF ACCX > (-10) AND ACCX < (-4) THEN
RESULT = 3
REM ELSE
REM RESULT = 2
END IF
REM ELSE
REM RESULT = 2
REM END IF
REM ALERT STR$(RESULT), STR$(ACCX) + "," + STR$(ACCY) + "," + STR$(ACCZ), "OK","","", TRUE
GETROT=RESULT
END FUNCTION
FUNCTION CHECKCOLLISION(CARX AS INTEGER, CARY AS INTEGER, CARSIZE AS INTEGER, OBJX AS INTEGER, OBJY AS INTEGER, OBJSZ AS INTEGER) AS BOOLEAN
IF OBJX > (CARX-OBJSZ-1) AND OBJX < (CARX+CARSIZE+1) AND OBJY > (CARY-OBJSZ-1) AND OBJY < (CARY+CARSIZE+5) THEN
CHECKCOLLISION=TRUE
ELSE
CHECKCOLLISION=FALSE
END IF
END FUNCTION
SUB MAIN
DIM ACCX, ACCY, ACCZ AS INTEGER
DIM COORD AS INTEGER
DIM W, H, X, Y AS INTEGER
DIM BORDER AS INTEGER
DIM SIZE,SPEED AS INTEGER
DIM CNRD,CBORDR AS INTEGER
DIM COINSPD, ENMSPD AS INTEGER
DIM COINX1,COINY1 AS INTEGER
DIM COINX2, COINY2 AS INTEGER
DIM ENMX1, ENMY1 AS INTEGER
DIM ENMX2, ENMY2 AS INTEGER
DIM ENMX3, ENMY3 AS INTEGER
DIM ROT AS INTEGER
DIM COINS AS INTEGER
DIM COINSSTR AS STRING
DIM GAMEOVER AS BOOLEAN
GRAPHICS
W = SCREENWIDTH()
H = SCREENHEIGHT()
SIZE = 70
X = W/2-SIZE/2
Y = H/2-SIZE/2+100
BORDER = W-SIZE
SPEED=10
CNRD=20
CBORDR=W-(CNRD*2)
COINSPD=6
ENMSPD=5
COINX1=CONSTRAINT(RND(20), 0, CBORDR)
COINX2=CONSTRAINT(RND(30), 0, CBORDR)
ENMX1=CONSTRAINT(RND(60), 0, BORDER)
ENMX2=CONSTRAINT(RND(900), 0, BORDER)
ENMX3=CONSTRAINT(RND(12), 0, BORDER)
ROT = GETROT()
IF ISACCELEROMETERAVAILABLE() THEN
WHILE NOT GAMEOVER
ACCX = GETACCELEROMETERX()
ACCY = GETACCELEROMETERY()
ACCZ = GETACCELEROMETERZ()
COORD = ACCY
IF ROT = 1 THEN
COORD = -ACCX
ELSEIF ROT = 3 THEN
COORD = -ACCY
ELSE
COORD = ACCY
END IF
X=X+(COORD*SPEED)
X=CONSTRAINT(X,0,BORDER)
SETCOLOR 70,70,70
CLS
SETCOLOR 255,255,255
/*DEBUG*/
SETFONT "SANS-SERIF", 12
DRAWSTRING STR$(ACCX),5,10
DRAWSTRING STR$(ACCY),5,20
DRAWSTRING STR$(ACCZ),5,30
DRAWSTRING STR$(X),5,40
/**/
FILLRECT X, Y, SIZE, SIZE
IF CHECKCOLLISION(X,Y,SIZE,COINX1,COINY1,CNRD) THEN
COINS=COINS+1
END IF
IF COINY1 > H OR CHECKCOLLISION(X,Y,SIZE,COINX1,COINY1,CNRD) THEN
COINX1=CONSTRAINT(RND(70),0,CBORDR)
COINY1=0-(CNRD*2)
END IF
IF CHECKCOLLISION(X,Y,SIZE,COINX2,COINY2,CNRD) THEN
COINS=COINS+1
END IF
IF COINY2 > H OR CHECKCOLLISION(X,Y,SIZE,COINX2,COINY2,CNRD) THEN
COINX2=CONSTRAINT(RND(800),0,CBORDR)
COINY2=0-(CNRD*2)
END IF
SETCOLOR 252,186,3
FILLCIRCLE COINX1, COINY1, CNRD
FILLCIRCLE COINX2, COINY2, CNRD
COINY1 = COINY1 + COINSPD
COINY2 = COINY2 + COINSPD
SETCOLOR 255,255,255
SETFONT "SANS-SERIF", 30
COINSSTR = "$" + STR$(COINS)
DRAWSTRING COINSSTR, W-STRINGWIDTH(COINSSTR)-5, STRINGHEIGHT(COINSSTR)+10
SETCOLOR 3,200,3
FILLRECT ENMX1, ENMY1, SIZE, SIZE
FILLRECT ENMX2, ENMY2, SIZE, SIZE
FILLRECT ENMX3, ENMY3, SIZE, SIZE
IF ENMY1 > H THEN
ENMX1=CONSTRAINT(RND(60), 0, BORDER)
ENMY1=0-SIZE
END IF
IF CHECKCOLLISION(X, Y, SIZE, ENMX1, ENMY1, SIZE) THEN
GAMEOVER=TRUE
END IF
IF ENMY2 > H THEN
ENMX2=CONSTRAINT(RND(900), 0, BORDER)
ENMY2=0-SIZE
END IF
IF CHECKCOLLISION(X, Y, SIZE, ENMX2, ENMY2, SIZE) THEN
GAMEOVER=TRUE
END IF
IF ENMY3 > H THEN
ENMX3=CONSTRAINT(RND(12), 0, BORDER)
ENMY3=0-SIZE
END IF
IF CHECKCOLLISION(X, Y, SIZE, ENMX3, ENMY3, SIZE) THEN
GAMEOVER=TRUE
END IF
ENMY1=ENMY1+ENMSPD
ENMY2=ENMY2+ENMSPD
ENMY3=ENMY3+ENMSPD
REPAINT
SLEEP 30
END WHILE
IF GAMEOVER THEN
ALERT "GAME OVER", "COINS: " + STR$(COINS), "OK","","", TRUE
END IF
END IF
END SUB