tictac_sss.tap
tictac_sss.z80
Zeichensatz UTF-8+Z1013()+CTRL()-ohne Umlaute(äöüß)

   10!TIC-TAC-TOE
   15!nach Wurzel 9 und 10/87
   20 GOSUB 3500
   30 GOSUB 3000
   40 GX=0: GO=0: UN=0
   50 FOR N=1 TO AZ
   60  PRINT AT(12,3);" Spiel-Nr.",N
   70  GOSUB 2000
   80  GOSUB 2500
   90  GOSUB 2200
  100 NEXT N
  110 PRINT AT(23,5);"Noch ein Spiel? (J/N)"
  120 A$=INKEY$ :IF A$="" THEN 120
  130 IF A$="J" THEN 30
  140 CLS 
  150 PRINT AT(15,5);"Es war mir ein Vergnuegen!":END 
  500!Gewinn-Blockierung
  510 IF Z<4 THEN F=0: RETURN 
  520 P=SP
  530 GOSUB 600
  540 IF F<>0 THEN RETURN 
  550 P=-P
  560 GOSUB 600
  570 RETURN 
  600!Gewinnzug
  610 J=1
  620 U=A(D(J)): V=A(D(J+1)): W=A(D(J+2))
  630 IF U=V AND W=0 AND U=P THEN F=D(J+2): RETURN 
  640 IF V=W AND U=0 AND V=P THEN F=D(J): RETURN 
  650 IF W=U AND V=0 AND W=P THEN F=D(J+1): RETURN 
  660 IF J<21 THEN J=J+3: GOTO 620
  670 F=0: RETURN 
  700!Gewinntest
  710 GW=0: J=-2
  720 J=J+3: IF J>23 THEN RETURN 
  730 U=A(D(J)): V=A(D(J+1)): W=A(D(J+2))
  740 IF U=0 THEN 720
  750 IF U=V AND V=W THEN GW=U :ELSE 720
  760 RETURN 
  800!Zugausfuehrung
  810 J=INT((F-1)/3)+1: I=F-3*(J-1)
  820 PRINT AT(11+3*J,2+3*I);SP$
  830 A(F)=SP: R(Z)=F
  840 RETURN 
 1000!Lernzug
 1010 M=-10000
 1020 K=0
 1030 FOR F=1 TO 9
 1040  IF A(F)<>0 THEN 1090
 1050  IF S(Z,F)<M THEN 1090
 1060  IF S(Z,F)=M THEN K=K+1: H(K)=F: GOTO 1090
 1070  IF S(Z,F)>M THEN M=S(Z,F): H(1)=F: K=1
 1090 NEXT 
 1100 GOSUB 1750
 1110 RETURN 
 1200!Lernprozess
 1210 FOR J=1 TO Z-2
 1220 S(J,R(J))=S(J,R(J))+A(R(J))*GW
 1230 NEXT 
 1240 RETURN 
 1300!Zug Mr. Computer
 1310 GOSUB 500
 1320 IF F<>0 THEN RETURN 
 1330 GOSUB 1000
 1340 RETURN 
 1700!Zufallszug
 1710 K=0
 1720 FOR F=1 TO 9
 1730  IF A(F)=0 THEN K=K+1: H(K)=F
 1740 NEXT 
 1750 Y=INT(RND(1)*K)+1
 1760 F=H(Y)
 1770 RETURN 
 1800!Zug Mr. Caos
 1810 GOSUB 500
 1820 IF F<>0 THEN RETURN 
 1830 GOSUB 1700
 1840 RETURN 
 1900!Zug H.Sapiens
 1910 PRINT AT(23,5);"Ihr Zug?"
 1915 F$=INKEY$ :IF F$="" THEN 1915
 1920 F=VAL(F$): IF F<1 OR F>9 OR A(F)<>0 THEN 1915
 1930 PRINT AT(23,14);F:PAUSE 2 
 1940 PRINT AT(23,5);"                "
 1950 RETURN 
 2000!Spielauffuehrung
 2010 GOSUB 2400
 2020 Z=0
 2030 SP=1: SP$="X": Z=Z+1
 2040 ON UX GOSUB 1900,1800,1300
 2050 GOSUB 800
 2060 GOSUB 700
 2070 IF GW=1 THEN RETURN 
 2080 SP=-1: SP$="O": Z=Z+1
 2090 IF Z>9 THEN RETURN 
 2100 ON UO GOSUB 1900,1800,1300
 2110 GOSUB 800
 2120 GOSUB 700
 2130 IF GW=-1 THEN RETURN 
 2140 GOTO 2030
 2200!Spielauswertung
 2210 IF GW=-1 THEN GO=GO+1
 2220 IF GW=0  THEN UN=UN+1
 2230 IF GW=1  THEN GX=GX+1
 2240 WINDOW 13,22,20,38: CLS 
 2250 PRINT "   Spielauswertung":PRINT
 2260 PRINT "        X  :  O"
 2270 PRINT
 2280 PRINT "gew.   ";GX;SPC(3);GO
 2290 PRINT "verl.  ";GO;SPC(3);GX
 2300 PRINT "unent. ";UN;SPC(3);UN
 2305 GOSUB 5000
 2310 WINDOW :RETURN 
 2400!Spielfeldvorbereitung
 2410 WINDOW 14,20,5,11:CLS:WINDOW 
 2420 PRINT AT(14,5);"1  2  3"
 2430 PRINT AT(17,5);"4  5  6"
 2440 PRINT AT(20,5);"7  8  9"
 2450 FOR F=1 TO 9
 2460  A(F)=0
 2470 NEXT 
 2490 RETURN 
 2500 ON UX GOSUB 570,570,1200
 2510 ON UO GOSUB 570,570,1200
 2520 RETURN 
 3000!Spielerauswahl
 3010 CLS 
 3020 PRINT:PRINT "    SPIELER":PRINT
 3030 PRINT "H.Sapiens   (1)"
 3040 PRINT "Mr. Caos    (2)"
 3050 PRINT "Mr. Coputer (3)"
 3100 PRINT
 3110 INPUT "Nr. Spieler X";UX
 3120 INPUT "Nr. Spieler O";UO
 3130 PRINT 
 3140 INPUT "Anzahl der Spiele ?";AZ
 3150 CLS :RETURN 
 3500!Initialisierung
 3510 DIM D(24)
 3520 DATA 1,2,3,4,5,6,7,8,9
 3530 DATA 1,4,7,2,5,8,3,6,9
 3540 DATA 1,5,9,3,5,7
 3550 FOR J=1 TO 24
 3560  READ D(J)
 3570 NEXT 
 3580 RETURN 
 5000!Auflisten s(f,z)
 5010 WINDOW 
 5020 PRINT "Zug/Feld 1  2  3  4  5  6  7  8  9":PRINT
 5030 FOR Z=1 TO 9
 5040  PRINT Z;"-    ";
 5050  FOR F=1 TO 9
 5060    PRINT S(Z,F);
 5070  NEXT 
 5080  PRINT 
 5090 NEXT 
 5100 RETURN