Kurs:FreeBASIC/Projekte/FBT3/0012
Ziel dieser Seite: Wir zerlegen das Programm in kleinere Abschnitte. Die unklaren Abschnitte werden mit Kommentaren versehen und die neuen Befehle werden verlinkt. Dies geschieht jeweils unterhalb des Programmabschnitts.
Code (Struktur)
BearbeitenFUNCTION SpielerSymbol
BearbeitenFUNCTION SpielerSymbol (ByVal Spieler As Byte) AS STRING
IF Spieler = 1 THEN
RETURN "X"
ELSE
RETURN "O"
END IF
END FUNCTION
Kommentar
BearbeitenFunction
neu, auch RETURN
Variablen definieren und Spielfläche einrichten
BearbeitenDim As Byte Spieler, Feld(1 to 3, 1 to 3), k, x, y, i, j, frei, gewonnen
Dim As String JaNein
DO
For i = 1 TO 3
For j = 1 TO 3
Feld(i,j)=0
Next j
Next i
CLS
PRINT "Setzspiel"
PRINT "fuer 2 Spieler"
PRINT
PRINT " 1 2 3"
PRINT
PRINT "1 . | . | ."
PRINT " - + - + -"
PRINT "2 . | . | ."
PRINT " - + - + -"
PRINT "3 . | . | ."
PRINT
Spieler=1
Kommentar
Bearbeiten- Was wird hier gemacht?
- Variablen werden definiert... (alles Byte)
Variable | Verwendung |
---|---|
Spieler | |
Feld(1 to 3, 1 to 3) | |
k | |
x | |
y | |
i | |
j | |
frei | |
gewonnen |
- Feld(i,j) wird definiert (für mich neu)
- Spielfläche wird eingerichtet
- Spieler wird auf 1 gesetzt
Programm
Bearbeiten DO
FOR i = 12 TO 14
LOCATE i,1: PRINT STRING(79,32)
NEXT i
LOCATE 12,1: PRINT "Am Zug: Spieler " & Spieler & " (" & SpielerSymbol(Spieler) & ")"
LOCATE 13,1: INPUT "An welche Koordinate (XY, z.B. 12 / 0 = Ende) setzen? ", k
IF k = 0 THEN
END
ELSEIF (k < 0) OR ((k > 0 ) AND (k < 11)) OR (k > 33) THEN
BEEP
ELSE
x = VAL(LEFT(STR(k),1))
y = VAL(RIGHT(STR(k),1))
IF feld(x,y) > 0 THEN
LOCATE 14,1: PRINT "Feld ist schon besetzt. Beliebige Taste druecken, um noch mal zu setzen."
SLEEP
ELSE
feld(x,y) = Spieler
LOCATE 6+((y-1)*2),5+((x-1)*4): PRINT SpielerSymbol(Spieler)
gewonnen = 0
FOR i = 1 to 3
IF Feld(i,1) > 0 THEN
IF Feld(i,1)=Feld(i,2) AND Feld(i,2)=Feld(i,3) THEN gewonnen = (Feld(i,1))
END IF
NEXT i
FOR i = 1 to 3
IF Feld(1,i) > 0 THEN
IF Feld(1,i) = Feld(2,i) AND Feld(2,i) = Feld(3,i) THEN gewonnen = (Feld(1,i))
END IF
NEXT i
IF (Feld(1,1)=Feld(2,2) AND Feld(2,2)=Feld(3,3)) AND (Feld(1,1)>0) THEN gewonnen = Feld(1,1)
IF (Feld(3,1)=Feld(2,2) AND Feld(2,2)=Feld(1,3)) AND (Feld(3,1)>0) THEN gewonnen = Feld(3,1)
If gewonnen > 0 THEN
LOCATE 14,1: PRINT "Spieler " & Spieler & " hat gewonnen."
BEEP: SLEEP
EXIT DO
END IF
Spieler = 3-Spieler
END IF
frei = 0
For i = 1 to 3
For j = 1 to 3
If Feld(i,j) = 0 Then
frei = 1
Exit For
End If
Next j
If frei = 1 Then Exit For
Next i
If frei = 0 Then
LOCATE 14,1: PRINT "Alle Felder sind besetzt, aber niemandem ist es gelungen, drei Steine in eine"
LOCATE 15,1: PRINT "Reihe zu setzen. Die Partie ging unentschieden aus."
BEEP: SLEEP
EXIT DO
End if
END IF
LOOP
CLS
WHILE INKEY <> "": SLEEP 1: WEND
INPUT "Noch eine Runde spielen? (j/n) ", JaNein
IF INSTR(UCASE(JaNein),"J") < 1 THEN EXIT DO
LOOP
Programm-Ende
BearbeitenEND
Kommentar
BearbeitenDas Programm wird mit END
beendet.