Gobang: Ein Strategiespiel

Bei „GOBANG“ werden abwechselnd Steine auf die Kreuzungspunkte des Spielplans gesetzt. Ziel des Spiels ist es, fünf Steine in einer Reihe nebeneinander zu legen; diese Reihe kann senkrecht, waagrecht oder diagonal verlaufen. Während Computer und Spieler versuchen, eine Fünferreihe zustandezubringen, suchen sie gleichzeitig ihren Gegner zu behindern.

Die Bedienung

Wenn Sie das Programm geladen haben, fordert der Computer Sie zum Zug auf. Falls Sie nicht beginnen möchten, drücken Sie einfach auf „Farbenwechsel“. Dieses Feld wird immer dann invertiert dargestellt, wenn Sie mit den schwarzen Steinen spielen.

Am oberen Bildschirmrand wird links die vom Computer verbrauchte, rechts die von Ihnen verbrauchte Zeit angezeigt. Die Spielstarke können Sie in fünf Stufen wählen; bei „5“ spielt der Computer am stärksten.

Jedes Spiel kann mit der Option „Ein neues Spiel“ vorzeitig beendet werden. Nach dem zweiten Zug besteht die Möglichkeit, die jeweils letzten beiden Steine vom Brett zu nehmen („Rücknahme“).

Ein Druck auf das Feld „Abbruch“ kehrt nach einer Sicherheitsabfrage zum Desktop zurück. Das letzte durch die Maus zu betätigende Feld hat eine Doppelfunktion: Während des Spiels können Sie sich den letzten Zug des Computers ins Gedächtnis zurückrufen. Vor dem Spiel können Sie sich vom Computer eine Demonstration vorführen lassen. Diese Demo kann durch Druck auf die linke Maustaste beendet werden. Im letzten Feld wird die Bewertung direkt während der Rechnung angezeigt.

Die Strategie

Bezeichnungen der Spiel- und Phantomfelder:

Das Spielbrett im Speicher des Computers besteht aus 361 (19x19) Spielfeldern und 168 „Phantomfeldern“. (F%(0) bis F%(528)) Alle Variablen sind aus Geschwindigkeitsgründen mit einem %-zeichen als Integerzahlen deklariert. Die „Phantomfelder“ rahmen das Spielfeld ein. Die Felder können drei verschiedenen Bezeichnungen annehmen:

  1. Leere Felder haben zunächst die Bezeichnung „0“
  2. Ein durch den Spieler besetztes Feld trägt die Bezeichnung „1“
  3. Ein durch den Computer besetztes Feld trägt die Bez. „10“

Die Phantomfelder haben grundsätzlich die Bezeichnung „100“.

Ermittlung des besten Zuges:

Der Computer ordnet jedem der Felder einen bestimmten Wert zu. Danach ermittelt er das Feld mit dem höchsten Wert und prüft, ob weitere Felder mit dem gleichen Wert vorhanden sind. In diesem Fall entschließt er sich durch Wählen einer Zufallszahl, eines dieser Felder zu besetzen. Sind alle Felder nullwertig (zu Beginn des Spiels), wählt er ebenfalls zufällig. Allerdings meidet er während der ersten 50 Züge die äußeren beiden Reihen des Spielfeldes. Aber wie findet der Computer das höchstwertige Feld? Meine Idee zur Lösung des Problems ist folgender Algorithmus:

Die Menge der nebeneinanderliegenden gleichfarbigen Steine ist proportional zur Höhe des Wertes, der den Werten der direkt benachbarten unbesetzten Feldern zuaddiert wird.

