Kurs:FreeBASIC/Projekte/FBT3/0009

Version 0009 ist zugleich die finale Version (1.0). --Michael Reschke 18:16, 20. Jul. 2008 (CEST)

Quellcode Bearbeiten

Der Quellcode lautet:

/'
   Ein kleines Spiel
   ohne Animation und ohne PC-Spieler
   
   Autor:   Michael Reschke
   Kontakt: Reschke.Michael@gmail.com
   Sprache: Deutsch
   Datum:   2008-07-20
   Version: 1.0 (intern = 0009)
   Lizenz:  CC-BY-SA 2.5
            http://creativecommons.org/licenses/by-sa/2.5/deed.de
   
   Der Quellcode ist ferner in der Wikiversity zu finden:
   http://de.wikiversity.org/wiki/Kurs:FreeBASIC/Projekte/Tic_Tac_Toe/0009
   
   Dort können auch Fehler gemeldet und Verbesserungen des
   Programms vorgeschlagen werden. Feedback ist herzlich willkommen!
   
   - - - - - - - - - -
   Hilfen, eine Befehlsreferenz und viele weitere Programme und 
   Code-Schnipsel bietet das FreeBasic-Portal. Schau mal vorbei:
   http://www.freebasic-portal.de/
   
'/

' - - - - 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 belegt 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

Bugs Bearbeiten

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

  • Keine Bugs bekannt.

Nächste Version (vorgesehene Features) Bearbeiten

  • Eine Version 2.0 könnte einen PC-Spieler enthalten.

Feedback Bearbeiten

Bitte hierfür die Diskussionsseite nutzen. Vielen Dank!

Kommentar(e) Bearbeiten

  • Die Version 0009 ist lauffähig und enthält alle vorgesehenen Features. Es handelt sich um eine finale Version.