100 ' *** Mini-Reversi *** 110 ' (c) 1990 by A. Meile 120 : 130 DEFINT A-Z 140 RANDOMIZE TIMER 150 DIM S$(3),SM(1),SF(7,7),SX(63),SY(63),HF(7,7),FG(3,2),CR(73),H(2),B1(1123) 160 FOR I=0 TO 3:READ S$(I):NEXT I 170 DATA "Mensch","Comp. 1","Comp. 2","Comp. 3" 171 FOR I=0 TO 2:FOR J=I TO 3:READ FG(J,I):NEXT J:NEXT I 172 DATA 9,3,8,7,1,2,4,6,5 180 SM(0)=0:SM(1)=2 190 KEY OFF 200 SCREEN 1 210 LINE (0,0)-(23,23),3,BF 220 LINE (3,3)-(20,20),0,BF 230 GET (0,0)-(23,23),CR 240 SCREEN 0 250 COLOR 1,7:CLS:PRINT 260 PRINT TAB(12);"É͸";SPC(12);"ÕÍ»" 270 PRINT TAB(12);"º ³";SPC(12);"³ º" 280 PRINT TAB(12);"ÓÄÅ";STRING$(12,196);"ÅĽ" 290 PRINT TAB(14);"³";:COLOR 14 300 PRINT "Mini-Reversi";:COLOR 1:PRINT "³" 310 PRINT TAB(12);"ÖÄÅ";STRING$(12,196);"ÅÄ·" 320 PRINT TAB(12);"º ³";SPC(12);"³ º" 330 PRINT TAB(12);"È;";SPC(12);"Ôͼ" 340 COLOR 4:LOCATE 3,13:PRINT CHR$(4); 350 LOCATE ,28:PRINT CHR$(4):LOCATE 7,13:PRINT CHR$(4);:LOCATE ,28:PRINT CHR$(4) 360 COLOR 8:PRINT:PRINT 370 PRINT " (C) 1990 by Andreas Meile" 380 PRINT 390 COLOR 10:PRINT " Bet„tigung mit Cursortasten:" 400 MP=0:GOSUB 10000:MP=1:GOSUB 10000 410 LOCATE 21,7:COLOR 15 420 PRINT "Spiel starten" 430 LOCATE 24,7:PRINT "Programm beenden"; 440 MP=2:GOSUB 11000 450 A$="" 460 WHILE A$="":A$=INKEY$:WEND 470 IF A$=CHR$(0)+"H" THEN MP=MP-1 AND 3:GOSUB 11000 480 IF A$=CHR$(0)+"P" THEN MP=MP+1 AND 3:GOSUB 11000 490 IF MP>1 THEN 540 500 IF A$=CHR$(0)+"M" THEN SM(MP)=SM(MP)+1 510 IF A$=CHR$(0)+"K" THEN SM(MP)=SM(MP)-1 520 SM(MP)=SM(MP)AND 3:GOSUB 10000 530 GOTO 450 540 IF A$<>CHR$(13) THEN 450 545 IF MP=3 THEN 2000 550 : 560 SCREEN 1 570 FOR I=0 TO 7:FOR J=0 TO 7:SF(I,J)=0:NEXT J:NEXT I 580 SF(3,3)=1:SF(4,4)=1 590 SF(3,4)=2:SF(4,3)=2 600 FOR I=0 TO 7:Y=4+24*I 610 FOR J=0 TO 7:X=4+24*J 620 IF SF(J,I) THEN LINE (X,Y)-(X+15,Y+15),SF(J,I),BF ELSE LINE (X,Y)-(X+15,Y+15),3,B 630 NEXT J:NEXT I 640 FOR I=0 TO 7 650 LOCATE 25,2+3*I:PRINT CHR$(65+I); 660 LOCATE 2+3*I,25:PRINT CHR$(56-I) 670 NEXT I 680 FOR I=0 TO 1 690 LINE (200,I*80)-(319,I*80+79),I+1,BF 700 LINE (207,I*80+7)-(312,I*80+72),0,BF 710 LOCATE 2+10*I,27:PRINT "Spieler ";CHR$(49+I);":" 720 LINE (208,17+80*I)-(283,17+80*I),3 730 LOCATE 4+10*I,27:PRINT "Spielertyp:" 740 LOCATE 5+10*I,27:PRINT S$(SM(I)) 750 LOCATE 6+10*I,27:PRINT "Steinezahl: 2" 760 LOCATE 7+10*I,27:PRINT "Letzt. Zug:--" 770 LOCATE 8+10*I,27:PRINT "Umgef„rbt : 0" 780 LOCATE 9+10*I,29:PRINT "am Zug" 790 NEXT I 800 LOCATE 21,27:PRINT "Cursorpos.:--" 810 LOCATE 23,27:PRINT "Zug Nummer: 0" 820 LOCATE 24,27:PRINT "Leere Fel.:60"; 830 EI=1:GE=2:ZN=0:EIS=SM(0):GES=SM(1) 840 : 850 LOCATE 10*EI-1,27:PRINT "*" 860 LOCATE 10*GE-1,27:PRINT " " 870 IF EI=1 THEN ZN=ZN+1:LOCATE 23,38:PRINT USING "##";ZN 880 AE=0:VB=0:ZM=0 890 FOR YP=0 TO 7:FOR XP=0 TO 7:GOSUB 20000 900 IF N1 THEN SX(ZM)=XP:SY(ZM)=YP:ZM=ZM+1 910 NEXT XP:NEXT YP 920 IF ZM THEN 960 925 ZF=ZF+1 930 N$="Spieler "+CHR$(48+EI)+" kann nicht ziehen!":C=EI 940 GOSUB 40000 950 GOTO 1800 960 ZF=0 965 IF EIS THEN 1100 966 GZ=CINT(INT(CSNG(ZM)*RND)) 970 CX=SX(GZ):CY=SY(GZ):HD=0 975 LOE=0 980 IF LOE THEN PUT (AX*24,AY*24),CR ELSE LOE=-1 990 AX=CX:AY=CY 1000 PUT (CX*24,CY*24),CR 1002 LOCATE 21,38:PRINT CHR$(65+CX);CHR$(56-CY) 1010 A$="":WHILE A$="":A$=INKEY$:WEND 1020 IF A$=CHR$(0)+"H" THEN CY=CY-1 AND 7:GOTO 980 1030 IF A$=CHR$(0)+"P" THEN CY=CY+1 AND 7:GOTO 980 1040 IF A$=CHR$(0)+"K" THEN CX=CX-1 AND 7:GOTO 980 1050 IF A$=CHR$(0)+"M" THEN CX=CX+1 AND 7:GOTO 980 1055 IF A$="h" OR A$="H" THEN GOSUB 50000 1060 IF A$<>CHR$(13) THEN 1010 1070 PUT (CX*24,CY*24),CR 1080 XP=CX:YP=CY:GOSUB 20000 1090 IF N1=0 THEN SOUND 880!,3!:GOTO 975 1091 IF NOT HD THEN 1095 1092 FOR Y=0 TO 7:FOR X=0 TO 7 1093 IF HF(X,Y) THEN LINE (7+24*X,7+24*Y)-(16+24*X,16+24*Y),0,BF 1094 NEXT X:NEXT Y 1095 LOCATE 21,38:PRINT "--" 1100 IF EIS<>1 THEN 1210 1110 ZX=0:ZY=0:NM=-1 1120 FOR YP=0 TO 7 1130 FOR XP=0 TO 7 1140 GOSUB 20000 1150 IF N1>NM THEN ZAU=1:NM=N1:SX(0)=XP:SY(0)=YP:GOTO 1170 1160 IF N1=NM THEN SX(ZAU)=XP:SY(ZAU)=YP:ZAU=ZAU+1 1170 NEXT XP:NEXT YP 1180 GZ=CINT(INT(CSNG(ZAU)*RND)) 1190 XP=SX(GZ) 1200 YP=SY(GZ) 1210 IF EIS<>2 THEN 1410 1220 VB=-1:DIF=-64 1230 FOR YP=0 TO 7 1240 FOR XP=0 TO 7 1250 GOSUB 20000 1260 IF N1=0 THEN 1370 1270 NMG=0:FOR YPG=0 TO 7 1280 FOR XPG=0 TO 7 1290 GOSUB 30000 1300 IF N2>NMG THEN NMG=N2 1310 NEXT XPG:NEXT YPG 1320 H=N1-NMG 1330 IF H>DIF THEN DIF=H:ZAU=1:SX(0)=XP:SY(0)=YP:NM=-1:GOTO 1370 1340 IF HNM THEN ZAU=1:SX(0)=XP:SY(0)=YP:NM=N1:GOTO 1370 1360 IF N1=NM THEN SX(ZAU)=XP:SY(ZAU)=YP:ZAU=ZAU+1 1370 NEXT XP:NEXT YP 1380 GZ=CINT(INT(CSNG(ZAU)*RND)) 1390 XP=SX(GZ) 1400 YP=SY(GZ) 1410 IF EIS<>3 THEN 1700 1420 VB=0:FGM=0 1430 FOR YP=0 TO 7 1440 FOR XP=0 TO 7 1450 GOSUB 20000 1460 IF N1=0 THEN 1550 1470 X=XP:IF X>3 THEN X=7-X 1480 Y=YP:IF Y>3 THEN Y=7-Y 1490 IF XFGM THEN FGM=H:ZAU=1:SX(0)=XP:SY(0)=YP:NM=-1:GOTO 1550 1520 IF HNM THEN ZAU=1:SX(0)=XP:SY(0)=YP:NM=N1:GOTO 1550 1540 IF N1=NM THEN SX(ZAU)=XP:SY(ZAU)=YP:ZAU=ZAU+1 1550 NEXT XP:NEXT YP 1560 GZ=CINT(INT(CSNG(ZAU)*RND)) 1570 XP=SX(GZ) 1580 YP=SY(GZ) 1700 AE=-1 1710 GOSUB 20000 1720 AE=0 1800 FOR I=0 TO 2:H(I)=0:NEXT I 1810 FOR I=0 TO 7:FOR J=0 TO 7:H(SF(I,J))=H(SF(I,J))+1 1820 NEXT J:NEXT I 1830 FOR I=1 TO 2:LOCATE 10*I-4,38:PRINT USING "##";H(I):NEXT I 1840 LOCATE 10*EI-3,38:IF ZM THEN PRINT CHR$(XP+65);CHR$(56-YP) ELSE PRINT "--" 1850 LOCATE 10*EI-2,38:IF ZM THEN PRINT USING "##";N1 ELSE PRINT " 0" 1855 LOCATE 24,38:PRINT USING "##";H(0); 1860 IF H(0)>0 AND H(1)>0 AND H(2)>0 AND ZF<2 THEN SWAP EI,GE:SWAP EIS,GES:GOTO 850 1870 IF H(1)<>H(2) THEN N$="Spieler "+CHR$(50+(H(1)>H(2)))+" hat gewonnen":C=2+(H(1)>H(2)) ELSE N$="Unentschieden":C=0 1880 GOSUB 40000 1890 GOTO 240 2000 SCREEN 2:SCREEN 0 2010 KEY ON:END 10000 C=3+2*MP:LOCATE 15+3*MP,7:COLOR C+8 10010 FOR I=0 TO 3 10020 IF I=SM(MP) THEN COLOR ,C ELSE COLOR ,7 10030 PRINT S$(I);:COLOR ,7:PRINT " "; 10040 NEXT I:RETURN 11000 LOCATE 15+3*LMP,2:COLOR 7,7:PRINT SPACE$(5); 11010 LOCATE 15+3*MP,2:COLOR 12:PRINT "°±²Û";CHR$(16); 11020 LMP=MP:RETURN 20000 IF NOT VB THEN 20030 20010 FOR I=0 TO 7:FOR J=0 TO 7:HF(I,J)=SF(I,J):NEXT J:NEXT I 20020 HF(XP,YP)=EI 20030 IF SF(XP,YP) THEN N1=0:RETURN 20040 IF NOT AE THEN 20120 20050 X=4+24*XP:Y=4+24*YP 20060 T!=TIMER:FOR I=1 TO 5 20070 LINE (X,Y)-(X+15,Y+15),0,BF 20073 T!=T!+.07 20076 WHILE TIMER