Durch die Art und Weise des Spielbrettaufbaus kann ich in einer Schleife von 48 bis 480 das höchstwertige Feld mit nur vier Rechnungen ermitteln. Den Computer interessieren immer fünf nebeneinanderliegende Felder. Angenommen, er zieht das erste Feld Nummer 48 in Betracht und er möchte wissen, welche Bezeichnungen die 16 senkrecht, waagrecht sowie diagonal benachbarten Felder haben. Dann vollzieht er folgende Rechnungen:

  1. waagerecht 48+(-2) = 46
    48 + (-1) = 47
    48 + (+1) = 49
    48+(+2)=50
  2. senkrecht 48 + (-46) = 2
    48 + (-23) = 25
    48 + ( + 23) = 71
    48+(+46) = 96
  3. diagonal
    48+(-48) = 0
    48+(-24) = 24
    48+(+24) = 72
    48+(+48)=96
    48+(-44) = 4
    48+(-22)+36
    48+(+22)=70
    48+(+44)=92

Sie können diese Berechnungen auf jedem Feld vornehmen, immer werden Sie zu den richtigen Ergebnissen kommen. Hier erklärt sich auch der Sinn und Zweck der Phantomfelder: Ohne sie würde der Computer über den Rand hinaus rechnen, von anderen Problemen ganz zu schweigen. Die oben erwähnten vier Rechnungen etwa könnte man bei Feld 0-47 und Feld 314-361 überhaupt nicht durchführen.

Das nächste Problem war die Hierarchie der Feldbewertung:

Wann muß dem Wert ’0’ eines Feldes welcher Wert zuaddiert werden? Dies konnte ich erst nach langem Ausprobieren entwickeln. Man muß viele Feinheiten beachten, die sich erst im Laufe eines Spiels ergeben.

Sicher gibt es andere Algorithmen zur Lösung dieses Problems, doch dieser erschien mir am einfachsten. Da er sich von dem eines Schachcomputers stark unterscheidet, kann man bei einer höheren Spielstärke nicht damit rechnen, daß der Computer die Züge weiter vorausberechnet. Er rechnet stattdessen immer mehr Steinkombinationen durch.

Hätte ich mein Gobangspiel nach Art eines Schachcomputers mit einer rekursiv aufgerufenen Prozedur konstruiert, so müßte der Computer wegen der 361 Spielfelder (im Gegensatz zu 64 beim Schachbrett) nach meinen Schätzungen mindestens fünf Minuten pro Zug rechnen. Das wäre auf die Dauer ziemlich langweilig. Ich wünsche Ihnen viel Spaß beim „GOBANG“!

Gerd Stephan Rottwilm

Variablen- und Prozedurenliste

a. Strings:

SPT Spielerzeit
COT Computerzeit
ANZ Anzeigesprite
BRT Sprite für die linke obere Ecke des Bildschirms

b. Integervariablen:

M Modus
FL Flag für den Spieleranzeigesprite
SPCO Farbeinstellung
FS Weiß
ZAL Zugnummer
Y Koordinaten
T Maustaste
TI Flag für die Zeit
GEW Gewinnanzeige
FC Schwarz
CW Flag für Computerdemo
DD Gleicher Stein nach Rücknahme?
SM Spielstärkemerker
SG Spielstärke
VA Für den Vergleich der Werte
Z Für Schleifen
A, B, C, D, E, F, G, H
Allgemein gebraucht
XM, YM
Koordinatenmerker für „Letzter Zug“
COM, SPI Spielstand
Q Für Schleifen

c. Arrays

A() Texte
WO Feldwerte
F() Feldbezeichnungen
Z() Zugmerker
WT() Zu addierende Werte
FR 10, FR 20, FRG() Steinkombinationsabfrage
T(), L() Addition - Subtraktion

d. Prozeduren:

I Initialisierung der Variablen und Arrays
S Spieler
C Computer
ANZ Anzeigemeldung (Wer ist am Zug, wer hat gewonnen usw.)
STK Spielstärkeeinstellung
RK Rücknahme
WSHL Farbenwechsel
COCO Computer gegen Computer bzw. Letzter Zug
NEUS Ein neues Spiel
SCHL Abbruch
FELD Ermittlung, wo der Spieler den Stein hinsetzt
RECH Bewertung der Felder
GEW Hat einer der Beiden gewonnen?
SEZ Stein auf das Brett setzen
AUS Auswertung
WCH Feldbezeichnungen und Farben wechseln
BEN Spiel schon beendet
NOC Funktion noch nicht möglich
LIN Stein vom Feld entfernen
AUFB Bildaufbau

' +--------------------------------------------------------------+
' |                      Das Gobangspiel V 2:0 von               |
' |                        Gerd Stephan Rottwilm                 |
' +--------------------------------------------------------------+
@1
'
Do
    If M%=0 
        @S 
    Else 
        @C 
    Endif 
Loop
'
Procedure S 
    Repeat 
        Defmouse 7 
        If F1%=0 
            F1%=1
            Settime Spt$,""
            Spco%=Fs%
            Inc Zal%
            @Anz
            Deffill 1,Fs%,Fs%
            Deftext ,4,0,13
            Text 42,316,"Sie sind am Zug”
            Text 80,350,A$(9)
            Text 120,350,Zal%
        Endif 
        Repeat 
            Mouse X%,Y%,T%
            Inc Ti%
            If M%=0 And Gew%=0 And Ti%>100 
                Ti%=0 
                Spt$=Time$
                Print At(20,2);Mid$(Spt$,4,5)
            Endif 
        Until T%=1 
        If X%>10 And X%<200 
            @Stk
            @Rk(X%,Y%)
            @Wshl
            @Coco
            @Neus
            @Schl
        Endif
        @Feld(X%,Y%)
        If T%=1 
            Print At(1,1);Chr$(7)
            Pause 1 
        Endif 
    Until M%=1 
Return
'
Procedure C 
    Defmouse 2
    Settime Cot$,""
    Spco%=Fc%
    Deftext ,0,0,13 
    Text 16,253,A$(7)
    @Anz
    Deffill 1,Fc%,Fc%
    Deftext ,4,0,13 
    Text 80,350,A$(9)
    If Cw%=0 
        If Dd%=0 Or Sm%<>Sg%
            Text 48,316,"Ich überlege...”
        Else
            Text 34,316,"Der gleiche Zug?!"
        Endif
        Deftext ,16,0,13
        Text 16,221,"Letzter Zug"
    Else 
        If Fc%=1
            Text 20,316,"Schwarz ist am Zug..."
        Else
            Text 38,316,"Weiß ist am Zug..."
        Endif 
    Endif 
    Inc Zal%
    Deftext ,4,0,13 
    Text 120,350,Zal%
    If Zal%>l And (Dd%=0 Or Sm%<>Sg%)
        @Rech 
    Endif 
    If M%=1 
        If Dd%=0 Or Sm%<>Sg%
            Va%=0
            For Z%=48 To 480 
                If W%(Z%)>Va%
                    Va%=W%(Z%)
                Endif 
            Next Z%
            If Va%<>0 
                D%=-1
                For Z%=48 To 480 
                    If W%(Z%)=Va%
                        Inc D%
                        W%(D%)=Z%
                    Endif 
                Next Z%
                Z%=W%(Int(Rnd(1)*(D%+1)))
                Arrayfill W%(),0 
            Else 
                Repeat 
                    Z%=Int(Rnd(1)*433+48)
                Until F%(Z%)=0 And (Zal%>50 Or (Z%>95 And Z%<433 And 
                (Z%-2)/23<>Int((Z%-2)/23) And (Z%-3)/23<>Int((Z%-3)/23) 
                And (Z%+3)/23<>Int((Z%+3)/23) And 
                (Z%+4)/23<>Int((Z%+4)/23)))
            Endif
            Z%(Zal%)=Z%
            F%(Z%)=10
            @Gew
        Else
            Z%=Z%(Zal%)
            F%(Z%)=10
            Dd%=0
        Endif
        X%=(Z% Mod 23)*19+232 
        Y%=8+19*(Int(Z%/23)-1)
        Xm%=X%
        Ym%=Y%
        Print At(3,16);A$(7)
        Print At(8,16);Z%-48 
        Print At(18,16);Va%
        @Sez(X%,Y%)
        Sm%=Sg%
        Print At(1,1);Chr$(7)
        Put 5,301,Anz$
        If Gew%=10 Or Zal%>360 
            @Aus 
            M%=0 
        Else
            If Cw%=1
                @Wch 
                M%=1 
            Else 
                M%=0 
                Fl%=0 
            Endif 
        Endif 
    Endif 
Return
'
Procedure Stk 
    If Y%>45 And Y%<66 
        If Gew%=0 
            If X%<140 And X%>10 And Sg%<5 
                Inc Sg%
                Print At(23,4);Sg%
                T%=0
                Pause 10 
            Endif
            If X%<200 And X%>139 And Sg%>1
                Dec Sg%
                Print At(23,4);Sg%
                T%=0
                Pause 10 
            Endif 
        Else 
            @Ben 
            T%=0 
        Endif 
    Endif 
Return
'
Procedure Wshl
    If Y%>77 And Y%<98 
        T%=0
        If Gew%=0
            If Spco%=0 
                Deffill 1,1,1 
            Else 
                Deffill 1,0,0 
            Endif
            Pbox 10,77,200,98 
            Deftext ,0,0,13 
            Graphmode 3 
            Text 16,93,A$(2)
            Graphmode 1 
            @Wch
            If Zal%>0 
                Dec Zal%
            Endif
            Put 5,301,Anz$
            If M%=0 
                M%=1 
            Else 
                M%=0 
            Endif 
        Else 
            @Ben 
        Endif 
    Endif 
Return
'
Procedure Neus
    If Y%>109 And Y%<130 
        Pause 5
        T%=0
        If Zal%>1 
            If Gew%=0
                Alert 3,"Neues|Spiel?",1,"Ja|Nein",A%
                If A%=1 
                    @Brt 
                Endif 
            Else 
                @Brt 
            Endif 
        Else
            @Noc
        Endif
    Endif
Return
'
Procedure Rk(A%,B%)
    If B%>141 And B%<162 
        T%=0
        If Zal%>2 
            If Gew%=0 
                Put 5,301,Anz$
                For Z%=0 To 1 
                    Dec Zal%
                    @Lin(Z%(Zal%))
                Next Z%
                Dec Zal%
                F1%=0 
                Pause 10 
            Else 
                @Ben 
            Endif 
        Else 
            @Noc 
        Endif 
    Endif
Return
'
Procedure Schl 
    If Y%>173 And Y%<194 
        T%=0
        Pause 10
        Alert 3,"Zurück|zum|Desktop?",2,"Ja|Nein”,A% 
        If A%=1 
            Edit 
        Endif 
    Endif
Return
'
Procedure Coco
    If Y%>205 And Y%<226 
        T%=0
        If Gew%=0 
            If Zal%=1 
                Deffill 1,1,1 
                Pbox 10,205,200,226 
                Deftext ,0,0,13 
                Graphmode 3 
                Text 16,221,A$(6)
                Graphmode 1 
                Put 5,301,Anz$
                Dec Zal%
                M%=1
                Cw%=1
            Else
                @Sez(Xm%,Ym%)
                Deffill 1,Fs%,Fs%
            Endif
        Else
            @Ben
        Endif
    Endif
Return
'
Procedure Anz 
    Deffill 1,1,1 
    Pbox 5,306,196,358 
    Deffill 1,0,0 
    Pbox 10,301,200,354
Return
'
Procedure Sez(A%,B%)
    For Z%=1 To 4 
        Deffill 1,Fs%,Fs%
        Pcircle A%,B%,9
        Deffill 1,Fc%,Fc%
        Pcircle A%,B%,9 
    Next Z%
Return
'
Procedure Feld(A%,B%)
    If A%>261 And A%<621 And B%>17 And B%<380 And Zal%>0 And Gew%=0 
        For X%=270 To 612 Step 19 
            Exit If A%<X%+10 And A%>X%-10 
        Next X%
        For Y%=27 To 369 Step 19 
            Exit If B%<Y%+10 And B%>Y%-10 
        Next Y%
        If F%((X%-232)/19+(Y%-27)/19*23+46)=0 
            T%=0
            F%((X%-232)/19+(Y%-27)/19*23+46)=1 
            Pcircle X%,Y%,9 
            Put 5,301,Anz$
            If (X%-232)/19+(Y%-27)/19*23+46=Z%(Zal%)
                Dd%=1
            Else
                For Z%=Zal% To 361 
                    Z%(Z%)=0 
                Next Z%
                Dd%=0
                Z%(Zal%)=(X%-232)/19+(Y%-27)/19*23+46 
                @Gew 
            Endif
            If Gew%=1 Or Zal%>360 
                @Aus 
            Else 
                M%=1 
            Endif 
        Endif 
    Endif 
Return
'
Procedure Wch 
    For Z%=48 To 480
        If F%(Z%)<>0 And F%(Z%)<>100 
            If F%(Z%)=1 
                F%(Z%)=10 
            Else 
                F%(Z%)=1 
            Endif 
        Endif 
    Next Z%
    Swap Fs%,Fc%
Return
'
Procedure Lin(Z%)
    A%=(Z% Mod 23)*19+232 
    B%=8+19*(Int(Z%/23)-1)
    F%((A%-232)/19+(B%-27)/19*23+46)=0 
    Deffill 0,0,0 
    Pcircle A%,B%,9 
    If Z%=48 
        Line A%,B%,A%+9,B%
        Line A%,B%,A%,B%+9 
    Else
        If Z%=66 
            Line A%,B%,A%-9,B%
            Line A%,B%,A%,B%+9 
        Else
            If Z%=462 
                Line A%,B%,A%,B%-9 
                Line A%,B%,A%+9,B%
            Else
                If Z%=480 
                    Line A%,B%,A%-9,B%
                    Line A%,B%,A%,B%-9 
                Else
                    If Z%>48 And Z%<66 
                        Line A%-9,B%,A%+9,B%
                        Line A%,B%,A%,B%+9 
                    Else
                        If (Z%-2)/23=Int((Z%-2)/23)
                            Line A%,B%,A%+9,B%
                            Line A%,B%-9,A%,B%+9 
                        Else
                            If (Z%+3)/23=Int((Z%+3)/23)
                                Line A%,B%-9,A%,B%+9
                                Line A%-9,B%,A%,B%
                            Else
                                If Z%>462 And Z%<480 
                                    Line A%-9,B%,A%+9,B%
                                    Line A%,B%-9,A%.B%
                                Else
                                    Line A%-9,B%,A%+9,B%
                                    Line A%,B%-9,A%,B%+9 
                                Endif 
                            Endif 
                        Endif 
                    Endif 
                Endif 
            Endif 
        Endif 
    Endif
    Deffill 1,0,0 
    For C%=327 To 555 Step 114 
        For D%=84 To 312 Step 114
            If A%»C% And B%=D%
                Pcircle C%,D%,3 
            Endif 
        Next D%
    Next C%
Return
'
Procedure I
    ' On Break Cont 
    If Xbios(4)<>2
        Alert 1," Dieses Programm läuft|nur im hochauflösenden Modus!", 1,"Abbruch",Z%
        Edit
    Endif
    Restore
    Dim Z%(361),F%(528),W%(528),A$(9),Frg%(10),Wt%(10),Fr_1%(4),Fr_2% (4),T%(4),L%(4)
    A$(0)="Co. 00:00 Sp 00:00"
    A$(1)="Spielstärke < > 1"
    A$(2)="Farbenwechsel"
    A$(3)="Ein neues Spiel"
    A$(4)="Rücknahme"
    A$(5)="Abbruch"
    A$(6)="Computerdemo"
    A$(7)="Feld Wert "
    A$(8)="Stand Co.-Sp. 0 : 0”
    A$(9)="Zug:"
    @Aufb
    Com%=0
    Spi%=0
    For Z%=1 To 10 
        Read Frg%(Z%),Wt%(Z%)
    Next Z%
    For Z%=1 To 4 
        Read Fr_1%(Z%),Fr_2%(Z%),T%(Z%),L%(Z%)
    Next Z%
    @Brt
Return
'
Procedure Aufb 
    Deffill 1,2,4 
    Pbox -1,-1,540,400 
    Deffill 1,1,1 
    Pbox 251,10,619,388 
    Deffill 1,0,0 
    Pbox 256,3,626,383 
    Pbox 259,6,623,380 
    Pbox 260,7,622,379 
    For Z%=0 To 360 Step 19 
        Line 270,27+Z%,612,27+Z%
        Line 270+Z%,27,270+Z%,369 
    Next Z%
    For Z%=327 To 555 Step 114 
        For Y%=84 To 312 Step 114 
            Pcircle Z%,V%,3 
        Next Y%
    Next Z%
    Deffill 1,1,1 
    Pbox 260,7,622,16 
    Deftext ,0,0,6 
    Graphmode 3
    Text 280,14,"Das Gobangspiel von Gerd Stephan Rottwilm"
    Graphmode 1 
    Deftext ,0,0,13 
    For Z%=13 To 269 Step 32 
        Deffill 1,1,1 
        Pbox 5,Z%+5,196,Z%+25 
        Deffill 1,0,0 
        Pbox 10,Z%,200,Z%+21 
        Text 16,Z%+16,A$((Z%+18)/32)
    Next Z%
    Get 4,10,200,260,Brt$
    Get 4,300,200,358,Anz$
Return
'
Procedure Brt 
    If Zal%>0 
        Put 4,10,Brt$
        Put 4,300,Anz$
        For Z%=48 To 480 
            If F%(Z%)<>0 And F%(Z%)<>100 
                @Lin(Z%)
            Endif 
        Next Z%
    Else
        Hidem
        Arrayfill F%(),0 
        For Z%=0 To 528
            If Z%<48 Or Z%>480 Or Z%/23=Int(Z%/23) Or (Z%-1)/23=Int((Z%-1)/23) Or (Z%+1)/23=Int((Z%+1)/23) Or (Z%+2)/23=Int((Z%+2)/23) 
                F%(Z%)=100
            Endif 
        Next Z%
        Showm
    Endif
    Cot$="00:00:00"
    Spt$="00:00:00"
    Arrayfil1 Z%(),0 
    Arrayfill W%(),0 
    F1%=0 
    Spco%=0 
    Gew%=0 
    Zal%=0 
    Sg%=1 
    Cw%=0 
    Fc%=1 
    Fs%=0 
    M%=0 
Return
'
Procedure Aus 
    @Anz
    Deftext ,4,0,13 
    Print At(1,1);Chr$(7)
    If Zal%>360 
        Text 81,332,"Remis!"
    Else 
        If Cw%=1 
            If Fc%=1
                Text 20,332,"Schwarz hat gewonnen!"
            Else
                Text 32,332,"Weiß hat gewonnen!"
            Endif 
        Else 
            If Gew%=10 
                Text 32,332,"Ich habe gewonnen!"
                Inc Com%
            Else
                Text 30,332,"Sie haben gewonnen!"
                Inc Spi%
            Endif
        Endif
    Endif
    Print At(18,18);Com%;" : ";Spi%
Return
'
Procedure Gew 
    Local Z%
    If Zal%>8 
        For Z%=48 To 480 
            Exit If Gew%<>0
            If (F%(Z%)=1 And Spco%=Fs%) Or (F%(Z%)=10 And Spco%=Fc%)
                For Q%=7 To 8 
                    For G%=1 To 4
                        If F%(Z%-L%(G%))+F%(Z%-T%.(G%)}+F%(Z%+T%(G%))+F%(Z%+L%(G%))=Frg%(Q%) And F%(Z%)=Frg%(Q%-6)
                            Gew%=Frg%(Q%-6)
                        Endif 
                    Next G%
                Next Q%
            Endif 
        Next Z%
    Endif
Return
'
Procedure Rech 
    Local A%
    For Z%=48 To 480 
        Exit If M%=0 
        If F%(Z%)<>100 
            If Z%/48=Int(Z%/48)
                Cot$=Time$
                Print At(7,2);Mid$(Cot$,4,5)
            Endif
            If F%(Z%)<>0 
                For G%=1 To 4 
                    For Q%=1 To 8
                        If F%(Z%-T%(G%))+F%(Z%-L%(G%))+F%(Z%+T%(G%))+F%(Z%+L% (G%))+F%(Z%)=Frg%(Q%)
                            @Add(Z%-T%(G%),Wt%(Q%)+1)
                            @Add(Z%-L%(G%),Wt%(Q%))
                            @Add(Z%+T%(G%),Wt%(Q%)+1)
                            0Add(Z%+L%(G%),Wt%(Q%))
                        Endif 
                    Next Q%
                Next G%
            Else
                If (Sg%>2 And Zal%>7) Or (Sg%=2 And Z%/2=Int(Z%/2) And Zal%>7) Or Sg%=5 Or Zal%=8 
                    For G%=1 To 4 
                        For Q%=9 To 10
                            If F%(Z%-T%(G%))+F%(Z%-L%(G%))=Frg%(Q%) And F%(Z%+T% (G%))+F%(Z%+L%(G%))=Frg%(Q%)
                                Add W%(Z%),Wt%(Q%)
                            Endif 
                        Next Q%
                        If Sg%>3 
                            For Q%=1 To 4 
                                If F%(Z%-T%(G%))+F%(Z%-L%(G%))=Fr_1%(Q%) And F%(Z%+T%(G%))+F%(Z%+L%(G%))=Fr_2%(Q%)
                                    Add W%(Z%),Wt%(Q%+2)+1 
                                    @Add(Z%+T%(G%),Wt%(Q%+2))
                                    @Add(Z%+L%(G%),Wt%(Q%+2))
                                Endif
                                If F%(Z%-T%(G%))+F%(Z%-L%(G%))=Fr_2%(Q%) And F%(Z% +T%(G%))+F%(Z%+L%(G%))=Fr_1%(Q%)
                                    Add W%(Z%),Wt%(Q%+2)+1 
                                    @Add(Z%-T%(G%),Wt%(Q%+2)) 
                                    @Add(Z%-L%(G%),Wt%(Q%+2))
                                Endif 
                            Next Q%
                            If Sg%>4 And Zal%<10
                                For Q%=1 To 2
                                    If F%(Z%-L%(G%))=Frg%(Q%) And F%(Z%-T%(G%))+F%(Z% +T%(G%))+F%(Z%+L%(G%))=0 
                                        Add W%(Z%-T%(G%)),Wt%(Q%)/2 
                                    Endif
                                    If F%(Z%+L%(G%))=Frg%(Q%) And F%(Z%+T%(G%))+F%(Z% -T%(G%))+F%(Z%-L%(G%))=0 
                                        Add W%(Z%+T%(G%)),Wt%(Q%)/2 
                                    Endif 
                                Next Q%
                            Endif 
                        Endif 
                    Next G%
                Endif
            Endif
            If W%(Z%)>A%
                Print At(8,16);Z%-48 
                Print At(18,16);W%(Z%)
                A%=W%(Z%)
            Endif
            If Mousek=1 
                Pause 10
                Alert 3,"Neues|Spiel?",1,"Ja|Nein",B%
                If B%=1
                    @Brt
                Else
                    Defmouse 2
                Endif
            Endif
        Endif
    Next Z%
Return
'
Procedure Ben 
    Pause 10
    Alert 1,"Das Spiel ist | bereits zuende!",1," okay ",Z%
Return
'
Procedure Noc 
    Pause 10
    Alert 1,"Funktion erst nach| dem nächsten Zug| möglich!",1," okay ",Z%
Return
'
Procedure Add(A%,B%)
    If F%(A%)=0 
        Add W%(A%),B%
    Endif
Return
'
Data 1,5,10,20,2,200,20,400,3,1700,30,3500,4,12000,40,25000,20, 25000,2,12000 
Data 2,0,1,2,20,0,23,46,2,1,22,44,20,10,24,48


Links

Copyright-Bestimmungen: siehe Über diese Seite
Classic Computer Magazines
[ Join Now | Ring Hub | Random | << Prev | Next >> ]