![]() |
Probleme bei TicTacToe-Programm
servus jungs :)
ich habe mal eine frage, ich programmiere gerade TicTacToe :D im prinzip ganz leicht nur mein problem ist folgendes :( wenn ich das spiel starte, dann kann spieler 1 ein "X" machen und dann spieler 2 im nächsten button ein "O" der nächste button jedoch wird wieder mit "O" deklariert und das geht solange bis alle 9 button ein "O" haben, wie kann ich die beheben :(
Delphi-Quellcode:
danke schonmal im vorraus :)
var
Form1: TForm1; player,ps1,ps2 : integer; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin showmessage('Spieler 1 startet'); player:=1; ps1 := 0; ps2 := 0; end; procedure TForm1.Button2Click(Sender: TObject); begin if player =1 then begin player:= 2; Button2.Caption := ('X'); ps1:=1; end else if player =2 then begin Button2.Caption := ('O'); ps2:=1; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button3Click(Sender: TObject); begin if player =1 then begin player:= 2; Button3.Caption := ('X'); ps1:=ps1+2; end else if player =2 then begin Button3.Caption := ('O'); ps2:=ps2+2; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button4Click(Sender: TObject); begin if player =1 then begin player:= 2; Button4.Caption := ('X'); ps1:=ps1+3; end else if player =2 then begin Button4.Caption := ('O'); ps2:=ps2+3; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button5Click(Sender: TObject); begin if player =1 then begin player:= 2; Button5.Caption := ('X'); ps1:=ps1+4; end else if player =2 then begin Button5.Caption := ('O'); ps2:=ps2+4; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button6Click(Sender: TObject); begin if player =1 then begin player:= 2; Button6.Caption := ('X'); ps1:=ps1+5; end else if player =2 then begin Button6.Caption := ('O'); ps2:=ps2+5; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button7Click(Sender: TObject); begin if player =1 then begin player:= 2; Button7.Caption := ('X'); ps1:=ps1+6; end else if player =2 then begin Button7.Caption := ('O'); ps2:=ps2+6; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button8Click(Sender: TObject); begin if player =1 then begin player:= 2; Button8.Caption := ('X'); ps1:=ps1+7; end else if player =2 then begin Button8.Caption := ('O'); ps2:=ps2+7; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button9Click(Sender: TObject); begin if player =1 then begin player:= 2; Button9.Caption := ('X'); ps1:=ps1+8; end else if player =2 then begin Button9.Caption := ('O'); ps2:=ps2+8; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.Button10Click(Sender: TObject); begin if player =1 then begin player:= 2; Button10.Caption := ('X'); ps1:=ps1+9; end else if player =2 then begin Button10.Caption := ('O'); ps2:=ps2+9; end else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!'); end; procedure TForm1.BitBtn1Click(Sender: TObject); begin Randomize; Button2.Caption:=''; Button3.Caption:=''; Button4.Caption:=''; Button5.Caption:=''; Button6.Caption:=''; Button7.Caption:=''; Button8.Caption:=''; Button9.Caption:=''; Button10.Caption:=''; player:=random(2)+1; showmessage('Spieler' +IntToStr(player) +'Beginnt!'); end; end. achja und das nächste problem ist wenn spieler 1 oder 2 drei in eienr reihe bzw diagonal belegt hat und das resultat daras dann der sieg ist wie das der computer erkennt und ich das ausgebe :( mfg sandy :) |
AW: Probleme bei TicTacToe-Programm
Hallo,
so wie es aussieht schreibst du deine Variable "Player" nicht mehr auf Player 1 um wenn Player 2 aktiv ist. Das fehlt bei jedem Button! Als Beispiel mal hier Button3
Delphi-Quellcode:
if player =2 then
begin player := 1; //<== Das hier fehlt!! Button3.Caption := ('O'); ps2:=ps2+2; end |
AW: Probleme bei TicTacToe-Programm
stimmt, das war mein fehler :)
danke dir :) jetzt fehlt mir nur noch eine antwort auf meine zweite frage :P weiß jemand daraf die antwort? :) |
AW: Probleme bei TicTacToe-Programm
Hier wird schätzungsweise jede Woche ein TicTacToe Spiel programmiert. Bemühe einfach mal die Suche.
|
AW: Probleme bei TicTacToe-Programm
Zitat:
Warum machst Du es nicht ganz einfach..
Delphi-Quellcode:
Hättest Du das Spielfeld als Array hinterlegt ginge das natürlich einfacher.
if Button1.caption=Button2.Capion and Button2.caption=Button3.caption then....
Gruß K-H p.S. hier gibt es auch ein paar Mädels ;-) |
AW: Probleme bei TicTacToe-Programm
stimmt :D naja trotzdem danke :)
sry ich kann aber nicht bei den anderen mitteilungen mein problem finden :( wenn ich gewinne, dann möchte ich eine showmessage('Du hast gewonne'); wie mache ich das? :( |
AW: Probleme bei TicTacToe-Programm
Zitat:
Delphi-Quellcode:
Gruß
if gewonnen then showmessage('gewonnen');
K-H Wie Du an Gewonnen kommst ist Dir klar? |
AW: Probleme bei TicTacToe-Programm
Noch ein/zwei Tipps:
-
Delphi-Quellcode:
sollte niemals auftreten, denn du setzt die "Player"-Variable und wenn due sie immer nur auf 1 und 2 Setzt, dann kann dieser Code garantiert niemals aufgerufen werden
else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!');
- doppeltet/mehrfacher Code ... die Buttonereignisse haben einen Sender (darin steht rein zufällig der Button, welcher das Ereignis gesendet hat), welchen man nutzen kann. Dazu gibt es notfalls noch das .Tag-Attribut, wo man Zahlen von 1 bis 9 reinmachen könnte .... und schwups kann man aus 9-Buttonereignissen einen Einzigen machen, für alle neun Buttons. - was passiert, wenn ein Player auf einen Button klickt, wo vorher schon der andere Player draufgedrückt hat? |
AW: Probleme bei TicTacToe-Programm
Zitat:
|
AW: Probleme bei TicTacToe-Programm
alle möglichen Gewinnmöglichkeiten abfragen und wenn Eine stimmt, dann hat man gewonnen.
|
AW: Probleme bei TicTacToe-Programm
Und wie man das machen kann, wurde dir in den vorherigen Beiträgen schon gezeigt.
|
AW: Probleme bei TicTacToe-Programm
ich versteh das gard absolut nicht meine freund :(
tut mir leid :S |
AW: Probleme bei TicTacToe-Programm
wann hat irgendwer bei ticTicToe gewonnen?
Oder besser wann ist das Spiel zu Ende? Du solltest bei jedem Zug überprüfen ob es noch eine Möglichkeit gibt ein X oder ein O zu machen. Genauso solltest Du prüfen ob es irgendwo in der Waagerechten oder Senkrechten oder Diagonalen 3 mal das gleiche Zeichen gibt, dann ist nämlich auch Schluß, und das Zeichen was da 3mal steht, ist das Siegerzeichen. So das weißt Du alles (ganz bestimmt) also was verstehst Du da jetzt nicht? Gruß K-H |
AW: Probleme bei TicTacToe-Programm
Hi, hatte ich auch Schwierigkeiten mit... :D
Also, hier mal ein Pseudo-Code:
Delphi-Quellcode:
Jetzt musst du dir nur noch überlegen, wie du an 'AlleFelderBesetzt' rankommst. Ich geb dir den Tipp, dass Spielfeld in einem Array abzubilden und dann die einzelnen Spalten/Zeilen/Diagonalen zu überprüfen. Dami kannst du Codesparend (fast) alles überprüfen! ;)
if NOT(OffeneFelder > 0) then
Exit ELSE for i:= 1 to 3 do for j:= 1 to 3 do if AlleFelderBesetzt = true then ShowMessage('Spieler hat gewonnen!'); LG; hans ditter |
AW: Probleme bei TicTacToe-Programm
@ hans ditter
also soll ich parktisch die variablen offene felder und alle felder besetzt neu deklarieren bei meinen quellcode oder wie meinst du das? :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz