Skip to content

Instantly share code, notes, and snippets.

@leobm
Created April 25, 2025 13:26
Show Gist options
  • Save leobm/1da12c28e47ed2b67e149dd24da16c09 to your computer and use it in GitHub Desktop.
Save leobm/1da12c28e47ed2b67e149dd24da16c09 to your computer and use it in GitHub Desktop.
Amstrad CPC, simple snake, locomotive basic
10 MODE 1:INK 0,0:INK 1,19:PAPER 0: PEN 1:CLS
20 w=40: h=25: l=5
30 dx=1: dy=0
35 PEN 2
40 FOR xw=1 TO w
50 LOCATE xw,1: PRINT "#"
60 LOCATE xw,h: PRINT "#";
70 NEXT
80 FOR yh=1 TO h
90 LOCATE 1,yh: PRINT "#";
100 LOCATE w,yh: PRINT "#";
110 NEXT
115 PEN 1
120 GOSUB 440
130 DIM x(100), y(100)
140 FOR i=0 TO l-1
150 x(i)=10-i: y(i)=10
160 NEXT
170 RANDOMIZE TIME
180 WHILE 1
190 k$=INKEY$
200 IF INKEY(0)=0 THEN dx=0:dy=-1
210 IF INKEY(2)=0 THEN dx=0:dy=1
220 IF INKEY(8)=0 THEN dx=-1:dy=0
230 IF INKEY(1)=0 THEN dx=1:dy=0
240 IF k$="q" THEN GOTO 410
250 LOCATE x(l-1),y(l-1): PRINT " "
260 FOR i=l TO 1 STEP -1
270 x(i)=x(i-1)
280 y(i)=y(i-1)
290 NEXT i
300 x(0)=x(0)+dx
310 y(0)=y(0)+dy
320 IF x(0)=fx AND y(0)=fy THEN GOSUB 420
330 IF x(0)<2 OR x(0)>w-1 OR y(0)<2 OR y(0)>h-1 THEN GOTO 480
340 FOR i=1 TO l-1
350 IF x(0) = x(i) AND y(0) = y(i) THEN GOTO 480
360 NEXT i
370 FOR i=0 TO l-1
380 LOCATE x(i),y(i): PRINT "O"
390 NEXT i
400 WEND
410 END
420 SOUND 1, 1000, 20, 10
430 l=l+1
440 fx=INT(RND*(w-1))+2
450 fy=INT(RND*(h-1))+2
460 PEN 3: LOCATE fx,fy: PRINT "*": PEN 1
470 RETURN
480 FOR i=15 TO 1 STEP -1
490 CLS: LOCATE RND*(w-10)+1, 10:PRINT "GAME OVER"
500 SOUND 1, INT(RND*800),10,i,15
510 NEXT i
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment