< Kurs:FreeBASIC < Projekte < FBT3

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)

FUNCTION SpielerSymbol

FUNCTION SpielerSymbol (ByVal Spieler As Byte) AS STRING
    IF Spieler = 1 THEN
        RETURN "X"
    ELSE
        RETURN "O"
    END IF
END FUNCTION

Kommentar

Function neu, auch RETURN

Variablen definieren und Spielfläche einrichten

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

Was wird hier gemacht?
  • Variablen werden definiert... (alles Byte)
VariableVerwendung
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

    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

END

Kommentar

Das Programm wird mit END beendet.

This article is issued from Wikiversity. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.