1 ' Memory
2 ' by James Church
3 ' Amstrad Action    September 87
10 GOSUB 70 ' initialize
20 GOSUB 150 ' random selection
30 GOSUB 280 ' print board
40 GOSUB 360 ' play game
50 GOSUB 550 ' end of game
60 ERACE place$,char$: GOTO 10
70 ' intialize
80 RANDOMIZE TIME: PAPER 0: PEN 1
90 INK 0,0: INK 1,26: INK 2,6: BORDER 26
100 MODE 1: WINDOW#1,1,40,22,25
110 DIM char$(25),place$(10,5)
120 DEFINT a-z: turn=0: sc=0
130 FOR n=231 TO 255: char$(n-230)=CHR$(n): NEXT
140 RETURN
150 ' random selection
160 LOCATE 15,12: PRINT "Please wait"
170 FOR n=1 TO 25
180 x=RND*10: y=RND*5: IF x=0 OR y=0 THEN 180
190 z=RND*25: IF z=0 THEN 190
200 IF place$(x,y)<>"" THEN 180
210 IF char$(z)="" THEN 190
220 place$(x,y)=char$(z)
230 xx=RND*10: yy=RND*5: IF xx=0 OR yy=0 THEN 230
240 IF place$(xx,yy)<>"" THEN 230
250 place$(xx,yy)=char$(z): char$(z)="": NEXT n
260 SOUND 1,200,10,7: SOUND 2,300,10,1: SOUND 4,100,10,7
270 RETURN
280 'print board
290 CLS: c=1: FOR n=2 TO 40 STEP 4: LOCATE n,1
300 PRINT c: c=c+1: NEXT: LOCATE 37,1: PRINT 10
310 c=1: FOR n=2 TO 20 STEP 4: LOCATE 1,n
320 PRINT c: c=c+1: NEXT
330 FOR n=3 TO 40 STEP 4: FOR m=2 TO 20 STEP 4
340 LOCATE n,m: PRINT CHR$(143): NEXT m,n
350 RETURN
360 'play game
370 PEN#1,2: LOCATE 16,21: PRINT "Turns=";turn
380 LOCATE#1,1,1: PRINT#1, "Co-ordinates: "
390 CALL &BB03: INPUT#1,"Square 1 ";a,b
400 IF a>10 OR a<1 OR b>5 OR b<1 THEN 390
410 a1=(a*4)-1: b1=(b*4)-2: PAPER 1: PEN 0
420 LOCATE a1,b1: PRINT place$(a,b): PAPER 0: PEN 1
430 INPUT#1,"and square 2 ";c,d
440 IF c>10 OR c<1 OR d>5 OR d<1 THEN 430
450 CLS#1: c1=(c*4)-1: d1=(d*4)-2
460 PAPER 1: PEN 0: LOCATE c1,d1
470 PRINT place$(c,d): PAPER 0: PEN 1
480 IF place$(a,b)=place$(c,d) THEN sc=sc+1: GOTO 530
490 turn=turn+1
500 FOR n=1 TO 2000: NEXT
510 LOCATE a1,b1: PRINT CHR$(143): LOCATE c1,d1
520 PRINT CHR$(143): GOTO 370
530 'test to see if finished
540 IF sc=25 THEN RETURN ELSE GOTO 370
550 'end of game
560 CLS: LOCATE 14,2: PRINT "You've finished!"
570 IF hiturn=0 THEN hiturn=1000
580 IF hiturn>turn THEN hiturn=turn
590 LOCATE 13,5: PRINT "You took ";turn;" turns"
600 LOCATE 9,7: PRINT "Your best is ";hiturn;" turns"
610 LOCATE 11,20: PRINT "Another go?(Y/N) "
620 IF INKEY(43)<>-1 RETURN ELSE IF INKEY(46)<>-1 END
630 GOTO 620