Spielregel: EXPANSION wird auf einem quadratischen Spielfeld
mit einer Feldanzahl von 2x2 bis 6x6 gespielt. Auf jedes Feld
kann ein Spieler eine bestimmte Anzahl von Steinen setzen. Die
maximale Anzahl betraegt:
- auf Eckfeldern 1 Stein
- auf Randfeldern 2 Steine
- auf Mittelfeldern 3 Steine.
Jeder Spieler darf nur auf Leerfelder oder seine eigenen
Steine setzen. Wird die maximale Anzahl ueberschritten, werden
die Steine auf die Nachbarfelder gesprengt. Dabei werden alle
Nachbarsteine in seine umgewandelt. Sieger ist der Spieler,
der alle Steine in seine verwandelt hat.
Zeichensatz UTF-8+Z1013()+CTRL()-ohne Umlaute(äöüß)
10 WINDOW:CLS:HY=1:PRINT AT(0,0);" "
15 GOSUB 6500:GOTO 500
20!Bild aendern
21 IM=I:JM=J
22 FOR II=1 TO 5:IF B(II,1)=0 THEN II=5:GOTO 24
23 I=B(II,1):J=B(II,2):FA=A2(I,J):AN=A1(I,J):GOSUB 90
24 NEXT II:I=IM:J=JM
25 FOR II=1 TO 5:B(II,1)=0:NEXT II
26 F=2
27 IF K>2 THEN GOSUB 60
28 RETURN
30!Sprung
32 H3=0:F=2:FOR I=1 TO N:FOR J=1 TO N
34 IF A1(I,J)<A3(I,J)GOTO 50
36 IF I-1>0 THEN A1(I-1,J)=A1(I-1,J)+1:A2(I-1,J)=KA:B(F,1)=I-1:B(F,2)=J:F=F+1
38 IF I+1<=N THEN A1(I+1,J)=A1(I+1,J)+1:A2(I+1,J)=KA:B(F,1)=I+1:B(F,2)=J:F=F+1
40 IF J-1>0 THEN A1(I,J-1)=A1(I,J-1)+1:A2(I,J-1)=KA:B(F,1)=I:B(F,2)=J-1:F=F+1
42 IF J+1<=N THEN A1(I,J+1)=A1(I,J+1)+1:A2(I,J+1)=KA:B(F,1)=I:B(F,2)=J+1:F=F+1
44 A1(I,J)=A1(I,J)-A3(I,J):B(1,1)=I:B(1,2)=J
46 IF A1(I,J)=0 THEN A2(I,J)=0
48 ZL=I:SL=J:GOSUB 20:H3=1
50 NEXT J,I
51 IF H3=0 THEN RETURN:ELSE GOTO 32
60! SUCHE NACH ABBRUCH
62 H1=0:H2=0
64 FOR I1=1 TO N:FOR J1=1 TO N
66 IF A2(I1,J1)=1 THEN H1=1
68 IF A2(I1,J1)=2 THEN H2=2
70 NEXT J1,I1
72 IF H1*H2>0 THEN RETURN
74 PRINT:PRINT "und hat gewonnen!"
76 PRINT:PRINT "Neues Spiel ?";
78 A$=INKEY$:IF A$="" GOTO 78
80 IF A$="N"THEN WINDOW:CLS:END:ELSE WINDOW:CLS:RUN 500
90 ZE=255-FA*223+223:IF AN=0 THEN ZE=197:AN=149
92 FOR I4=1 TO 3:PRINT AT(3*I+I4,3*J);CHR$(ZE)+CHR$(ZE)+CHR$(ZE):NEXT I4
94 PRINT AT(3*I+2,3*J+1);CHR$(48+AN)
96 RETURN
100 REM COMPUTERZUG
105 IF K>0 GOTO 115
110 PRINT "Computer beginnt!":GOTO 120
115 PRINT "Computer setzt"
120 IF KA=1 GOTO 300:ELSE PRINT "Schwarz :":Q=0:U=Q:FOR N1=1 TO N:FOR J=1 TO N
125 P(N1,J)=0:IF A2(N1,J)=KA AND A1(N1,J)=A3(N1,J)-1 THEN P(N1,J)=1:Q=Q+1
130 IF A2(N1,J)<>1 THEN U=U+1
135 NEXT J,N1:IF Q=0 GOTO 205
140 FOR N1=1 TO N:FOR J=1 TO N:IF P(N1,J)=0 GOTO 180
145 O=J:FOR P=N1-1 TO 1 STEP-1:GOSUB 270:IF A1(P,J)<>A3(P,J)-1 THEN P=1
150 NEXT:IF N1>N-1 THEN FOR P=1 TO 1:GOTO 160
155 FOR P=N1+1 TO N:GOSUB 270:IF A1(P,J)<>A3(P,J)-1 THEN P=N
160 NEXT:P=N1:FOR O=J TO 1 STEP-1:GOSUB 270:IF A1(N1,O)<>A3(N1,O)-1 THEN O=1
165 NEXT:IF J>N-1 GOTO 180
170 FOR O=J+1 TO N:GOSUB 270:IF A1(N1,O)<>A3(N1,O)-1 THEN O=N
175 NEXT
180 NEXT:NEXT
185 M=0:FOR P=1 TO N:FOR O=1 TO N
190 IF P(P,O)>M THEN M=P(P,O):N1=P:J=O
195 NEXT:NEXT:IF Q<>1 OR((N1=1 OR N1=N)AND(J=1 OR J=N1)AND FN R(2)=1)THEN 265
200 IF Q=1 AND P(N1,J)>50 THEN 265
205 B=0:IF FN R(3)=1 OR U>N*(N-1)GOTO 220
210 FOR P=1 TO N:FOR O=1 TO N:IF A2(P,O)=KA THEN N1=P:J=O:P=N:O=N
215 NEXT:NEXT:GOTO 225
220 N1=FN R(N):J=FN R(N):IF A2(N1,J)=1 GOTO 220
225 R=0:FOR P=N1-1 TO N1-(N1<N):IF A2(P,J)<> 1 GOTO 235
230 IF A1(P,J)=A3(P,J)-1 THEN R=1
235 NEXT:FOR O=J-1 TO J-(J<N):IF A2(N1,O)<>1 GOTO 245
240 IF A1(N1,O)=A3(N1,O)-1 THEN R=1
245 NEXT:IF R>0 THEN B=B+1:IF B<U GOTO 220
250 GOTO 265
255 FOR P=1 TO N:FOR O=1 TO N:IF A2(P,O)<>1 THEN N1=P:J=O:P=N:O=N
260 NEXT:NEXT
265 PRINT "Zeile :";N1:PRINT "Spalte:";J:ZL=N1:SL=J:K=K+1:RETURN
270 P(N1,J)=P(N1,J)+1:IF A2(P,O)=2 THEN P(N1,J)=P(N1,J)+50
275 RETURN
300 REM COMPUTERZUG
302 PRINT "Weiss :"
304 FOR P=1 TO N:FOR J=1 TO N
306 P(P,J)=0:IF A2(P,J)=2 THEN NEXT J,P:GOTO 348
308 P(P,J)=30
310 DR=A3(P,J)-A1(P,J)-1:NO=4:NU=4:NL=4:NR=4
312 IF A2(P+1,J)=2 THEN NR=A3(P+1,J)-A1(P+1,J)-1
314 IF A2(P-1,J)=2 THEN NL=A3(P-1,J)-A1(P-1,J)-1
316 IF A2(P,J+1)=2 THEN NO=A3(P,J+1)-A1(P,J+1)-1
318 IF A2(P,J-1)=2 THEN NU=A3(P,J-1)-A1(P,J-1)-1
320 NG=NR:IF NG>NU THEN NG=NU
322 IF NG>NL THEN NG=NL
324 IF NG>NO THEN NG=NO
326 IF A2(P,J)=0 THEN P(P,J)=P(P,J)+10:ELSE GOTO 340
328 IF NG=4 THEN P(P,J)=P(P,J)+10-5*DR:NEXT J,P:GOTO 348
330 IF NG>DR THEN P(P,J)=P(P,J)+5:NEXT J,P:GOTO 348
332 IF NG=DR THEN P(P,J)=P(P,J)+30:NEXT J,P:GOTO 348
334 IF NG<DR THEN P(P,J)=P(P,J)-10
336 IF NG=0 THEN P(P,J)=P(P,J)-10
338 NEXT J,P:GOTO 348
340 IF NG=4 THEN P(P,J)=P(P,J)-5:NEXT J,P:GOTO 348
342 IF NG=DR THEN P(P,J)=P(P,J)+35:IF NG=0 THEN P(P,J)=P(P,J)+10:NEXT J,P:GOTO 348
344 IF NG<DR THEN P(P,J)=P(P,J)-0:IF NG=0 THEN P(P,J)=P(P,J)-15
346 NEXT J,P
348 MA=1
350 AI=0:FOR P=1 TO N:FOR J=1 TO N
352 IF P(P,J)>MA THEN MA=P(P,J):P=N:J=N:NEXT J,P:GOTO 350
353 IF P(P,J)<MA GOTO 356
354 AI=AI+1:IX(AI,1)=P:IX(AI,2)=J
356 NEXT J,P
358 P=FN R(AI)
360 N1=IX(P,1):J=IX(P,2):GOTO 265
500 WINDOW 17,23,HX,31:HY=1
505 INPUT "Feldgroesse (2 ... 6):";N
510 IF N<2 THEN PRINT:PRINT "Bitte Feldgrenzen beachten":PRINT:GOTO 505
515 N=INT(N):IF N<7 GOTO 530:ELSE N=6:PRINT
520 PRINT "Feldgroesse wird in Ihrem Interesse auf 6 reduziert !":PRINT
525 PAUSE 30
530 DIM A1(N,N),A2(N+1,N+1),A3(N,N),P(N,N),B(5,2),IX(N*N,2)
532 DEF FN R(X)=INT(RND(1)*X+1)
545 IF N<=2 GOTO 560
550 FOR I=2 TO N-1:A3(1,I)=3:A3(N,I)=3:A3(I,1)=3:A3(I,N)=3:NEXT
555 FOR I=2 TO N-1:FOR J=2 TO N-1:A3(I,J)=4:NEXT J,I
560 A3(1,1)=2:A3(1,N)=2:A3(N,1)=2:A3(N,N)=2
570 INPUT "0, 1 oder 2 Spieler ?";G
575 IF G<1 THEN PRINT "Computer spielt allein!":PAUSE 20:GOTO 589
576 IF G>2 THEN PRINT G-2;" muessen zuschaun!":G=2:PAUSE 20:GOTO 589
580 IF G=2 GOTO 589
585 INPUT "Spielstaerke 1 oder 2 ?";ST
589 GOSUB 6000
590 WINDOW 4+19*HY,20+11*HY,23-21*HY,39-18*HY
595 IF FN R(6)<4 THEN KA=1:ELSE KA=2
596 K=0
600 CLS:PRINT K+1;". Zug":PRINT
601 IF G=2 THEN GOSUB 1000:GOTO 607
602 IF G=0 THEN GOSUB 100:GOTO 607
605 IF ST*KA=2 THEN GOSUB 100:ELSE GOSUB 1000
607 ZH=3*ZL+2:SH=3*SL+1:HH=A1(ZL,SL)+48
608 FOR IJ=1 TO 2:PRINT AT(ZH,SH);CHR$(255):PAUSE 4:PRINT AT(ZH,SH);CHR$(HH)
609 PAUSE 4:NEXT
610!Setzen Matrix
615 A1(ZL,SL)=A1(ZL,SL)+1:A2(ZL,SL)=KA:B(1,1)=ZL:B(1,2)=SL:GOSUB 20
620 GOSUB 30
625 IF KA=1 THEN KA=2:ELSE KA=1
630 GOTO 600
1000!Eingabe Zeile(ZL)/Spalte(SL)
1001 IF K>0 GOTO 1005
1002 IF KA=1 THEN PRINT "Weiss beginnt !":ELSE PRINT "Schwarz beginnt !"
1003 GOTO 1010
1005 IF KA=1 THEN PRINT "Weiss setzt :":ELSE PRINT "Schwarz setzt :"
1010 K=K+1:PRINT:INPUT "Zeile :";ZL:INPUT "Spalte:";SL
1012 B(1,1)=ZL:B(1,2)=SL
1015 IF SL=0 OR SL>N OR ZL=0 OR ZL>N GOTO 1024
1022 IF A2(ZL,SL)=KA OR A2(ZL,SL)=0 GOTO 1030
1024 PRINT "Das geht nicht !":PRINT "Noch mal :":PRINT
1026 BEEP:BEEP:BEEP:PAUSE 20:K=K-1:GOTO 1001
1030 I=ZL:J=SL:RETURN
6000 WINDOW:CLS
6010 FOR I4=1 TO N:PRINT AT(2,3*I4);I4
6020 PRINT AT(3*I4+2,0);I4:NEXT
6021 PRINT AT(3,2);CHR$(168):N3=3*N
6022 FOR I4=3 TO N3+2:PRINT AT(3,I4);CHR$(160):NEXT
6023 PRINT AT(3,N3+3);CHR$(169)
6024 FOR I4=4 TO N3+3:PRINT AT(I4,N3+3);CHR$(161):NEXT
6025 PRINT AT(N3+4,N3+3);CHR$(170)
6026 FOR I4=N3+2 TO 3 STEP-1:PRINT AT(N3+4,I4);CHR$(160):NEXT
6027 PRINT AT(N3+4,2);CHR$(167)
6028 FOR I4=N3+3 TO 4 STEP-1:PRINT AT(I4,2);CHR$(161):NEXT
6030 FOR I4=1 TO 3*N:FOR J4=1 TO 3*N
6040 PRINT AT(I4+3,J4+2);CHR$(197)
6050 NEXT J4,I4
6060 RETURN
6500!TITELBILD
6505 HX=0
6510 FOR J=1 TO 3:FOR I=1 TO 5
6520 TI=5*RND(1)+1:HZ=9+TI
6530 ON I GOSUB 6600,6610,6620,6630,6640
6540 PAUSE 5:NEXT I,J
6550 FOR I=1 TO 5
6555 HZ=I+9
6560 ON I GOSUB 6600,6610,6620,6630,6640
6570 PAUSE 5:NEXT:GOTO 6650
6600 PRINT AT(HZ,HX);" ":RETURN
6610 PRINT AT(HZ,HX);" ":RETURN
6620 PRINT AT(HZ,HX);" ":RETURN
6630 PRINT AT(HZ,HX);" ":RETURN
6640 PRINT AT(HZ,HX);" ":RETURN
6650 PRINT AT(23,23);"Weiter ?"
6660 A$=INKEY$
6670 IF INKEY$="" GOTO 6670
6680 CLS:WINDOW 2,23,0,31
6690 PRINT AT(0,10);"EXPANSION"
6700 PRINT "Spielregel: EXPANSION wird auf einem quadratischen Spielfeld "
6710 PRINT "mit einer Feldanzahl von 2x2 bis6x6 gespielt. Auf jedes Feld "
6720 PRINT "kann ein Spieler eine bestimmteAnzahl von Steinen setzen. Die"
6730 PRINT "maximale Anzahl betraegt: - auf Eckfeldern 1 Stein "
6740 PRINT " - auf Randfeldern 2 Steine - auf Mittelfeldern 3 Steine.
6750 PRINT "Jeder Spieler darf nur auf Leer-felder oder seine eigenen "
6760 PRINT "Steine setzen. Wird die maximaleAnzahl ueberschritten, werden "
6780 PRINT "die Steine auf die Nachbarfeldergesprengt. Dabei werden alle "
6790 PRINT "Nachbarsteine in seine umgewan- delt. Sieger ist der Spieler, "
6800 PRINT "der alle Steine in seine verwan-delt hat."
6810 PRINT "Alles klar? Dann >ENTER<"
6820 A$=INKEY$:IF A$=""GOTO 6820
6830 CLS:RETURN