1 REM  *********** GLOUP *************                                                        OLIVIER RICHE                                                                       AMSTRAD
5 ta=1:pt=0:PP=2620
6 GOSUB 60000
7 RANDOMIZE TIME
8 SPEED KEY 7,1
9 ta=1:pt=0:PP=2620
10 DIM a(40,21)
15 c=20:l=14
20 FOR f=3 TO 38
30 a(f,2)=1
40 a(f,20)=1
50 a(f,8)=1
60 NEXT f
70 FOR f=3 TO 19
80 a(2,f)=1
90 a(39,f)=1
100 NEXT f
110 a(20,1)=1:a(20,21)=1:a(1,11)=1:a(40,11)=1
120 FOR f=9 TO 19
130 a(7,f)=1
140 a(29,f)=1
150 NEXT f
160 FOR f=3 TO 7
170 a(12,f)=1
180 a(21,f)=1
190 a(26,f)=1
200 a(31,f)=1
210 NEXT f
220 FOR f=13 TO 20
230 a(f,5)=1
240 NEXT f
250 FOR f=9 TO 17
260 a(35,f)=1
270 NEXT f
280 FOR f=10 TO 28
290 a(f,14)=1
300 NEXT f
310 FOR f=9 TO 13
320 a(9,f)=1
330 NEXT f
340 FOR f=15 TO 19
350 a(22,f)=1
360 a(15+f,18)=1
370 NEXT f
380 FOR f=1 TO 4
390 a(14+f,17)=1
400 a(2+f,14)=1
410 a(35+f,14)=1
415 a(19,16+f)=1
416 a(14,13+f)=1
420 NEXT f
430 A(2,2)=2:a(21,2)=2:A(12,2)=2:A(26,2)=2:A(31,2)=2:A(39,2)=2
440 A(12,5)=2:A(21,5)=2:A(2,8)=2:A(7,8)=2:A(9,8)=2:A(12,8)=2:A(21,8)=2:A(26,8)=2:A(29,8)=2:A(31,8)=2:A(35,8)=2:A(39,8)=2
450 A(2,14)=2:A(7,14)=2:A(9,14)=2:A(14,14)=2:A(22,14)=2:A(29,14)=2:A(35,14)=2:A(39,14)=2
460 A(29,18)=2:A(35,18)=2:A(2,20)=2:A(7,20)=2:A(19,20)=2:A(22,20)=2:A(29,20)=2:A(39,20)=2
470 A(14,17)=2:A(19,17)=2
500 SYMBOL AFTER 251
510 SYMBOL 251,62,127,93,127,127,127,127,85
520 SYMBOL 252,60,118,255,240,248,252,127,60
530 SYMBOL 253,60,110,255,15,31,63,254,60
540 SYMBOL 254,60,126,255,255,245,231,70,68
550 SYMBOL 255,34,98,231,175,255,255,126,60
570 cf=8:lf=20:dir=2:cfz=3:lfz=2:dirz=2
990  MODE 1:INK 0,0:INK 1,18:INK 2,15:INK 3,24:BORDER 0:PEN 1:PAPER 0
1000 FOR ll=1 TO 21
1010 FOR cc=1 TO 40 
1020 ON a(cc,ll)+1 GOSUB 1100,1200,1200,1200,1200,1200,1200  
1030 NEXT cc
1040 NEXT ll
1050 LOCATE 17,11:PEN 3:PAPER 0:PRINT "GLOUP":PEN 1
1055 LOCATE 15,24:PRINT "Points:":LOCATE 33,24:PRINT "Tab:";TA:GOTO 1990
1100 LOCATE cc,ll:PRINT CHR$(143) 
1110 RETURN
1200 LOCATE cc,ll:PRINT "."
1210 RETURN
1990 LOCATE C,L:PEN 3:PRINT CHR$(253)
2000 ON a(c,l) GOTO 2002,2003
2001 GOTO 2010
2002 pt=pt+10:LOCATE 22,24:PEN 1:PRINT pt:a(c,l)=3:SOUND 1,200,3:SOUND 1,120,5:GOTO 2005
2003 pt=pt+10:LOCATE 22,24:PEN 1:PRINT pt:a(c,l)=4:SOUND 1,200,3:SOUND 1,120,5
2005 IF PT-PP=0 THEN GOTO 50030
2010 a$=INKEY$:IF a$="" THEN GOTO 2600
2011 IF ASC(a$)<240 THEN GOTO 2500
2020 ON ASC(a$)-239 GOTO 2100,2200,2300,2400
2030 GOTO 2500
2100 IF l=1 THEN LOCATE c,l:PRINT " ":l=21:GOTO 2500
2110 IF a(c,l-1)=0 THEN GOTO 2130
2115 LOCATE c,l:PRINT " "
2120 l=l-1
2130 p=255
2140 GOTO 2500
2200 IF l=21 THEN LOCATE c,l:PRINT " ":l=1:GOTO 2500
2210 IF a(c,l+1)=0 THEN GOTO 2230
2215 LOCATE c,l:PRINT " "
2220 l=l+1
2230 p=254
2250 GOTO 2500
2300 IF c=1 THEN LOCATE c,l:PRINT " ":c=40:GOTO 2500
2310 IF a(c-1,l)=0 THEN GOTO 2330
2315 LOCATE c,l:PRINT " "    
2320 c=c-1
2330 p=253
2340 GOTO 2500
2400 IF c=40 THEN LOCATE c,l:PRINT " ":c=1:GOTO 2500
2410 IF a(c+1,l)=0 THEN GOTO 2430
2415 LOCATE c,l:PRINT " " 
2420 c=c+1
2430 p=252
2500 IF c=cf AND l=lf THEN GOTO  20020
2502 IF c=cfz AND l=lfz THEN GOTO 20020
2505 LOCATE c,l:PEN 3:PRINT CHR$(p)
2600 ON dir GOTO 3000,4000,5000,6000,7000
3000 IF a(cf,lf)=1 THEN z$=".":GOTO 3020 
3010 z$=" "
3020 IF a(cf-1,lf)=2 OR a(cf-1,lf)=4 THEN dir=5:GOTO 3040
3030 dir=1
3040 LOCATE cf,lf:PEN 1:PRINT z$:cf=cf-1
3050 LOCATE cf,lf:PEN 2:PRINT CHR$(251):GOSUB 20000
3060 d=1:GOTO 8600
4000 IF a(cf,lf)=1  THEN z$=".":GOTO 4020 
4010 z$=" "
4020 IF a(cf+1,lf)=2 OR a(cf+1,lf)=4 THEN dir=5:GOTO 4040
4030 dir=2
4040 LOCATE cf,lf:PEN 1:PRINT z$:cf=cf+1
4050 LOCATE cf,lf:PEN 2:PRINT CHR$(251):GOSUB 20000
4060 d=2:GOTO 8600
5000 IF a(cf,lf)=1 THEN z$=".":GOTO 5020 
5010 z$=" "
5020 IF a(cf,lf-1)=2 OR a(cf,lf-1)=4 THEN dir=5:GOTO 5040
5030 dir=3
5040 LOCATE cf,lf:PEN 1:PRINT z$:lf=lf-1
5050 LOCATE cf,lf:PEN 2:PRINT CHR$(251):GOSUB 20000
5060 d=3:GOTO 8600
6000 IF a(cf,lf)=1 THEN z$=".":GOTO 6020 
6010 z$=" "
6020 IF a(cf,lf+1)=2 OR a(cf,lf+1)=4 THEN dir=5:GOTO 6040
6030 dir=4
6040 LOCATE cf,lf:PEN 1:PRINT z$:lf=lf+1
6050 LOCATE cf,lf:PEN 2:PRINT CHR$(251):GOSUB 20000
6060 d=4:GOTO 8600
7000 IF a(cf,lf)=2 THEN z$="."
7010 IF a(cf,lf)=4 THEN z$=" "
7011   IF CF=C THEN GOTO 7013
7012 GOTO  7020
7013 IF LF<L THEN GOTO 7700
7014 IF LF>L THEN GOTO 7800
7020 ran=INT(RND*4)+1
7030 ON ran GOTO 7500,7600,7700,7800
7500 IF a(cf+1,lf)=0 OR d=1 THEN GOTO 7020
7510 GOTO 4030
7600 IF a(cf-1,lf)=0 OR d=2 THEN GOTO 7020
7610 GOTO 3030
7700 IF a(cf,lf+1)=0 OR d=3 THEN GOTO 7020
7710 GOTO 6030
7800 IF a(cf,lf-1)=0 OR d=4 THEN GOTO 7020
7810 GOTO 5030
8600 ON dirz GOTO 9000,10000,11000,12000,13000
9000 IF a(cfz,lfz)=1 THEN z$=".":GOTO 9020 
9010 z$=" "
9020 IF a(cfz-1,lfz)=2 OR a(cfz-1,lfz)=4 THEN dirz=5:GOTO 9040
9030 dirz=1
9040 LOCATE cfz,lfz:PEN 1:PRINT z$:cfz=cfz-1
9050 LOCATE cfz,lfz:PEN 2:PRINT CHR$(251):IF CFZ=C AND LFZ=L THEN GOTO 20020
9060 dZ=1:GOTO 2000
10000 IF a(cfz,lfz)=1  THEN z$=".":GOTO 10020 
10010 z$=" "
10020 IF a(cfZ+1,lfZ)=2 OR a(cfZ+1,lfZ)=4 THEN dirZ=5:GOTO 10040
10030 dirz=2
10040 LOCATE cfz,lfz:PEN 1:PRINT z$:cfz=cfz+1
10050 LOCATE cfz,lfz:PEN 2:PRINT CHR$(251):IF CFZ=C AND LFZ=L THEN GOTO 20020
10060 dZ=2:GOTO 2000
11000 IF a(cfz,lfz)=1 THEN z$=".":GOTO 11020 
11010 z$=" "
11020 IF a(cfZ,lfZ-1)=2 OR a(cfZ,lfZ-1)=4 THEN dirZ=5:GOTO 11040
11030 dirz=3
11040 LOCATE cfz,lfz:PEN 1:PRINT z$:lfz=lfz-1
11050 LOCATE cfz,lfz:PEN 2:PRINT CHR$(251):IF CFZ=C AND LFZ=L THEN GOTO 20020
11060 dZ=3:GOTO 2000
12000 IF a(cfz,lfz)=1 THEN z$=".":GOTO 12020 
12010 z$=" "
12020 IF a(cfz,lfz+1)=2 OR a(cfz,lfz+1)=4 THEN dirz=5:GOTO 12040
12030 dirz=4
12040 LOCATE cfz,lfz:PEN 1:PRINT z$:lfz=lfz+1
12050 LOCATE cfz,lfz:PEN 2:PRINT CHR$(251):IF CFZ=C AND LFZ=L THEN GOTO 20020
12060 dZ=4:GOTO 2000
13000 IF a(cfz,lfz)=2 THEN z$="."
13010 IF a(cfz,lfz)=4 THEN z$=" "
13011   IF LFZ=L THEN GOTO 13013
13012 GOTO  13020
13013 IF CFZ<C THEN GOTO 13500
13014 IF CFZ>C THEN GOTO 13600
13020 ran=INT(RND*4)+1
13030 ON ran GOTO 13500,13600,13700,13800
13500 IF a(cfz+1,lfz)=0 OR dZ=1 THEN GOTO 13020
13510 GOTO 10030
13600 IF a(cfz-1,lfz)=0 OR dZ=2 THEN GOTO 13020
13610 GOTO 9030
13700 IF a(cfz,lfz+1)=0 OR dZ=3 THEN GOTO 13020
13710 GOTO 12030
13800 IF a(cfz,lfz-1)=0 OR dZ=4 THEN GOTO 13020
13810 GOTO 11030
20000 IF c=cf AND lf=l THEN GOTO 20020
20010 RETURN
20020 FOR n=15 TO 9 STEP -1:SOUND 1,626,40,n,,1:NEXT:PEN 1:LOCATE 12,23:PRINT "Une autre partie ?"
20025 c$=INKEY$:IF c$="" THEN GOTO 20025
20030 c$=UPPER$(c$)
20035 IF c$="O" THEN RUN
20040 IF c$="N" THEN MODE 2:END
20050 GOTO 20025
50030 INK 1,0,26:INK 0,26,0:BORDER 26,0:ta=ta+1:PP=PP+2620:FOR z=1 TO 2
50500 FOR X=1 TO 10
51000    A=INT (RND(1)*330)+284
51010 SOUND 1,A
51030    B=INT (RND(1)*340)+284
51040 SOUND 2,B
51050    C=INT (RND(1)*350)+284
51060  NEXT X
51070 NEXT Z
51080 GOTO 15
60000 A=0:B=26:C=26
60005  MODE 0
60010 INK 0,A:INK 1,B:BORDER C
60020 LOCATE 8,12:PRINT "GLOUP":LOCATE 2,23:PRINT "Appuyez sur ENTER"    
60030 A=A+1:B=B-1:C=C-1
60040 IF A>26 THEN A=0 
60045 IF C<0 THEN C=26
60050  IF B<0 THEN B=26
60060 O$=INKEY$:IF O$="" THEN GOTO 60010
60070 IF ASC(O$)=13 THEN RETURN
60080 GOTO 60010