Snaker is a game I wrote in BASIC for the Commander X16 and published in Compute’s Gazette magazine.
10 REM == SNAKER BY JASON OAKLEY / SUITE16.AU ==
20 UC$ = CHR$(142):PRINT UC$:CLS:COLOR 1,0:SCREEN 3
30 LOCATE 5,4:PRINT "WELCOME TO SNAKER BY JASON OAKLEY!"
40 LOCATE 8,11:PRINT "PRESS SPACE TO PLAY!"
50 LOCATE 11,10:PRINT "USE ARROW KEYS TO MOVE"
60 GET A$:IF A$<> CHR$(32) THEN GOTO 60
70 CLS:COLOR 2,0
80 PL$ = CHR$(113):PC = 5:REM == PLAYER CHAR AND COLOUR ==
90 HT$ = CHR$(115):HC = 7:REM == HEART CHAR AND COLOUR ==
100 CR$ = CHR$(118):CC = 2: REM == CROSS CHAR AND COLOUR ==
110 WA$ = CHR$(166):WC = 12:REM == WALL CHAR AND COLOUR ==
120 PX = 20:PY = 15: REM == PLAYER X,Y ==
130 XM = 100:YM = 200:DIM SX(XM),SY(YM):REM == MAX VALUES FOR SNAKE LENGTH ==
140 SS = 4:FOR T = 0 TO SS:SX(T)=PX:SY(T)=PY:NEXT T:REM == SNAKE SIZE,X,Y ==
150 SD = 1:REM == SNAKE DIRECTION. 1=RIGHT,2=DOWN,3=LEFT,4=UP
160 COLOR WC
170 REM == SET UP WALLS ==
180 FOR X = 1 TO 39
190 LOCATE 1,X:PRINT WA$;
200 LOCATE 30,X:PRINT WA$;
210 NEXT X
220 LOCATE 1,40:PRINT WA$;
230 VPOKE 1,$B000+256*29+2*39,102
240 VPOKE 1,$B000+256*29+2*39+1,12
250 FOR Y = 1 TO 29
260 LOCATE Y,1:PRINT WA$;
270 LOCATE Y,40:PRINT WA$;
280 NEXT Y
290 SC = 0: REM == SCORE ==
300 SP = 200:REM == SNAKE SPEED ==
310 C1 = 20: REM == COUNTER TO ADD X DEATH CHAR ==
320 C2 = 10: REM == COUNTER TO ADD HEART CHAR ==
330 C1 = C1 - 1:IF C1 = 0 THEN LOCATE INT(RND(1)*28)+2,INT(RND(1)*38)+2
340 IF C1 = 0 THEN COLOR CC:PRINT CR$;:C1 = 100
350 C2 = C2 - 1:IF C2 = 0 THEN LOCATE INT(RND(1)*28)+2,INT(RND(1)*38)+2
360 IF C2 = 0 THEN COLOR HC:PRINT HT$;:C2 = 50
370 LOCATE 1,15:COLOR 1:PRINT "SCORE: ";SC
380 COLOR PC
390 FOR T = 0 TO SS:REM == 0 TO SNAKE SIZE ==
400 LOCATE SY(T),SX(T):PRINT PL$;
410 NEXT
420 LOCATE SY(SS),SX(SS):PRINT CHR$(32);
430 REM == MOVE SNAKE ==
440 FOR T = 0 TO SP:NEXT T:REM == SNAKE SPEED ==
450 IF SD = 1 AND PX < 40 THEN PX=PX+1:SX(0)=PX
460 IF SD = 2 AND PY < 30 THEN PY=PY+1:SY(0)=PY
470 IF SD = 3 AND PX > 1 THEN PX=PX-1:SX(0)=PX
480 IF SD = 4 AND PY > 1 THEN PY=PY-1:SY(0)=PY
490 REM == GET CHAR AT SNAKE HEAD LOCATION ==
500 DA = TDATA(PX-1,PY-1)
510 IF DA = 83 THEN SC = SC + 10:FMDRUM 2,33:REM == ATE HEART ==
520 IF DA = 83 THEN SS=SS+1:IF SS >XM THEN SS = XM
530 IF DA = 83 THEN SY(SS)=SY(SS-1):SX(SS)=SX(SS-1)
540 IF DA = 83 THEN SP=SP-5:IF SP <0 THEN SP = 0
550 IF DA = 102 THEN GOTO 720:REM == HIT WALL ==
560 IF DA = 86 THEN GOTO 720:REM == HIT CROSS ==
570 IF DA = 81 THEN GOTO 720:REM == SNAKE ATE ITSELF ==
580 REM == UPDATE SNAKE ARRAY ==
590 FOR T = SS TO 1 STEP -1:SX(T)=SX(T-1):SY(T)=SY(T-1):NEXT T
600 REM == GET PLAYER INPUT ==
610 JY = JOY(0):REM == GET ARROWKEY INPUT ==
620 IF JY = 2 AND SD = 1 THEN GOTO 720:REM == SNAKE ATE ITSELF ==
630 IF JY = 2 THEN SD = 3
640 IF JY = 1 AND SD = 3 THEN GOTO 720:REM == SNAKE ATE ITSELF ==
650 IF JY = 1 THEN SD = 1
660 IF JY = 8 AND SD = 2 THEN GOTO 720:REM == SNAKE ATE ITSELF ==
670 IF JY = 8 THEN SD = 4
680 IF JY = 4 AND SD = 4 THEN GOTO 720:REM == SNAKE ATE ITSELF ==
690 IF JY = 4 THEN SD = 2
700 GOTO 330
710 REM == GAME OVER! ==
720 LOCATE 3,1:FMDRUM 1,46
730 FOR T = 1 TO 5
740 COLOR INT(RND(1)*14)+1
750 PRINT SPC(5)"*** GAME OVER! ***"
760 NEXT T
770 LOCATE 15,10:COLOR 1
780 PRINT "YOUR SCORE: ";SC
790 LOCATE 20,10
800 PRINT "PRESS SPACE TO RESTART!!"
810 GET A$:IF A$ <> CHR$(32) THEN GOTO 810
820 RUN
It’s like the snake games of old! Many may remember snake from the Nokia phones, but it existed for many years before that on our 8-bit and 16-bit computers.
Control your snake with the arrow keys, eating up all the hearts, but avoid hitting the X’s, walls and yourself!

Comments