Zum Inhalt springen

Kurs:FreeBASIC/Projekte/FBT3/0005

Aus Wikiversity

Version 0005. --Michael Reschke 15:10, 19. Jul. 2008 (CEST)

Quellcode

[Bearbeiten]

Der Quellcode lautet:

/'
   Ein kleines Spiel
   ohne Animation und ohne PC-Spieler 
'/

' - - - - Meine Variablen und meine Unterprogramme  - - - - - -
DIM AS Integer Eingabe, x
DIM AS String  Spieler = "X" 'Spieler hat den Inhalt "X" oder "O"
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 = 6
    dann Spieler 2 = Winner
    Wenn Summe aller Felder = 13
    dann Spiel ist zu Ende.

'/

DIM F(1 TO 9) AS Integer 'F für Feld

' - - - - 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 13,1
    Print "44 eingeben zum Beenden der Schleife"
    
    Locate 12,1
    INPUT "Bitte geben Sie abwechselnd eine Koordinate (z. B. 11 oder 31) ein: ", Eingabe

SELECT CASE Eingabe
    CASE 11
    
      Locate 6,5
      Print Spieler
      If Spieler = "X" Then F(1) = 1 ELSE F(1) = 4 END IF
      
    CASE 12
        
      Locate 8,5
      Print Spieler
      If Spieler = "X" Then F(2) = 1 ELSE F(2) = 4 END IF
      
    CASE 13
        
      Locate 10,5
      Print Spieler
      If Spieler = "X" Then F(3) = 1 ELSE F(3) = 4 END IF
      
    CASE 21
        
      Locate 6,9
      Print Spieler
      If Spieler = "X" Then F(4) = 1 ELSE F(4) = 4 END IF

    CASE 22
        
      Locate 8,9
      Print Spieler
      If Spieler = "X" Then F(5) = 1 ELSE F(5) = 4 END IF

    CASE 23
        
      Locate 10,9
      Print Spieler
      If Spieler = "X" Then F(6) = 1 ELSE F(6) = 4 END IF
        
    CASE 31
        
      Locate 6,13
      Print Spieler
      If Spieler = "X" Then F(7) = 1 ELSE F(7) = 4 END IF
      
    CASE 32
        
      Locate 8,13
      Print Spieler
      If Spieler = "X" Then F(8) = 1 ELSE F(8) = 4 END IF
      
    CASE 33
        
      Locate 10,13
      Print Spieler
      If Spieler = "X" Then F(9) = 1 ELSE F(9) = 4 END IF
      
    CASE ELSE
      
      Locate 12,1
      If Eingabe <> 44 Then
          PRINT "Die Eingabe war ungueltig. Bitte geben Sie erneut eine Koordinate ein.    "
      End If
      Sleep 500

END SELECT

'Verwaltet die Spieler
If Spieler = "X" Then
    Spieler = "O"
Else
    Spieler = "X"
End If

If Eingabe = 44 Then Exit Do End If

' - - - - Wir klären, ob schon wer gewonnen hat - - - - - - - - 


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

LOOP While Gewinner = 0
'Inkey <> CHR(27) 
'Wenn Win = E, dann Ende ;-)
' - - - - Das Ergebnis - - - -  - - - - - - - - - - - - - - - -

For x = 1 to 70
    Locate 12,X : Print " "
Next x

Locate 12,1
If Gewinner = 1 Then
    Print "Spieler 1 hat gewonnen. Herzlichen Glueckwunsch."
Else
    Print "Spieler 2 hat gewonnen. Herzlichen Glueckwunsch."
End If

Print "Zum Beenden des Programms eine Taste druecken."
' - - - - Programmende - - - -  - - - - - - - - - - - - - - - -
Sleep

Bug notieren und bitte einen Eintrag mit --~~~~ abschließen (signieren).

  • Das Programm funktioniert praktisch nur bei intelligentem User bzw. wohlwollender und vorausschauender Bedienung. --Michael Reschke 18:27, 18. Jul. 2008 (CEST)
  • Es ist noch möglich ein gesetztes Kreuz durch einen Kreis (und umgekehrt) zu überschreiben. --Michael Reschke 18:27, 18. Jul. 2008 (CEST)
  • Das Programm kann nicht vorzeitig abgebrochen werden. --Michael Reschke 18:27, 18. Jul. 2008 (CEST)

Nächste Version (vorgesehene Features)

[Bearbeiten]

Folgende Sachen sollen überarbeitet werden:

  • Die If-Anweisung (1 bis 9) soll durch eine Do-Loop-Schleife ersetzt werden.
  • Es soll ein Überschreiben von gesetzten Symbolen unterbunden werden.
  • Es soll abgefragt werden, wer gewonnen hat.

Feedback

[Bearbeiten]

Bitte hierfür die Diskussionsseite nutzen. Vielen Dank!

Kommentar(e)

[Bearbeiten]
  • Die Version 0005 habe ich mal als Zwischenversion hier veröffentlicht. --Michael Reschke 15:09, 19. Jul. 2008 (CEST)