![]() |
dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
Muss morgen ein Projekt abgehen in Informatik.
Habe Tic Tac Toe programmiert, jedoch habe ich eine Frage und bitte deshalb um schnelle Antwort. Quellcode:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls, Menus; type TXOPosArray = array [1..3, 1..3] of Integer; type TForm1 = class(TForm) btnNewGame: TButton; btnResetScore: TButton; rgPlayFirst: TRadioGroup; gbScoreBoard: TGroupBox; lblX: TLabel; lblMinus: TLabel; lblO: TLabel; lblXScore: TLabel; lblColon: TLabel; lblOScore: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; RadioButton1: TRadioButton; RadioButton2: TRadioButton; ButtonClose: TButton; MainMenu1: TMainMenu; Hilfe1: TMenuItem; Anleitung1: TMenuItem; Informationen1: TMenuItem; procedure btnNewGameClick(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button6Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure Button9Click(Sender: TObject); procedure Gewinner; procedure ButtonCloseClick(Sender: TObject); procedure Anleitung1Click(Sender: TObject); procedure Informationen1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button1.Caption:='X'; Button1.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button1.Caption:='O'; Button1.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button2Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button2.Caption:='X'; Button2.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button2.Caption:='O'; Button2.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button3Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button3.Caption:='X'; Button3.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button3.Caption:='O'; Button3.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button4Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button4.Caption:='X'; Button4.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button4.Caption:='O'; Button4.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button5Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button5.Caption:='X'; Button5.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button5.Caption:='O'; Button5.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button6Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button6.Caption:='X'; Button6.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button6.Caption:='O'; Button6.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button7Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button7.Caption:='X'; Button7.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button7.Caption:='O'; Button7.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button8Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button8.Caption:='X'; Button8.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button8.Caption:='O'; Button8.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; procedure TForm1.Button9Click(Sender: TObject); begin if RadioButton1.Checked=True then begin Button9.Caption:='X'; Button9.Enabled:=False; RadioButton2.SetFocus; end else if RadioButton2.Checked=True then begin Button9.Caption:='O'; Button9.Enabled:=False; RadioButton1.SetFocus; end; Gewinner; end; //Gewinner festlegen procedure TForm1.Gewinner; begin //Kombination 1 if (Button1.Caption='X') and (Button2.Caption='X') and (Button3.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button1.Caption='O') and (Button2.Caption='O') and (Button3.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !'); end; //Kombination 2 if (Button4.Caption='X') and (Button5.Caption='X') and (Button6.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button4.Caption='O') and (Button5.Caption='O') and (Button6.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !'); end; //Kombination 3 if (Button7.Caption='X') and (Button8.Caption='X') and (Button9.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button7.Caption='O') and (Button8.Caption='O') and (Button9.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !'); end; //Kombination 4 if (Button1.Caption='X') and (Button4.Caption='X') and (Button7.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button1.Caption='O') and (Button4.Caption='O') and (Button7.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !'); end; //Kombination 5 if (Button2.Caption='X') and (Button5.Caption='X') and (Button8.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button2.Caption='O') and (Button5.Caption='O') and (Button8.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !'); end; //Kombination 6 if (Button3.Caption='X') and (Button6.Caption='X') and (Button9.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button3.Caption='O') and (Button6.Caption='O') and (Button9.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !');; end; //Kombination 7 if (Button1.Caption='X') and (Button5.Caption='X') and (Button9.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button1.Caption='O') and (Button5.Caption='O') and (Button9.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !'); end; //Kombination 8 if (Button3.Caption='X') and (Button5.Caption='X') and (Button7.Caption='X') then begin ShowMessage('Spieler 1 hat gewonnen !'); end; if (Button3.Caption='O') and (Button5.Caption='O') and (Button7.Caption='O') then begin ShowMessage('Spieler 2 hat gewonnen !'); end; end; procedure TForm1.btnNewGameClick(Sender: TObject); begin Button1.Caption:=''; Button2.Caption:=''; Button3.Caption:=''; Button4.Caption:=''; Button5.Caption:=''; Button6.Caption:=''; Button7.Caption:=''; Button8.Caption:=''; Button9.Caption:=''; Button1.Enabled:=True; Button2.Enabled:=True; Button3.Enabled:=True; Button4.Enabled:=True; Button5.Enabled:=True; Button6.Enabled:=True; Button7.Enabled:=True; Button8.Enabled:=True; Button9.Enabled:=True; end; procedure TForm1.ButtonCloseClick(Sender: TObject); begin Form1.Close end; procedure TForm1.Anleitung1Click(Sender: TObject); begin showmessage('Funktionsweise:' +#10#13+ '1)Kreuze an welcher Spieler anfängt!' +#10#13+ '2)Und Leg los!'); end; procedure TForm1.Informationen1Click(Sender: TObject); begin ShowMessage(' ©'); end; end. Die Prozedur: //Gewinner festlegen procedure TForm1.Gewinner; funktioniert nur wen ich bei jedem Tform1.Buttonclick oben ein Gewinner ganz am Ende stehen habe. Wie kann könnte ich das ändern ? |
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
So wie das Programm geschrieben ist, würde ich das so lassen. Ist ja auch legitim: Nach jedem Zug muss neu geprüft werden, ob es einen Gewinner gibt. (Die Methodennamen sind nicht so glücklich, aber das nur am Rande. Hat für die Funktion erstmal keinen Einfluss.)
|
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
|
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
//deleted
|
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
Sind neuerdings Komplettlösungen die Antwort auf einfache Fragen? :gruebel:
|
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
Du hast ja schon eine "Optimierung".
Man hätte auch in jedem ButtonClick den kompletten Auswertecode reinschreiben können. Du hast nur eine Auswertemethode, aber mußt sie natürlich überall nur noch aufrufen. (dort kommst'e nicht drumrum) Aber es geht noch mehr ... sie meinen letzen Tipp, da ganz unten. Das mit den "sinnvollen" Komponentennamen wurde schon gesagt. Wenn du die Buttons z.B. Feld11, Feld12, Feld13, Feld21, Feld22 usw. benennst, wird der Code verständlicher. Oder eben FeldObenLinks, FeldObenMitte, FeldObenRechts, FeldLinksMitte, FeldMitteMitte usw. PS: Wozu hast du eigentlich da ganz oben das Array deklariert? Bei der Gewinnerauswertung solltest du eventuell ein paar ELSE oder EXIT einbauen, denn was mag wohl passieren, wenn ich jetzt hier
Code:
Oben-Rechts ein X hinmach?
X X .
. . X . . X
Code:
Oder hier in der Mitte.
. X .
X . X . X . Zitat:
Delphi-Quellcode:
oder das Gegenteil (False)
if RadioButton1.Checked then
Delphi-Quellcode:
.
if not RadioButton1.Checked then
Und so als Tipp: Sender gibt die Komponente an, von wo diese Methode aufgerufen wurde. Wenn man also den Sender auswertet/benutzt, dann kann man für mehrere Buttons die selbe Methode benutzen und muß nich tausend Mal praktisch den selben Code hinschreiben (außer daß sich dann Button1, Button2, Button3 usw. unterscheiden)
Delphi-Quellcode:
procedure TForm1.ButtonClick(Sender: TObject);
begin if RadioButton1.Checked then begin (Sender as TButton).Caption:='X'; RadioButton2.Checked := True; // du willst ja eigentlich den "Check"-Status setzen und nicht den Eingabefokus end else // Das zweite IF .... es kann ja eh nur Einer von Beiden sein, also "entweder der Eine oder der Andere" ... da muß man nicht nochmal prüfen begin (Sender as TButton).Caption:='O'; RadioButton1.Checked := True; end; (Sender as TButton).Enabled:=False; // doppelter Code ... einmal reicht (du hattest bei beiden Spielern den selben Code drin) Gewinner; end; |
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
habe noch ne frage :)
unzwar wenn ich das eingebe steht ausdruckstyp muss BOOLEAN sein:
Delphi-Quellcode:
WIe kann ich das beheben?
procedure TForm1.zaehler;
begin xscore := 0; oscore := 0; if (lblGewinner.Caption := 'Spieler 1 hat gewonnen !') then begin xscore := xscore + 1; lblXScore.Caption := IntToStr(xscore); end; end; |
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
Zitat:
Doppelpunkt weg... |
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
Jo ok, aber wie kann man das sinvoll anders machen?
Ich will einen Zähler einbauen in das Spiel |
AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort
Was man Dir sagen wollte:
:= <- Zuweisung = <- Vergleich |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 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