Tic Tac Toe Play
Übersicht

![]() |
ToeBBetreff: Tic Tac Toe Play |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hab mia gedacht, das das nicht in Projecte sondern hier her gehört ![]() ![]() 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 ![]() - 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 ![]() ~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
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
so, habs geändert ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
VIELEN DANK ![]() |
||
Twitter
Download Jewel Snake! Windows|Android |
![]() |
StepTiger |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
||
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
äh ... ja , glaub ich schon ![]() |
||
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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! |
#ReaperNewsposter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
also ich hab sie mit dem ersten versuch geschlagen^^ | ||
Programmers dont die. They gosub without return... |
Marek |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, daran hab ich gar nich gedacht, ich kannte diese Zwickmühle gar nich
![]() |
||
--------------------------------------
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 |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group