Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Probleme bei TicTacToe-Programm (https://www.delphipraxis.net/159587-probleme-bei-tictactoe-programm.html)

Sandy123 3. Apr 2011 19:38


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:
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.
danke schonmal im vorraus :)
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 :)

Helmi 3. Apr 2011 20:00

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

Sandy123 3. Apr 2011 20:20

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? :)

Luckie 3. Apr 2011 20:23

AW: Probleme bei TicTacToe-Programm
 
Hier wird schätzungsweise jede Woche ein TicTacToe Spiel programmiert. Bemühe einfach mal die Suche.

p80286 3. Apr 2011 20:58

AW: Probleme bei TicTacToe-Programm
 
Zitat:

Zitat von Luckie (Beitrag 1092817)
Hier wird schätzungsweise jede Woche ein TicTacToe Spiel programmiert. Bemühe einfach mal die Suche.

Naja ganz so oft ist es auch nicht.

Warum machst Du es nicht ganz einfach..
Delphi-Quellcode:
if Button1.caption=Button2.Capion and Button2.caption=Button3.caption then....
Hättest Du das Spielfeld als Array hinterlegt ginge das natürlich einfacher.

Gruß
K-H
p.S.
hier gibt es auch ein paar Mädels ;-)

Sandy123 3. Apr 2011 21:04

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? :(

p80286 3. Apr 2011 21:11

AW: Probleme bei TicTacToe-Programm
 
Zitat:

Zitat von Sandy123 (Beitrag 1092823)
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? :(

Delphi-Quellcode:
if gewonnen then showmessage('gewonnen');
Gruß
K-H

Wie Du an Gewonnen kommst ist Dir klar?

himitsu 4. Apr 2011 07:46

AW: Probleme bei TicTacToe-Programm
 
Noch ein/zwei Tipps:

-
Delphi-Quellcode:
else showmessage('Spieler' + IntToStr(player) + 'Gibt es nicht!');
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

- 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?

Sandy123 4. Apr 2011 16:05

AW: Probleme bei TicTacToe-Programm
 
Zitat:

Zitat von p80286 (Beitrag 1092826)
Zitat:

Zitat von Sandy123 (Beitrag 1092823)
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? :(

Delphi-Quellcode:
if gewonnen then showmessage('gewonnen');
Gruß
K-H

Wie Du an Gewonnen kommst ist Dir klar?

wie komm ich darauf? :D sry hab gard den faden verloren :D

himitsu 4. Apr 2011 20:42

AW: Probleme bei TicTacToe-Programm
 
alle möglichen Gewinnmöglichkeiten abfragen und wenn Eine stimmt, dann hat man gewonnen.

Luckie 4. Apr 2011 21:01

AW: Probleme bei TicTacToe-Programm
 
Und wie man das machen kann, wurde dir in den vorherigen Beiträgen schon gezeigt.

Sandy123 5. Apr 2011 21:11

AW: Probleme bei TicTacToe-Programm
 
ich versteh das gard absolut nicht meine freund :(
tut mir leid :S

p80286 6. Apr 2011 12:40

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

hans ditter 6. Apr 2011 13:52

AW: Probleme bei TicTacToe-Programm
 
Hi, hatte ich auch Schwierigkeiten mit... :D

Also, hier mal ein Pseudo-Code:
Delphi-Quellcode:
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!');
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! ;)

LG; hans ditter

Sandy123 11. Apr 2011 11:26

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