Tic Tac Toe Play

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

ToeB

Betreff: Tic Tac Toe Play

BeitragSa, Feb 10, 2007 22:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mia gedacht, das das nicht in Projecte sondern hier her gehört Laughing , weil es eher nur so ne Spielerei war Wink

Also :

Die Tasten :
- MausTaste(1) : Kreis/Kreuz setzten
- MausTaste(2) : Neuea Spiel beginnen

Du kannst / Das gibt es :
- Die SpielerNamen Eingeben
- gegen dich oder einen freund spielen Wink
- Spieler wechsel (normal ^^)

Du Kannst (noch)nicht /gibt es (noch)nicht :
- gegen einen Coputer spielen
- Sound
- Gute Graphik
- ...


Code: [AUSKLAPPEN]

;------ Tic ------
;------ Tac ------
;------ Toe ------

;Graphiken :

Graphics 800,600,16,2
SetBuffer BackBuffer()
AppTitle "Tic Tac Toe"

SeedRnd MilliSecs()  ; Rand auf "Zufällig" stellen

;Dimmen und globaliesieren :
Dim Win3(8)
Dim feld(3,3)
Dim Name$(2)
Global Sieg

;Namen Eingeben :
ClsColor 30,60,90:Cls
For i = 1 To 2:Locate 1,1:Name$(i) = Input("Spieler Nr."+i+" : ")
If Name$(i) = "" Then Name$(i) = "Spieler"+i
Text 1,15,"Gegen einen Computer ?
Cls
Next
;Spielerauswahl :
Spieler = Rand(0,1)

;Schleife :
Repeat
ClsColor 30,60,90:Cls
Color 255,255,255
;Wer ist dran ? :
If (Spieler+1) = 1 Then Changed$ = Name$(1)
If (Spieler+1) = 2 Then Changed$ = Name$(2)
Text 1,20,"Spieler : "+ Changed$

;Spielefeld zeichnen :
For x = 1 To 3
For y = 1 To 3
Rect x*50,y*50,50,50,0
Next
Next
;Setzten des kreuzchen (oder kreises^^) :
If MouseHit(1)
For x = 1 To 3
For y = 1 To 3
If RectsOverlap(MouseX(),MouseY(),1,1,x*50,y*50,50,50) Then
If feld(x,y) = 0 Then Spieler = 1 - Spieler :feld(x,y) = (Spieler+1)
EndIf
Next
Next
EndIf

;Zeichnen des kreuzchens (oder kreises^^) :
For x = 1 To 3
For y = 1 To 3
If feld(x,y) = 1 Then Oval x*50+5,y*50+5,40,40,0
If feld(x,y) = 2 Then Line x*50+5,y*50+5,(x*50)+45,(y*50)+45:Line x*50+5,y*50+45,(x*50)+45,(y*50)+5
Next
Next

; Alles Neu :
If MouseHit(2) Then Neu = True
If Neu = True Then
Text 200,200,"Unentschieden !":Flip
Color 30,60,90:Rect 50,50,150,150,0:Flip
For x = 1 To 3:For y = 1 To 3:feld(x,y) = 0:Next:Next
;Sieg = True
Wait()
Neu = False
EndIf

Color 30,60,90:Rect 50,50,150,150,0
Color 255,255,255
;Den gewinner anzeigen :
If winline(1) = 1 Then
Text 1,1,Name$(2)+" hat gewonnen !":Flip:Wait()
For x = 1 To 3:For y = 1 To 3:feld(x,y) = 0:Next:Next
;Sieg = True
EndIf
If winline(2) = 2 Then
Text 1,1,Name$(1)+" hat gewonnen !":Flip:Wait()
For x = 1 To 3:For y = 1 To 3:feld(x,y) = 0:Next:Next
;Sieg = True
EndIf

If winline(1) = 0 And winline(2) = 0 Then Text 1,1,"Noch hat keiner gewonnen ;)"

Flip
Until KeyHit(1)
End

;Winline überprüfen :
Function winline(W)
For i = 1 To 7
Win3(i) = W
Next
;Sebnkrecht :
For y = 1 To 3
If feld(1,y) <> W Then Win3(1) = 0
If feld(2,y) <> W Then Win3(2) = 0
If feld(3,y) <> W Then Win3(3) = 0
Next
;Waagerecht :
For x = 1 To 3
If feld(x,1) <> W Then Win3(4) = 0
If feld(x,2) <> W Then Win3(5) = 0
If feld(x,3) <> W Then Win3(6) = 0
Next
;Diagonal :
For i = 3 To 1 Step -1
If feld(i,i) <> W Then Win3(7) = 0
Next
If feld(1,3) = W
If feld(2,2) = W
If feld(3,1) = W
Return W
EndIf
EndIf
EndIf
; Den wert Returnen :
For i = 1 To 7
If Win3(i) = W Then Return W
Next


End Function

;Warten function :
Function Wait()
Delay 100
FlushMouse()
FlushKeys()
Repeat
Wait = GetKey() Or GetMouse()
If KeyHit(1) Then End
Color 255,0,0
Text 150,150,"Drücke eine (Maus)Taste zum fortfaren !"
Flip
Until Wait
Cls
FlushMouse()
FlushKeys()
End Function


Kritiken wie imma erwünscht Wink

~Edit~

so besser? Hab jetzt das mit "If/Endif" und das mit "Noch hat keiner gewonnen" geändert^^
  • Zuletzt bearbeitet von ToeB am So, Feb 11, 2007 17:16, insgesamt 2-mal bearbeitet

Holzchopf

Meisterpacker

BeitragSa, Feb 10, 2007 22:51
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will ja nicht miesmacherisch tun, aber ich frage mich grad echt, ob ein uneingerückter Code nicht so ziemlich gegen die Qualitätsoffensive im Codearchiv verstösst. Gut, immerhin hast du das wichtigste kommentiert.
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

FWeinb

ehemals "ich"

BeitragSo, Feb 11, 2007 11:28
Antworten mit Zitat
Benutzer-Profile anzeigen
ist nen Bug drin wenn man alle Felder voll hatt den wir es nicht neugestartet.
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

Tankbuster

BeitragSo, Feb 11, 2007 11:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
If feld(1,3) = W
If feld(2,2) = W
If feld(3,1) = W
Return W
EndIf
EndIf
EndIf

Warum machst du mit so vielen If\Endifs ??? Mach einfach
Zitat:
If feld(1,3) = W And feld(2,2) = W And feld(3,1) = W
Return W
Endif

Das finde ich persöhnlich viel übersichtlicher!^^

Und "noch hat keina gewonnen" würd ich auch mal schnell ändern Razz
Twitter
Download Jewel Snake!
Windows|Android

ToeB

BeitragSo, Feb 11, 2007 14:05
Antworten mit Zitat
Benutzer-Profile anzeigen
so, habs geändert Wink
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Tankbuster

BeitragSo, Feb 11, 2007 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
VIELEN DANK Very Happy
Twitter
Download Jewel Snake!
Windows|Android

StepTiger

BeitragSo, Feb 11, 2007 17:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Spiel heißt übrigens Tic Tac Toe.
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

ToeB

BeitragSo, Feb 11, 2007 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
thx ! mia is der Name nich eingefallen !


~Big Edit~

Ich hab auch mal den Computer geproggt ( der ist zwar noch nich so schlau, kommt aba alles noch Wink )

Code: [AUSKLAPPEN]

Graphics 800,600,16,2
SetBuffer BackBuffer()

SeedRnd MilliSecs()  ; Rand auf "Zufällig" stellen

;Dimmen und globaliesieren :
Dim Win3(8)
Dim feld(3,3)
Const Spiel = 1
Const Comp = 2
Global Ch = 1

;Schleife :
Repeat
ClsColor 30,60,90:Cls
Color 255,255,255
;Wer ist dran ? :
If (Spieler+1) = 1 Then Changed$ = "Hallo 1
If (Spieler+1) = 2 Then Changed$ = "HAllo 2
Text 1,20,"Spieler : "+ Changed$

;Spielefeld zeichnen :
For x = 1 To 3
For y = 1 To 3
Rect x*50,y*50,50,50,0
Next
Next
;Setzten des kreuzchen (oder kreises^^) :
If Ch = Spiel
If MouseHit(1)
For x = 1 To 3
For y = 1 To 3
If RectsOverlap(MouseX(),MouseY(),1,1,x*50,y*50,50,50) Then
If feld(x,y) = 0 Then feld(x,y) = 1:Ch = Comp
EndIf
Next
Next
EndIf
EndIf
If Ch = Comp
CX = Rand(1,3):Cy = Rand(1,3)
If feld(CX,CY) = 0 Then
feld(CX,CY) = Comp:Ch = Spiel
ElseIf feld(CX,CY) = Spiel
CX = Rand(1,3):Cy = Rand(1,3)
EndIf
EndIf
;Zeichnen des kreuzchens (oder kreises^^) :
For x = 1 To 3
For y = 1 To 3
If feld(x,y) = 1 Then Oval x*50+5,y*50+5,40,40,0
If feld(x,y) = 2 Then Line x*50+5,y*50+5,(x*50)+45,(y*50)+45:Line x*50+5,y*50+45,(x*50)+45,(y*50)+5
Next
Next

; Alles Neu :
If MouseHit(2) Then Neu = True
If Neu = True Then
Text 200,200,"Unentschieden !":Flip
Color 30,60,90:Rect 50,50,150,150,0:Flip
For x = 1 To 3:For y = 1 To 3:feld(x,y) = 0:Next:Next
;Sieg = True
Wait()
Neu = False
EndIf

Color 30,60,90:Rect 50,50,150,150,0
Color 255,255,255
;Den gewinner anzeigen :
If winline(1) = 1 Then
Text 1,1,"Du hast gewonnen !":Flip:Wait()
For x = 1 To 3:For y = 1 To 3:feld(x,y) = 0:Next:Next
;Sieg = True
EndIf
If winline(2) = 2 Then
Text 1,1,"Der Computer gewonnen !":Flip:Wait()
For x = 1 To 3:For y = 1 To 3:feld(x,y) = 0:Next:Next
;Sieg = True
EndIf

If winline(1) = 0 And winline(2) = 0 Then Text 1,1,"Noch hat keiner gewonnen ;)"

Flip
Until KeyHit(1)
End

;Winline überprüfen :
Function winline(W)
For i = 1 To 7
Win3(i) = W
Next
;Sebnkrecht :
For y = 1 To 3
If feld(1,y) <> W Then Win3(1) = 0
If feld(2,y) <> W Then Win3(2) = 0
If feld(3,y) <> W Then Win3(3) = 0
Next
;Waagerecht :
For x = 1 To 3
If feld(x,1) <> W Then Win3(4) = 0
If feld(x,2) <> W Then Win3(5) = 0
If feld(x,3) <> W Then Win3(6) = 0
Next
;Diagonal :
For i = 3 To 1 Step -1
If feld(i,i) <> W Then Win3(7) = 0
Next
If feld(1,3) = W
If feld(2,2) = W
If feld(3,1) = W
Return W
EndIf
EndIf
EndIf
; Den wert Returnen :
For i = 1 To 7
If Win3(i) = W Then Return W
Next


End Function

;Warten function :
Function Wait()
Delay 100
FlushMouse()
FlushKeys()
Repeat
Wait = GetKey() Or GetMouse()
If KeyHit(1) Then End
Color 255,0,0
Text 150,150,"Drücke eine (Maus)Taste zum fortfaren !"
Flip
Until Wait
Cls
FlushMouse()
FlushKeys()
End Function
 

FWeinb

ehemals "ich"

BeitragSo, Feb 11, 2007 17:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Du soltest übreprüfen ob der gegener in dem nächsten zu dichtmachen könte und das X dann an die stelle setzen wo man alle drei bekommen könte
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

StepTiger

BeitragSo, Feb 11, 2007 17:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Der setzt doch rein zufällig, oder?
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.

ToeB

BeitragMo, Feb 12, 2007 14:59
Antworten mit Zitat
Benutzer-Profile anzeigen
äh ... ja , glaub ich schon Surprised
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Eurous

BeitragMo, Jul 30, 2007 16:15
Antworten mit Zitat
Benutzer-Profile anzeigen
zum thema rein zufällig setzen: den hab ich kürzlich programmiert. grafisch nicht so ansprechend aber es reichtt. gesetzt wird per maus. der computer setzt anfangs immer gleich. aber desto öfter man gewinnt, desto stärker wird der Computergegner, weil er lernt. probierts aus Very Happy (übrigens muss der code gespeichert werden, da er eine datei erstellt, in die er das gelernte schreibt)
Code: [AUSKLAPPEN]

Graphics 800,600,16,2


SeedRnd MilliSecs()

;in die Datei noch eine "schablone" schreiben gegen "zwickmühlen"
If Not FileType("gelernt.txt") Then
   gelerntes=WriteFile("gelernt.txt")
   
   WriteByte gelerntes,0
   WriteByte gelerntes,0
   WriteByte gelerntes,1
   WriteByte gelerntes,0
   WriteByte gelerntes,1
   WriteByte gelerntes,0
   WriteByte gelerntes,2
   WriteByte gelerntes,0
   WriteByte gelerntes,0
   WriteByte gelerntes,0
   WriteByte gelerntes,0

   CloseFile gelerntes
EndIf



Global siegpc=0
Global siegmensch=0
Global unentschieden=0

.anfang

Global lernen=OpenFile("gelernt.txt")

;variablen
Global x=0
Global y=0
Global x2=0;um die züge zum lernen rückgängig zu machen
Global y2=0
Dim feld(2,2);0=nix,1=mensch,2=PC
For i=0 To 2
   For j=0 To 2
      feld(i,j)=0
   Next
Next
Global zuege=9
Global neuesgame=0
Global vergleich=0
Global ungleich=0
;---------


Repeat
   
   
   ;zug mensch----------------------------\\\\
   Cls
   zeichne_feld()
   Text 10,10,"Setze durch klicken"
   Repeat
   FlushMouse
   WaitMouse()
      If MouseHit(1) Then
         If MouseX()>50 And MouseX()<150 Then x=0
         If MouseX()>150 And MouseX()<250 Then x=1
         If MouseX()>250 And MouseX()<350 Then x=2
         
         If MouseY()>50 And MouseY()<150 Then y=0
         If MouseY()>150 And MouseY()<250 Then y=1
         If MouseY()>250 And MouseY()<350 Then y=2
         
      EndIf
      
   
   Until feld(x,y)=0
   
   
   feld(x,y)=1
   zuege=zuege-1
   gewonnen()
   If zuege=0 Then Exit
   If neuesgame=1 Then Goto anfang
   ;----------------------------------///
   
   ;pc-zug----------------------------\\\
   Cls
   zeichne_feld()
   Locate 10,10
   Text 10,10,"Ich ziehe, Moment"
   Delay 250
   
   If feld(2,0)=0 Then
      x=2
      y=0
   ElseIf feld(1,0)=0 Then
      x=1
      y=0
   ElseIf feld(0,0)=0 Then
      x=0
      y=0
   Else
      Repeat
         x=Rnd(2)
         y=Rnd(2)
      Until feld(x,y)=0
   EndIf
   
      
   ueberpruefen()
   
   feld(x,y)=2
   
   zuege=zuege-1
   gewonnen()
   If neuesgame=1 Then Goto anfang
   
   x2=x
   y2=y
   ;-----------------------------------///
      
Until KeyHit(1) Or zuege<=0

Cls
zeichne_feld()
unentschieden=unentschieden+1
Text 10,10,"Unentschieden"

FlushMouse
FlushKeys
Repeat
Until Not WaitMouse()=0

Goto anfang

End


;========================{Funktionen}=================================
Function zeichne_feld()

Rect 50,50,300,300,0

Rect 150,50,3,300
Rect 250,50,3,300
Rect 50,150,300,3
Rect 50,250,300,3

For i=0 To 2
   For j=0 To 2
   
      If feld(i,j)=1 Then
         Line 60+i*100,60+j*100,140+i*100,140+j*100
         Line 60+i*100,140+j*100,140+i*100,60+j*100
      
      ElseIf feld(i,j)=2 Then
         Oval 60+i*100,60+j*100,80,80,0   
      EndIf
   
   Next
Next

Text 50,360,"Gewonnen: "+siegmensch
Text 50,375,"Verloren: "+siegpc
Text 50,390,"Unentschieden: "+unentschieden

End Function


Function gewonnen()

   If feld(0,0)=1 And feld(0,1)=1 And feld(0,2)=1 Then echt_gewonnen(1);vertikal
   If feld(1,0)=1 And feld(1,1)=1 And feld(1,2)=1 Then echt_gewonnen(2)
   If feld(2,0)=1 And feld(2,1)=1 And feld(2,2)=1 Then echt_gewonnen(3)
   
   If feld(0,0)=1 And feld(1,0)=1 And feld(2,0)=1 Then echt_gewonnen(4);horizontal
   If feld(0,1)=1 And feld(1,1)=1 And feld(2,1)=1 Then echt_gewonnen(5)
   If feld(0,2)=1 And feld(1,2)=1 And feld(2,2)=1 Then echt_gewonnen(6)

   If feld(0,0)=1 And feld(1,1)=1 And feld(2,2)=1 Then echt_gewonnen(7);diagonal
   If feld(2,0)=1 And feld(1,1)=1 And feld (0,2)=1 Then echt_gewonnen(8)
   
   ;__PC__
   
   If feld(0,0)=2 And feld(0,1)=2 And feld(0,2)=2 Then verloren(1);vertikal
   If feld(1,0)=2 And feld(1,1)=2 And feld(1,2)=2 Then verloren(2)
   If feld(2,0)=2 And feld(2,1)=2 And feld(2,2)=2 Then verloren(3)
   
   If feld(0,0)=2 And feld(1,0)=2 And feld(2,0)=2 Then verloren(4);horizontal
   If feld(0,1)=2 And feld(1,1)=2 And feld(2,1)=2 Then verloren(5)
   If feld(0,2)=2 And feld(1,2)=2 And feld(2,2)=2 Then verloren(6)

   If feld(0,0)=2 And feld(1,1)=2 And feld(2,2)=2 Then verloren(7);diagonal
   If feld(2,0)=2 And feld(1,1)=2 And feld (0,2)=2 Then verloren(8)

End Function


Function echt_gewonnen(linie)

   Cls
   zeichne_feld()
   siegmensch = siegmensch+1
   Text 10,10,"Du hast gewonnen"
   
   Select linie
   
   Case 1
      Rect 100,70,3,260
   Case 2
      Rect 200,70,3,260
   Case 3
      Rect 300,70,3,260
      
   Case 4
      Rect 70,100,260,3
   Case 5
      Rect 70,200,260,3
   Case 6
      Rect 70,300,260,3
      
   Case 7
      Line 90,80,310,320
   Case 8
      Line 90,320,310,80
   End Select
   
   gelerntes()
   
   FlushMouse
   FlushKeys
   Repeat
   Until Not WaitMouse()=0

   neuesgame=1

End Function


Function verloren(linie)

   Cls
   zeichne_feld()
   siegpc=siegpc+1
   Text 10,10,"Du hast verloren"
   
   Select linie
   
   Case 1
      Rect 100,70,3,260
   Case 2
      Rect 200,70,3,260
   Case 3
      Rect 300,70,3,260
      
   Case 4
      Rect 70,100,260,3
   Case 5
      Rect 70,200,260,3
   Case 6
      Rect 70,300,260,3
      
   Case 7
      Line 90,80,310,320
   Case 8
      Line 90,320,310,80
   End Select

   
   FlushMouse
   FlushKeys
   Repeat
   Until Not WaitMouse()=0

   neuesgame=1

End Function


Function gelerntes()

   i=-1
   Repeat
      i=i+1
      SeekFile lernen,i;geht bestimmt einfacher, ans ende einer datei zu kommen ;-)
   Until Eof(lernen)
   
   feld(x,y)=0;war 1
   feld(x2,y2)=0;war 2
   
   For i=0 To 2
      For j=0 To 2
         WriteByte lernen,feld(i,j)
      Next
   Next
   
   WriteByte lernen,x ;da hin soller setzen, falls diese situation wiederkommt
   WriteByte lernen,y
   
   CloseFile lernen

End Function


Function ueberpruefen()

   SeekFile lernen,0

   Repeat
      ungleich=0
      For i=0 To 2
         For j=0 To 2
            vergleich=ReadByte (lernen)
            If Not vergleich=feld(i,j) Then
               ungleich=1
            EndIf
         Next
      Next
      
      If ungleich=0 Then ;wenn alles gleich, dann den zug
         x=ReadByte(lernen)
         y=ReadByte(lernen)
         Exit
      
      ElseIf ungleich=1
         ReadByte(lernen)
         ReadByte(lernen);cursor um die 2 "lernstellen" verschieben
      EndIf
      
   Until FilePos(lernen)>=FileSize("gelernt.txt")

End Function



mfg eurous
Wem das Wasser bis zum Hals steht sollte den Kopf nicht hängen lassen!
  • Zuletzt bearbeitet von Eurous am Mo, Jul 30, 2007 16:52, insgesamt einmal bearbeitet

SpionAtom

BeitragMo, Jul 30, 2007 16:47
Antworten mit Zitat
Benutzer-Profile anzeigen
@Eurous: Ich gewinne immer mit denselben Zügen: Oben links, Unten rechts, unten Links...
os: Windows 10 Home cpu: Intel Core i7 6700K 4.00Ghz gpu: NVIDIA GeForce GTX 1080

Eurous

BeitragMo, Jul 30, 2007 16:54
Antworten mit Zitat
Benutzer-Profile anzeigen
komisch... kann eigentlich nicht sein, da das ja nicht mal nicht in einer reihe ist.
mfg eurous

ps: hab noch ein fehler beim dateierstellen im code korrigiert
Wem das Wasser bis zum Hals steht sollte den Kopf nicht hängen lassen!
 

#Reaper

Newsposter

BeitragMo, Jul 30, 2007 19:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ganz nett

Aber die KI ist schon ein wenig blöd, könnte mich blocken, und vorallem selber direkt mit einem Zug gewinnen, macht es aber nicht^^
AMD Athlon 64 3500+, ATI AX800 Pro/TD, 2048 MB DRR 400 von Infineon, ♥RIP♥ (2005 - Juli 2015 -> sic!)
Blitz3D, BlitzMax, MaxGUI, Monkey X; Win7

BigMaexle

BeitragMo, Aug 06, 2007 22:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi Leutz

Ich hab mich auch mal an einer Tic Tac Toe KI versucht und es is mir eigentlich ganz gut gelungen, sie is unschlagbar Cool

Code: [AUSKLAPPEN]

AppTitle "Tic Tac Toe"

Graphics 300,300
SetBuffer BackBuffer()
SeedRnd MilliSecs()

Dim Feld (3,3)   ; Jedes Feld an X und Y
Global Sieger=0 ; Sieger? 0 = noch keiner hat gewonnen 2 : KI 3: Player
Global AmZug= 1   ; Wer ist am Zug 1: Player 2:KI
Global Remis= 0   ; Remis? True or False
Global KI_SiegMoeglich=0   ; kann die KI in einem Zug gewinnen
Global KI_DirekteBedrohung=0; Kann  "   "  "   "    "  verlieren
Global KI_FeldX=0   ; Das geplante KI Feld
Global KI_FeldY=0   ;  "   "        "  "
Global Zug = 0      ; der wievielte Zug ?
Global SpielModus = 0 ; Spielmodus: 1:Einzelspieler 2:Multiplayer

Repeat ; Einzelspieler oder PvP ???

   Text 0,0,"  : Einzelspieler
   Text 0,10,"  : 2 Spieler
   Text 0,SpielModus*10,">"
   
   If KeyHit (200) Then Spielmodus = 0
   If KeyHit (208) Then Spielmodus = 1
   
   Flip
   Cls

Until KeyHit(28)
Spielmodus = Spielmodus + 1

Repeat   ; #############

EingabeCheck ()
Zeichnen ()

Flip
Cls

Until KeyHit(1); #########

Function EingabeCheck ()
   If AmZug = 1 If MouseHit (1) Then
      If Feld (Ceil(MouseX()/100)+1,Ceil(MouseY()/100)+1) = 0 Then
      ; Die Formel für X und Y kann sich jeder bei einen 300x300 Feld selbst erschließen
         Feld (Ceil(MouseX()/100)+1,Ceil(MouseY()/100)+1) = 3   ; das entsprechende Feld wird markiert
         AmZug=2
         Zug = Zug + 1
               
         ReihenCheck ()   ; hat man gewonnen?
         RemisCheck ()   ; ist es unentscheiden?
         
      EndIf
   EndIf
   
   If AmZug=2 If SpielModus = 1 Then
         If Remis = 0 And Sieger = 0 Then KI () ; wenn nicht dann ist die KI dran
         
         ReihenCheck ()   ;Das ganze nochmal
         RemisCheck ()   ; .....
         
   EndIf

   If AmZug = 2 If Spielmodus = 2 If MouseHit (1) Then
      If Feld (Ceil(MouseX()/100)+1,Ceil(MouseY()/100)+1) = 0 Then
         Feld (Ceil(MouseX()/100)+1,Ceil(MouseY()/100)+1) = 2
         AmZug = 1
         
         ReihenCheck ()
         RemisCheck ()
         
      EndIf
   EndIf
   
End Function

Function ReihenCheck () ;alle 8 Reihen werden geckecht ob vll irgendwas voll ist
   If Feld(1,1)= Feld (1,2) If Feld(1,2) = Feld(1,3) If Feld(1,2) <> 0 Then Sieger = Feld (1,2)
   If Feld(2,1)= Feld (2,2) If Feld(2,2) = Feld(2,3) If Feld(2,2) <> 0 Then Sieger = Feld (2,2)
   If Feld(3,1)= Feld (3,2) If Feld(3,2) = Feld(3,3) If Feld(3,2) <> 0 Then Sieger = Feld (3,2)
   
   If Feld(1,1)= Feld (2,1) If Feld(2,1) = Feld(3,1) If Feld(2,1) <> 0 Then Sieger = Feld (2,1)
   If Feld(1,2)= Feld (2,2) If Feld(2,2) = Feld(3,2) If Feld(2,2) <> 0 Then Sieger = Feld (2,2)
   If Feld(1,3)= Feld (2,3) If Feld(2,3) = Feld(3,3) If Feld(2,3) <> 0 Then Sieger = Feld (2,3)
   
   If Feld(1,1)= Feld (2,2) If Feld(2,2) = Feld(3,3) If Feld(2,2) <> 0 Then Sieger = Feld (2,2)
   If Feld(3,1)= Feld (2,2) If Feld(2,2) = Feld(1,3) If Feld(2,2) <> 0 Then Sieger = Feld (2,2)   
End Function

Function Sieg ()      ; Siegesnachricht schrieben und Feld resetten

   SetBuffer FrontBuffer ()   ; Direkt auf den Frontbuffer schreiben damit man den Hintergrund noch sieht
   If Sieger = 3 Text 150,150,"Spieler 1 hat Gewonnen!!",1,1  ; Gewonnen!!!!
   If Sieger = 2 If SpielModus = 1 Text 150,150,"Der Computer hat Gewonnen!!",1,1  ; Gewonnen!!!!
   If Sieger = 2 If SpielModus = 2 Text 150,150,"Spieler 2 hat Gewonnen!!",1,1  ; Gewonnen!!!!
   SetBuffer BackBuffer ()
   Delay(1000)               ; man soll es auch lesen können
      
   Neustart ()
   
End Function

Function RemisCheck ()   ; ist überall voll Remis bleibt 1
   Remis = 1
   For HV=1 To 3
      For HVII=1 To 3
         If Feld(HV,HVII) = 0 Then Remis = 0
      Next
   Next
End Function

Function RemisNachricht ()   ; Remis-Nachricht schreiben und resetten
   
      SetBuffer FrontBuffer ()   
      Text 150,150,"Unentscheiden",1,1  ; Remis
      SetBuffer BackBuffer ()
      Delay(1000)
      
      Neustart ()

End Function

Function Zeichnen ()   ; Linien zeichen und entweder X oder O in die Felder
   Line 100,0,100,300
   Line 200,0,200,300
   Line 0,100,300,100
   Line 0,200,300,200
   
   For HV=1 To 3
      For HVII=1 To 3
         If Feld(HV,HVII) = 3 Then Line (HV-1)*100,(HVII-1)*100,HV*100,HVII*100 : Line (HV-1)*100,HVII*100,HV*100,(HVII-1)*100
         If Feld(HV,HVII) = 2 Then Oval (HV-1)*100,(HVII-1)*100,100,100,0
      Next
   Next
   
   If Remis = 1 Then RemisNachricht () ; RemisNachricht muss danach geschrieben werden, man soll ja das Feld noch sehen können
   If Sieger <> 0 Then Sieg ()       ; s.o
   
   
End Function

Function Neustart()   ; Jedes Feld auf null und sonst alles auf null setzen; der Spieler ist dran

   For HV=1 To 3
      For HVII=1 To 3
         Feld (HV,HVII) = 0         ; Neustart
      Next
   Next
   Sieger = 0
   Remis= 0
   AmZug=1
   Zug=0
   
End Function

Function KI ()   ; KI "Basis"
   
   KI_CheckAufGewinn ()
   
   If KI_SiegMoeglich = 0 Then KI_Reagieren ()
   
   If KI_SiegMoeglich = 0 And KI_DirekteBedrohung=0 Then KI_Reiheweiter ()
   
   KI_Aktion ()
   
End Function

Function KI_CheckaufGewinn ()   
; Jede Reihe wird grob durchsucht
; KI hat den Wert 2 und somit muss bei 2 KI Feldern und 1 leeren beim zusamenzählen 4 enstehen
; Danach wird das leere Feld herausgepickt und die Koordinaten danach ausgerichtet
   If Feld(1,1) + Feld(1,2) + Feld(1,3) = 4 Then
      If Feld(1,1) = 0 Then KI_FeldX=1 : KI_FeldY=1 : KI_SiegMoeglich=1
      If Feld(1,2) = 0 Then KI_FeldX=1 : KI_FeldY=2 : KI_SiegMoeglich=1
      If Feld(1,3) = 0 Then KI_FeldX=1 : KI_FeldY=3 : KI_SiegMoeglich=1
   EndIf

   If Feld(2,1) + Feld(2,2) + Feld(2,3) = 4 Then
      If Feld(2,1) = 0 Then KI_FeldX=2 : KI_FeldY=1 : KI_SiegMoeglich=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_SiegMoeglich=1
      If Feld(2,3) = 0 Then KI_FeldX=2 : KI_FeldY=3 : KI_SiegMoeglich=1
   EndIf

   If Feld(3,1) + Feld(3,2) + Feld(3,3) = 4 Then
      If Feld(3,1) = 0 Then KI_FeldX=3 : KI_FeldY=1 : KI_SiegMoeglich=1
      If Feld(3,2) = 0 Then KI_FeldX=3 : KI_FeldY=2 : KI_SiegMoeglich=1
      If Feld(3,3) = 0 Then KI_FeldX=3 : KI_FeldY=3 : KI_SiegMoeglich=1
   EndIf

   If Feld(1,1) + Feld(2,1) + Feld(3,1) = 4 Then
      If Feld(1,1) = 0 Then KI_FeldX=1 : KI_FeldY=1 : KI_SiegMoeglich=1
      If Feld(2,1) = 0 Then KI_FeldX=2 : KI_FeldY=1 : KI_SiegMoeglich=1
      If Feld(3,1) = 0 Then KI_FeldX=3 : KI_FeldY=1 : KI_SiegMoeglich=1
   EndIf
   
   If Feld(1,2) + Feld(2,2) + Feld(3,2) = 4 Then
      If Feld(1,2) = 0 Then KI_FeldX=1 : KI_FeldY=2 : KI_SiegMoeglich=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_SiegMoeglich=1
      If Feld(3,2) = 0 Then KI_FeldX=3 : KI_FeldY=2 : KI_SiegMoeglich=1
   EndIf
   
   If Feld(1,3) + Feld(2,3) + Feld(3,3) = 4 Then
      If Feld(1,3) = 0 Then KI_FeldX=1 : KI_FeldY=3 : KI_SiegMoeglich=1
      If Feld(2,3) = 0 Then KI_FeldX=2 : KI_FeldY=3 : KI_SiegMoeglich=1
      If Feld(3,3) = 0 Then KI_FeldX=3 : KI_FeldY=3 : KI_SiegMoeglich=1
   EndIf
   
   If Feld(1,1) + Feld(2,2) + Feld(3,3) = 4 Then
      If Feld(1,1) = 0 Then KI_FeldX=1 : KI_FeldY=1 : KI_SiegMoeglich=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_SiegMoeglich=1
      If Feld(3,3) = 0 Then KI_FeldX=3 : KI_FeldY=3 : KI_SiegMoeglich=1
   EndIf
   
   If Feld(1,3) + Feld(2,2) + Feld(3,1) = 4 Then
      If Feld(1,3) = 0 Then KI_FeldX=1 : KI_FeldY=3 : KI_SiegMoeglich=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_SiegMoeglich=1
      If Feld(3,1) = 0 Then KI_FeldX=3 : KI_FeldY=1 : KI_SiegMoeglich=1
   EndIf
End Function

Function KI_Reagieren()

