AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

Ein Thema von Fazer · begonnen am 29. Okt 2012 · letzter Beitrag vom 29. Okt 2012
Antwort Antwort
Seite 1 von 3  1 23   
Fazer

Registriert seit: 29. Okt 2012
8 Beiträge
 
#1

dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 14:49
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 ?

Geändert von Fazer (29. Okt 2012 um 14:53 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 14:56
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.)
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 14:59
Crosspost DT
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 15:31
//deleted
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi (29. Okt 2012 um 15:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 15:34
Sind neuerdings Komplettlösungen die Antwort auf einfache Fragen?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.097 Beiträge
 
Delphi 12 Athens
 
#6

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 15:46
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:
X X .
. . X
. . X
Oben-Rechts ein X hinmach?
Code:
. X .
X . X
. X .
Oder hier in der Mitte.


Zitat:
if RadioButton1.Checked=True then
Du solltest besser nicht auf =TRUE prüfen.
if RadioButton1.Checked then oder das Gegenteil (False) 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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (29. Okt 2012 um 15:56 Uhr)
  Mit Zitat antworten Zitat
Fazer

Registriert seit: 29. Okt 2012
8 Beiträge
 
#7

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 16:57
habe noch ne frage
unzwar wenn ich das eingebe steht ausdruckstyp muss BOOLEAN sein:

Delphi-Quellcode:
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;
WIe kann ich das beheben?

Geändert von Fazer (29. Okt 2012 um 17:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von lbccaleb
lbccaleb

Registriert seit: 25. Mai 2006
Ort: Rostock / Bremen
2.037 Beiträge
 
Delphi 7 Enterprise
 
#8

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 17:00
if (lblGewinner.Caption := 'Spieler 1 hat gewonnen !') then
Das ist ne Zuweisung, kein Vergleich! Für if brauchst du aber ein Vergleich...

Doppelpunkt weg...
Martin
MFG Caleb
TheSmallOne (MediaPlayer)
Die Dinge werden berechenbar, wenn man die Natur einer Sache durchschaut hat (Blade)
  Mit Zitat antworten Zitat
Fazer

Registriert seit: 29. Okt 2012
8 Beiträge
 
#9

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 17:02
Jo ok, aber wie kann man das sinvoll anders machen?
Ich will einen Zähler einbauen in das Spiel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.535 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: dringende Frage zur : Tic Tac Toe Programmierung ! - Bitte um schnelle Antwort

  Alt 29. Okt 2012, 17:04
Was man Dir sagen wollte:
:= <- Zuweisung
= <- Vergleich
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz