Game on Basic! + some tests, drawbitmap upd

This commit is contained in:
Андрей 2021-06-16 09:41:46 +04:00 committed by GitHub
parent 114eabe5aa
commit cc8fd24a10
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 385 additions and 0 deletions

199
cars/main.bas Normal file
View file

@ -0,0 +1,199 @@
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

10
geopos/main.bas Normal file
View file

@ -0,0 +1,10 @@
SUB MAIN
IF ISLOCATIONAVAILABLE() THEN
PRINT "LAT:" + STR$(GETLATITUDE())
PRINT "LON:" + STR$(GETLONGITUDE())
ELSE
PRINT "GPS IS NOT AVAILABLE!"
END IF
END SUB

107
picture/drawbitmap.bas Normal file
View file

@ -0,0 +1,107 @@
FUNCTION FIXBINBYTE(B AS BYTE) AS INTEGER
DIM TMP AS INTEGER
TMP = INTEGER(B)
IF TMP < 0 THEN
FIXBINBYTE = TMP+256
ELSE
FIXBINBYTE = TMP
END IF
END FUNCTION
FUNCTION GETBITMAP(FILENAME AS STRING, W AS INTEGER, H AS INTEGER) AS INTEGER(65536,3)
PRINT "startreadfunc"
REM 16'384
DIM RGB(65536,3) AS INTEGER
DIM BMPBYTE AS BYTE
DIM ERR AS STRING
DIM I, XOFF, YOFF, PIXEL AS INTEGER
PIXEL = 1
PRINT "startread"
OPEN #1, FILENAME, "r"
FOR I=0 TO 52
GET #1, BMPBYTE
END FOR
TRY
FOR YOFF=0 TO H
FOR XOFF=0 TO W
GET #1, BMPBYTE
RGB(PIXEL,1) = FIXBINBYTE(BMPBYTE)
GET #1, BMPBYTE
RGB(PIXEL,2) = FIXBINBYTE(BMPBYTE)
GET #1, BMPBYTE
RGB(PIXEL,3) = FIXBINBYTE(BMPBYTE)
PIXEL = PIXEL+1
END FOR
END FOR
CATCH ERR
REM PRINT ERR
END TRY
PRINT "ok"
CLOSE #1
PRINT "endreadfunc"
END FUNCTION
FUNCTION DRAWBMPTP(X AS INTEGER, Y AS INTEGER, W AS INTEGER, H AS INTEGER, IMAGE(65536,3) AS INTEGER, TPR AS INTEGER, TPG AS INTEGER, TPB AS INTEGER) AS INTEGER
DIM XOFF, YOFF, PIXEL AS INTEGER
DIM R,G,B,ALPHA AS INTEGER
DIM ERR AS STRING
PIXEL = 1
ALPHA = 0
FOR YOFF=0 TO H
PRINT STR$(R) + "," + STR$(G) + "," + STR$(B) + "," + STR$(ALPHA)
FOR XOFF=0 TO W
TRY
R = IMAGE(PIXEL,1)
G = IMAGE(PIXEL,2)
B = IMAGE(PIXEL,3)
IF (R = TPR) AND (G = TPG) AND (B = TPB) THEN
ALPHA = 100
ELSE
ALPHA = 0
END IF
SETCOLOR R, G, B, ALPHA
PLOT X+XOFF, Y+YOFF
CATCH ERR
REM PRINT "ERR" + STR$(PIXEL)
END TRY
PIXEL = PIXEL + 1
END FOR
REPAINT
SLEEP 1000
END FOR
REM REPAINT
DRAWBMPTP=PIXEL
END FUNCTION
FUNCTION DRAWBMP(X AS INTEGER, Y AS INTEGER, W AS INTEGER, H AS INTEGER, IMAGE(65536,3) AS INTEGER) AS INTEGER
DRAWBMP=DRAWBMPTP(X,Y,W,H,IMAGE,-1,-1,-1)
END FUNCTION

46
picture/example.bas Normal file
View file

@ -0,0 +1,46 @@
#include "drawbitmap.bas"
DIM PICT(65536,3) AS INTEGER
SUB WRITEARRAY(INARR(65536,3) AS INTEGER)
DIM K, L AS INTEGER
FOR K=1 TO 65536
FOR L=1 TO 3
PICT(K,L) = INARR(K,L)
END FOR
END FOR
END SUB
FUNCTION GETTIME() AS STRING
DIM TM AS DOUBLE
TM = NOW()
GETTIME = STR$(HOUR(TM)) + ":" + STR$(MINUTE(TM)) + ":" + STR$(SECOND(TM)) + "." + STR$(MILLISECOND(TM))
END FUNCTION
SUB MAIN
DIM PXDREW AS INTEGER
GRAPHICS
PRINT "INIT=" + GETTIME()
SETCOLOR 255,255,255
CLS
REPAINT
PRINT "FILL=" + GETTIME()
WRITEARRAY(GETBITMAP("test.bmp",256,256))
PRINT "READ=" + GETTIME()
PXDREW = DRAWBMPTP(5, 5, 256, 256, PICT, 0,0,0)
PRINT "DRAW=" + GETTIME()
PRINT "DEBUG: " + STR$(PXDREW)
SLEEP 1000
END SUB

BIN
picture/test.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

23
temp/main.bas Normal file
View file

@ -0,0 +1,23 @@
SUB MAIN
DIM STOP AS BOOLEAN
DIM A, R AS INTEGER
DIM TEMP AS DOUBLE
DIM ITEMS(2) AS STRING
ITEMS(1)="START"
ITEMS(2)="EXIT"
WHILE NOT STOP
R = SELECT("SELECT ACTION",ITEMS,FALSE)
IF R = 1 THEN
PRINT("WAIT...")
SLEEP 1000
TEMP = ROUND(RND(60)*6,2)
A = ALERT(STR$(TEMP),"DONE", "OK","","", TRUE)
ELSE
STOP = TRUE
END IF
END WHILE
END SUB