; Siehe KI_CheckaufGewinn() nur im Bezug auf den Menschen
; Wer das System verstanden hat wird verstehen warum der Player Wert auf 3 und nich logischerweise auf 1 ist

   If Feld(1,1) + Feld(1,2) + Feld(1,3) = 6 Then
      If Feld(1,1) = 0 Then KI_FeldX=1 : KI_FeldY=1 : KI_DirekteBedrohung=1
      If Feld(1,2) = 0 Then KI_FeldX=1 : KI_FeldY=2 : KI_DirekteBedrohung=1
      If Feld(1,3) = 0 Then KI_FeldX=1 : KI_FeldY=3 : KI_DirekteBedrohung=1
   EndIf

   If Feld(2,1) + Feld(2,2) + Feld(2,3) = 6 Then
      If Feld(2,1) = 0 Then KI_FeldX=2 : KI_FeldY=1 : KI_DirekteBedrohung=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_DirekteBedrohung=1
      If Feld(2,3) = 0 Then KI_FeldX=2 : KI_FeldY=3 : KI_DirekteBedrohung=1
   EndIf

   If Feld(3,1) + Feld(3,2) + Feld(3,3) = 6 Then
      If Feld(3,1) = 0 Then KI_FeldX=3 : KI_FeldY=1 : KI_DirekteBedrohung=1
      If Feld(3,2) = 0 Then KI_FeldX=3 : KI_FeldY=2 : KI_DirekteBedrohung=1
      If Feld(3,3) = 0 Then KI_FeldX=3 : KI_FeldY=3 : KI_DirekteBedrohung=1
   EndIf

   If Feld(1,1) + Feld(2,1) + Feld(3,1) = 6 Then
      If Feld(1,1) = 0 Then KI_FeldX=1 : KI_FeldY=1 : KI_DirekteBedrohung=1
      If Feld(2,1) = 0 Then KI_FeldX=2 : KI_FeldY=1 : KI_DirekteBedrohung=1
      If Feld(3,1) = 0 Then KI_FeldX=3 : KI_FeldY=1 : KI_DirekteBedrohung=1
   EndIf
   
   If Feld(1,2) + Feld(2,2) + Feld(3,2) = 6 Then
      If Feld(1,2) = 0 Then KI_FeldX=1 : KI_FeldY=2 : KI_DirekteBedrohung=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_DirekteBedrohung=1
      If Feld(3,2) = 0 Then KI_FeldX=3 : KI_FeldY=2 : KI_DirekteBedrohung=1
   EndIf
   
   If Feld(1,3) + Feld(2,3) + Feld(3,3) = 6 Then
      If Feld(1,3) = 0 Then KI_FeldX=1 : KI_FeldY=3 : KI_DirekteBedrohung=1
      If Feld(2,3) = 0 Then KI_FeldX=2 : KI_FeldY=3 : KI_DirekteBedrohung=1
      If Feld(3,3) = 0 Then KI_FeldX=3 : KI_FeldY=3 : KI_DirekteBedrohung=1
   EndIf
   
   If Feld(1,1) + Feld(2,2) + Feld(3,3) = 6 Then
      If Feld(1,1) = 0 Then KI_FeldX=1 : KI_FeldY=1 : KI_DirekteBedrohung=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_DirekteBedrohung=1
      If Feld(3,3) = 0 Then KI_FeldX=3 : KI_FeldY=3 : KI_DirekteBedrohung=1
   EndIf
   
   If Feld(1,3) + Feld(2,2) + Feld(3,1) = 6 Then
      If Feld(1,3) = 0 Then KI_FeldX=1 : KI_FeldY=3 : KI_DirekteBedrohung=1
      If Feld(2,2) = 0 Then KI_FeldX=2 : KI_FeldY=2 : KI_DirekteBedrohung=1
      If Feld(3,1) = 0 Then KI_FeldX=3 : KI_FeldY=1 : KI_DirekteBedrohung=1
   EndIf
End Function

