Kurs:FreeBASIC/Projekte/FBT3/0010
Erscheinungsbild
Vergleich von Version 1.0 und 1.0b (Portal).
Version 1.0b (Portal)
[Bearbeiten]Zum Bearbeiten des Quellcodes hier klicken.
FUNCTION SpielerSymbol (ByVal Spieler As Byte) AS STRING
IF Spieler = 1 THEN
RETURN "X"
ELSE
RETURN "O"
END IF
END FUNCTION
SUB Sieg (ByVal Spieler As Byte)
LOCATE 14,1: PRINT "Spieler " & Spieler & " hat gewonnen."
BEEP: SLEEP: END
END SUB
Dim As Byte Spieler, Feld(1 to 3, 1 to 3), k, x, y, 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
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)
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 Sieg (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 Sieg (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 Sieg(Feld(1,1))
IF (Feld(3,1)=Feld(2,2) AND Feld(2,2)=Feld(1,3)) AND (Feld(3,1)>0) THEN Sieg(Feld(3,1))
Spieler = 3-Spieler
END IF
END IF
LOOP
END
Analyse und Beschreibung
[Bearbeiten]- Variablen
- Dim As Byte Spieler, Feld(1 to 3, 1 to 3), k, x, y, i
- Spieler
- Feld (1-3, 1-3)
- k
- x
- y
- i
- ???? und Unterprogramm
- FUNCTION SpielerSymbol
- SUB Sieg
Version 1.0
[Bearbeiten]Zum Vergleich der Quellcode für Version 1.0
Zum Bearbeiten des Quellcodes hier klicken.
' - - - - Wir leeren den Bildschirm - - - - - - - - - - - - - -
CLS
' - - - - Meine Variablen und meine Unterprogramme - - - - - -
DIM AS Integer Eingabe 'Nimmt die Koordinaten auf
DIM AS Integer x 'Für die Zählschleife
DIM AS Integer Fehler 'Fehler (Feld besetzt)
DIM AS String Spieler = "X" 'Spieler hat den Inhalt "X" oder "O"
DIM AS String Spiel = "j" 'Spiel fortsetzen j = ja, n = nein
DIM AS Integer Gewinner = 0 '1 = Spieler 1 hat gewonnen, 2 analog
' Spieler 1 ist das X, Spieler 2 ist das O
' - - - - Ich definiere 9 Felder - - - - - - - - - - - - - - -
/'
Was möchte ich tun?
Das Programm soll 2 Dinge tun:
1.) Erkennen, ob ein Feld bereits belägt ist...
2.) Erkennen, ob 3 Steine in einer Linie liegen...
Wir lösen es einfach:
1.) Wenn ein Feld <> 0, dann belegt
2.) Man kann es so machen: X = 1 und O = 4
Wenn Feld1 + Feld 2 + Feld3 = 3
dann Spieler 1 = Winner
Wenn Feld1 + Feld 2 + Feld3 = 12
dann Spieler 2 = Winner
Wenn Summe aller Felder = 21
dann Spiel ist zu Ende.
'/
DIM F(1 TO 9) AS Integer 'F für Feld
'==============================================================
' - - - - Hauptschleife - - - - - - - - - - - - - - - - - - - -
'==============================================================
Do
'==============================================================
Locate 1,1
' - - - - Zeichne das Spielfeld - - - - - - - - - - - - - - - -
PRINT "Ein Spiel"
PRINT "fuer 2 Spieler"
PRINT
PRINT " 1 2 3"
PRINT
PRINT "1 . | . | ."
PRINT " - + - + -"
PRINT "2 . | . | ."
PRINT " - + - + -"
PRINT "3 . | . | ."
' - - - - Die Programmschleife - - - - - - - - - - - - - - - -
Do
Locate 12,68
PRINT " "
Locate 14,1
Print "44 eingeben zum Beenden der Schleife "
Locate 12,1
Print "Bitte geben Sie abwechselnd eine Koordinate (z. B. 11 oder 31) ein. "
Locate 13,45 : Print " "
Locate 13,1
If Spieler = "X" then
INPUT "Spieler 1 (X) geben Sie Ihre Koordinate ein: ", Eingabe
Else
INPUT "Spieler 2 (O) geben Sie Ihre Koordinate ein: ", Eingabe
End If
SELECT CASE Eingabe
CASE 11
If F(1) = 0 Then
Locate 6,5
Print Spieler
If Spieler = "X" Then F(1) = 1 ELSE F(1) = 4 END IF
Else
Fehler = 1
End If
CASE 12
If F(2) = 0 Then
Locate 8,5
Print Spieler
If Spieler = "X" Then F(2) = 1 ELSE F(2) = 4 END IF
Else
Fehler = 1
End If
CASE 13
If F(3) = 0 Then
Locate 10,5
Print Spieler
If Spieler = "X" Then F(3) = 1 ELSE F(3) = 4 END IF
Else
Fehler = 1
End If
CASE 21
If F(4) = 0 Then
Locate 6,9
Print Spieler
If Spieler = "X" Then F(4) = 1 ELSE F(4) = 4 END IF
Else
Fehler = 1
End If
CASE 22
If F(5) = 0 Then
Locate 8,9
Print Spieler
If Spieler = "X" Then F(5) = 1 ELSE F(5) = 4 END IF
Else
Fehler = 1
End If
CASE 23
If F(6) = 0 Then
Locate 10,9
Print Spieler
If Spieler = "X" Then F(6) = 1 ELSE F(6) = 4 END IF
Else
Fehler = 1
End If
CASE 31
If F(7) = 0 Then
Locate 6,13
Print Spieler
If Spieler = "X" Then F(7) = 1 ELSE F(7) = 4 END IF
Else
Fehler = 1
End If
CASE 32
If F(8) = 0 Then
Locate 8,13
Print Spieler
If Spieler = "X" Then F(8) = 1 ELSE F(8) = 4 END IF
Else
Fehler = 1
End If
CASE 33
If F(9) = 0 Then
Locate 10,13
Print Spieler
If Spieler = "X" Then F(9) = 1 ELSE F(9) = 4 END IF
Else
Fehler = 1
End If
CASE ELSE
Locate 12,1
If Eingabe <> 44 Then
PRINT "Die Eingabe war ungueltig. Bitte geben Sie erneut eine Koordinate ein. "
Sleep
End If
END SELECT
'Fragt ab, ob ein Spieler ein Feld doppelt belegen wollte
If Eingabe <> 44 Then
If Fehler = 0 Then
'Verwaltet die Spieler
If Spieler = "X" Then
Spieler = "O"
Else
Spieler = "X"
End If
Else
Locate 12,1
Print "Das Kaestchen ist bereits belegt. Bitte erneut eine Koordinate eingeben."
Fehler = 0
SLEEP
End If
Else
Exit Do
End If
' - - - - Wir klären, ob schon wer gewonnen hat - - - - - - - -
'Spieler 1
If F(7) + F(8) + F(9) = 3 Then Gewinner = 1 End If
If F(4) + F(5) + F(6) = 3 Then Gewinner = 1 End If
If F(1) + F(2) + F(3) = 3 Then Gewinner = 1 End If
If F(7) + F(5) + F(3) = 3 Then Gewinner = 1 End If
If F(1) + F(5) + F(9) = 3 Then Gewinner = 1 End If
If F(7) + F(4) + F(1) = 3 Then Gewinner = 1 End If
If F(8) + F(5) + F(2) = 3 Then Gewinner = 1 End If
If F(9) + F(6) + F(3) = 3 Then Gewinner = 1 End If
'Spieler 2
If F(7) + F(8) + F(9) = 12 Then Gewinner = 2 End If
If F(4) + F(5) + F(6) = 12 Then Gewinner = 2 End If
If F(1) + F(2) + F(3) = 12 Then Gewinner = 2 End If
If F(7) + F(5) + F(3) = 12 Then Gewinner = 2 End If
If F(1) + F(5) + F(9) = 12 Then Gewinner = 2 End If
If F(7) + F(4) + F(1) = 12 Then Gewinner = 2 End If
If F(8) + F(5) + F(2) = 12 Then Gewinner = 2 End If
If F(9) + F(6) + F(3) = 12 Then Gewinner = 2 End If
'Wir prüfen, ob noch Felder frei sind
If F(1)+F(2)+F(3)+F(4)+F(5)+F(6)+F(7)+F(8)+F(9) = 21 Then
Exit Do
End If
LOOP While Gewinner = 0
'Inkey <> CHR(27)
'Wenn Win = E, dann Ende ;-)
' - - - - Das Ergebnis - - - - - - - - - - - - - - - - - - - -
For x = 1 to 70
Locate 12,X : Print " "
Locate 13,X : Print " "
Locate 14,X : Print " "
Next x
Locate 12,1
If Gewinner = 1 Then
Print "Spieler 1 (X) hat gewonnen. Herzlichen Glueckwunsch."
ELSEIF Gewinner = 2 Then
Print "Spieler 2 (O) hat gewonnen. Herzlichen Glueckwunsch."
Else
Print "Leider hat kein Spieler gewonnen!"
End If
'Print F(1)+F(2)+F(3)+F(4)+F(5)+F(6)+F(7)+F(8)+F(9)
'Wenn Summe = 21, dann ist kein Feld mehr frei!
Locate 16,1
Input "Neues Spiel starten? (j/n) ", Spiel
If Spiel = "j" Then
For x = 1 to 70
Locate 16,X : Print " "
Next x
For x = 1 to 9
F(x) = 0
Next x
Gewinner = 0
Spieler = "X"
End If
'==============================================================
' - - - - Hauptschleife - - - - - - - - - - - - - - - - - - - -
'==============================================================
Loop While Spiel = "j"
'==============================================================
' - - - - Programmende - - - - - - - - - - - - - - - - - - - -
Locate 16,1
Print "Zum Beenden des Programms eine Taste druecken. "
Sleep
Kommentar(e)
[Bearbeiten]- In dieser Version wird lediglich der Code der beiden Versionen verglichen und analysiert.