Kurs:FreeBASIC/Projekte/FBT3/0012
Erscheinungsbild
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)
[Bearbeiten]FUNCTION SpielerSymbol
[Bearbeiten]FUNCTION SpielerSymbol (ByVal Spieler As Byte) AS STRING
IF Spieler = 1 THEN
RETURN "X"
ELSE
RETURN "O"
END IF
END FUNCTION
Kommentar
[Bearbeiten]Function
neu, auch RETURN
Variablen definieren und Spielfläche einrichten
[Bearbeiten]Dim 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
[Bearbeiten]END
Kommentar
[Bearbeiten]Das Programm wird mit END
beendet.