Function KI_Reiheweiter ()   
; Es wird eine zufällige Reihe durchsucht wenn es nur ein KI_Feld gibt soll ein anderes Besetzt werden
   
   If Zug>1 Then
   Repeat
   Reihe = Rand (1,8)
   If Reihe = 1 If Feld(1,1) + Feld(1,2) + Feld(1,3) = 2 Then
      If Feld(1,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=3
      EndIf
      If Feld(1,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=1
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=3
      EndIf    
      If Feld(1,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=1
      EndIf
   EndIf

   If Reihe = 2 If Feld(2,1) + Feld(2,2) + Feld(2,3) = 2 Then
      If Feld(2,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=2 : KI_FeldY=3
      EndIf
      If Feld(2,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=1
         If Auswahlfeld=2 Then KI_FeldX=2 : KI_FeldY=3
      EndIf    
      If Feld(2,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=2 : KI_FeldY=1
      EndIf
   EndIf

   If Reihe = 3 If Feld(3,1) + Feld(3,2) + Feld(3,3) = 2 Then
      If Feld(3,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=3 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=3
      EndIf
      If Feld(3,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=3 : KI_FeldY=1
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=3
      EndIf    
      If Feld(3,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=3 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=1
      EndIf
   EndIf

   If Reihe = 4 If Feld(1,1) + Feld(2,1) + Feld(3,1) = 2 Then
      If Feld(1,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=1
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=1
      EndIf
      If Feld(2,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=1
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=1
      EndIf
      
      If Feld(3,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=1
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=1
      EndIf
   EndIf
   
   If Reihe = 5 If Feld(1,2) + Feld(2,2) + Feld(3,2) = 2 Then
      If Feld(1,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=2
      EndIf
      If Feld(2,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=2
      EndIf
      
      If Feld(3,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=2
      EndIf
   EndIf
   
   If Reihe = 6 If Feld(1,3) + Feld(2,3) + Feld(3,3) = 2 Then
      If Feld(1,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=2
      EndIf
      If Feld(2,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=2
      EndIf
      
      If Feld(3,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=2
      EndIf
   EndIf
   
   If Reihe = 7 If Feld(1,1) + Feld(2,2) + Feld(3,3) = 2 Then
      If Feld(1,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=3
      EndIf
      If Feld(2,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=1
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=3
      EndIf
      
      If Feld(3,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=1
      EndIf
   EndIf
   
   If Reihe = 8 If Feld(1,3) + Feld(2,2) + Feld(3,1) = 2 Then
      If Feld(1,3) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=1
      EndIf
      If Feld(2,2) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=1 : KI_FeldY=3
         If Auswahlfeld=2 Then KI_FeldX=3 : KI_FeldY=1
      EndIf
      
      If Feld(3,1) = 2 Then
         AuswahlFeld=Rand(1,2)
         If Auswahlfeld=1 Then KI_FeldX=2 : KI_FeldY=2
         If Auswahlfeld=2 Then KI_FeldX=1 : KI_FeldY=3
      EndIf
   EndIf
   
   Until KI_FeldX <> 0 And KI_FeldY <> 0
   EndIf
End Function

Function KI_Aktion () ; Nun wird das Feld endgültig gewählt
   
   ; Ein paar Grundtaktiken bei Tic Tac Toe:
   ; Am Anfang eine Ecke besetzen (man würde in eine Zwickmühle geraten)
   ; oder falls es geht die Mitte besetzen
   ; Wenn KI Die Mitte hat und Der Mensch 2 Ecken, soll keine Ecke gewählt werden (thx an Marek
   
   If Zug=1 Then
      If Feld(2,2) = 0 Then KI_FeldX = 2 : KI_FeldY = 2
      If Feld(2,2) = 3 Then
         Ecke = Rand(1,4)
         If Ecke = 1 Then KI_FeldX = 1 : KI_FeldY = 1
         If Ecke = 2 Then KI_FeldX = 3 : KI_FeldY = 1
         If Ecke = 3 Then KI_FeldX = 1 : KI_FeldY = 3
         If Ecke = 4 Then KI_FeldX = 3 : KI_FeldY = 3
      EndIf
   EndIf
   
   If Zug=2
      If Feld(2,2) = 2 If (Feld(1,1)=3 And Feld(3,3)=3) Or (Feld(1,3)=3 And Feld(3,1)=3)
         Platz = Rand(1,4)
         If Platz = 1 Then KI_FeldX = 2 : KI_FeldY = 1
         If Platz = 2 Then KI_FeldX = 2 : KI_FeldY = 3
         If Platz = 3 Then KI_FeldX = 1 : KI_FeldY = 2
         If Platz = 4 Then KI_FeldX = 3 : KI_FeldY = 2
      EndIf
      
      If Feld (2,2)=2 If Feld (1,2) = 3 If Feld (2,1) = 3 Then KI_FeldX=1 : KI_FeldY=1
      If Feld (2,2)=2 If Feld (3,2) = 3 If Feld (2,1) = 3 Then KI_FeldX=3 : KI_FeldY=1
      If Feld (2,2)=2 If Feld (1,2) = 3 If Feld (2,3) = 3 Then KI_FeldX=1 : KI_FeldY=3
      If Feld (2,2)=2 If Feld (2,3) = 3 If Feld (3,2) = 3 Then KI_FeldX=3 : KI_FeldY=3
   EndIf


   If KI_FeldX=0 And KI_FeldY=0 Then  ; Ist immernoch nichts vorteilhaft zufällig wählen
      Repeat
      KI_FeldX=Rand(1,3)
      KI_FeldY=Rand(1,3)
      Until Feld (KI_FeldX,KI_FeldY) = 0
   EndIf
   
   Feld (KI_FeldX,KI_FeldY) = 2 ; das Feld wählen und alles für den nächsten zug resetten
   KI_FeldX=0
   KI_FeldY=0
   KI_SiegMoeglich = 0
   AmZug=1
End Function



Edit: Hab jetz eine 3. Grundtaktik in die KI eingebaut

Edit2: So ich hab jetz ne 4. Grundtaktik, jetzt sollte man den PC nicht mehr in eine Zwickmühle treiben können, Außerdem durch einen zusätzliche Funktion spielt der PC jetz konstruktiver und versucht mögliche Reihen weiterzuführen
  • Zuletzt bearbeitet von BigMaexle am Di, Aug 07, 2007 12:05, insgesamt 4-mal bearbeitet
 

Schnuff

BeitragDi, Aug 07, 2007 0:46
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich hab sie mit dem ersten versuch geschlagen^^
Programmers dont die. They gosub without return...
 

Marek

BeitragDi, Aug 07, 2007 2:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Es gibt noch genau eine Möglichkeit, wie man gewinnen kann:
1. Spieler: in einer Ecke Comp: in der Mitte
2. Spieler: in der Gegenüberliegenden Ecke

Für den Computer gibt es jetzt noch zwei Möglichkeiten:
1. In einer Ecke setzen (er verliert wenn der Spieler richtig spiel)
2. Nicht in eine Ecke setzen (unentschieden oder Gewinn für den Computer

Beide Varianten kommen vor, nur die 2. dürfte angewandt werden^^

MfG Marek
Wer lesen kann ist klar im Vorteil...

BigMaexle

BeitragDi, Aug 07, 2007 10:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Stimmt, daran hab ich gar nich gedacht, ich kannte diese Zwickmühle gar nich

Laughing
--------------------------------------
Ich bin unfreiwillig ein Mitglied dieser kapitalistischen Gesellschaft, wo jeder Geldgeile Unternehmer an mein Geld will und ich selbst bei meinen Entscheidungen so gut wie willenlos bin...... und ich bin glücklich drüber

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group