|
Antwort |
Registriert seit: 3. Dez 2007 3 Beiträge |
#1
Hallo Delphi Community
Das ist meine erste Frage hier im Forum Meine Kenntnisse in Delphi: Fast gar keine, gerade vor 2 Wochen angefangen zu lernen. So jetzt zu meinem Problem, ah p.S. schreibe mit Delphi 3, war im Buch mit drin... Ich hab ein Spiel versucht zu programmieren, die meisten von euch werden das Spiel kennen: Tic Tac Toe Bei mir klappt alles, außer meine Auswertung... Wenn ich das Spiel starte und dann in der 4 Form bin, steht gleich, dass ich gewonnen habe... Quellcode für die Auswertung:
Delphi-Quellcode:
Wie gesagt, hab noch kein "Wortschatz" in Delphi...
procedure Auswertung;
var Win: Integer; begin If (Form4.Label6.Caption = Form4.Label7.Caption) and (Form4.Label7.Caption = Form4.Label8.Caption) or (Form4.Label9.Caption = Form4.Label10.Caption) and (Form4.Label10.Caption = Form4.Label11.Caption) or (Form4.Label12.Caption = Form4.Label13.Caption) and (Form4.Label13.caption = Form4.Label4.Caption) or (Form4.Label6.Caption = Form4.Label9.Caption) and (Form4.Label9.Caption = Form4.Label12.caption) or (Form4.Label7.Caption = Form4.Label10.Caption) and (Form4.Label10.Caption = Form4.Label13.Caption) or (Form4.Label8.Caption = Form4.Label11.Caption) and (Form4.Label11.Caption = Form4.Label14.Caption) or (Form4.Label6.Caption = Form4.Label10.Caption) and (Form4.Label10.Caption = Form4.Label14.Caption) or (Form4.Label8.Caption = Form4.Label11.Caption) and (Form4.Label11.Caption = Form4.Label12.Caption) then begin Win := Application.MessageBox('Du hast Gewonnen', 'Gewonnen', 0+64); if Win = IDOK then ; Form4.button3.Visible := false; Form4.button4.Visible := false; Form4.button5.Visible := false; Form4.button6.Visible := false; Form4.button7.Visible := false; Form4.button8.Visible := false; Form4.button9.Visible := false; Form4.button10.Visible := false; Form4.button11.Visible := false; end; end; Wahrscheinlich wird dieser Auszug euch nichts sagen... also komm ich mit der ganzen UNIT 4 an...
Delphi-Quellcode:
Darüber hinaus weiß ich nicht wo ich die Procedure rein schreiben soll, wenn ich z.b. in den Button rein schreibe und bei dem ComputerZug im Until teil, dann gewinn ich das Spiel bevor ich piep sagen kann... Brauche Hilfe..
unit Unit4;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm4 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5: TButton; Button6: TButton; Button7: TButton; Button8: TButton; Button9: TButton; Button10: TButton; Button11: TButton; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; Label10: TLabel; Label11: TLabel; Label12: TLabel; Label13: TLabel; Label14: TLabel; procedure FormPaint(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure FormCreate(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 Button10Click(Sender: TObject); procedure Button11Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form4: TForm4; Spieleein : Array[1..4] of Boolean; PCcheck,SPcheck: boolean; //PC oder SPieler dran Buttonwahl: integer; // Pc wählt im Random ein Button aus implementation uses unit1, unit2, unit3; {$R *.DFM} procedure Auswertung; var Win: Integer; begin If (Form4.Label6.Caption = Form4.Label7.Caption) and (Form4.Label7.Caption = Form4.Label8.Caption) or (Form4.Label9.Caption = Form4.Label10.Caption) and (Form4.Label10.Caption = Form4.Label11.Caption) or (Form4.Label12.Caption = Form4.Label13.Caption) and (Form4.Label13.caption = Form4.Label4.Caption) or (Form4.Label6.Caption = Form4.Label9.Caption) and (Form4.Label9.Caption = Form4.Label12.caption) or (Form4.Label7.Caption = Form4.Label10.Caption) and (Form4.Label10.Caption = Form4.Label13.Caption) or (Form4.Label8.Caption = Form4.Label11.Caption) and (Form4.Label11.Caption = Form4.Label14.Caption) or (Form4.Label6.Caption = Form4.Label10.Caption) and (Form4.Label10.Caption = Form4.Label14.Caption) or (Form4.Label8.Caption = Form4.Label11.Caption) and (Form4.Label11.Caption = Form4.Label12.Caption) then begin Win := Application.MessageBox('Du hast Gewonnen', 'Gewonnen', 0+64); if Win = IDOK then ; Form4.button3.Visible := false; Form4.button4.Visible := false; Form4.button5.Visible := false; Form4.button6.Visible := false; Form4.button7.Visible := false; Form4.button8.Visible := false; Form4.button9.Visible := false; Form4.button10.Visible := false; Form4.button11.Visible := false; end; end; procedure Spieleinstellung; // Wichtig für Form3 begin if (Pczug = true) and (X = true) then // Im Klartext, es gibt 4 Möglichkeiten, erst PC dran, und Spieler 1 hat X, dann PC und SP1 hat O usw... Spieleein[1] := true; if (Pczug = true) and (O = true) then Spieleein[2] := true; if (SP1 = true) and (X = true) then Spieleein[3] := true; If (SP1 = true) and (O = true) then Spieleein[4] := true; end; procedure ComputerZug; // Die Technik^^ begin if (Spieleein[1] = true) and (PCcheck = false) then begin repeat ButtonWahl:= Random (9) + 1; // Random für ButtonWahl case ButtonWahl of 1: if Form4.Button3.visible = true then begin Form4.button3.visible := false; Form4.label6.caption := 'O'; SPcheck := false; PCcheck := true; end; 2: if Form4.Button4.visible = true then begin Form4.button4.visible := false; Form4.label7.caption := 'O'; SPcheck := false; PCcheck := true; end; 3: if Form4.Button5.visible = true then begin Form4.button5.visible := false; Form4.label8.caption := 'O'; SPcheck := false; PCcheck := true; end; 4: if Form4.Button6.visible = true then begin Form4.button6.visible := false; Form4.label9.caption := 'O'; SPcheck := false; PCcheck := true; end; 5: if Form4.Button7.visible = true then begin Form4.button7.visible := false; Form4.label10.caption := 'O'; SPcheck := false; PCcheck := true; end; 6: if Form4.Button8.visible = true then begin Form4.button8.visible := false; Form4.label11.caption := 'O'; SPcheck := false; PCcheck := true; end; 7: if Form4.Button9.visible = true then begin Form4.button9.visible := false; Form4.label12.caption := 'O'; SPcheck := false; PCcheck := true; end; 8: if Form4.Button10.visible = true then begin Form4.button10.visible := false; Form4.label13.caption := 'O'; SPcheck := false; PCcheck := true; end; 9: if Form4.Button11.visible = true then begin Form4.button11.visible := false; Form4.label14.caption := 'O'; SPcheck := false; PCcheck := true; end; end; until PCcheck = true; end; if (Spieleein[2] = true) and (PCcheck = false)then begin repeat ButtonWahl:= Random (9) + 1; // Random für ButtonWahl case ButtonWahl of 1: if Form4.Button3.visible = true then begin Form4.button3.visible := false; Form4.label6.caption := 'X'; SPcheck := false; PCcheck := true; end; 2: if Form4.Button4.visible = true then begin Form4.button4.visible := false; Form4.label7.caption := 'X'; SPcheck := false; PCcheck := true; end; 3: if Form4.Button5.visible = true then begin Form4.button5.visible := false; Form4.label8.caption := 'X'; SPcheck := false; PCcheck := true; end; 4: if Form4.Button6.visible = true then begin Form4.button6.visible := false; Form4.label9.caption := 'X'; SPcheck := false; PCcheck := true; end; 5: if Form4.Button7.visible = true then begin Form4.button7.visible := false; Form4.label10.caption := 'X'; SPcheck := false; PCcheck := true; end; 6: if Form4.Button8.visible = true then begin Form4.button8.visible := false; Form4.label11.caption := 'X'; SPcheck := false; PCcheck := true; end; 7: if Form4.Button9.visible = true then begin Form4.button9.visible := false; Form4.label12.caption := 'X'; SPcheck := false; PCcheck := true; end; 8: if Form4.Button10.visible = true then begin Form4.button10.visible := false; Form4.label13.caption := 'X'; SPcheck := false; PCcheck := true; end; 9: if Form4.Button11.visible = true then begin Form4.button11.visible := false; Form4.label14.caption := 'X'; SPcheck := false; PCcheck := true; end; end; until PCcheck = true; end; if (Spieleein[3]= true) and (SPcheck =true) then begin repeat ButtonWahl:= Random (9) + 1; // Random für ButtonWahl case ButtonWahl of 1: if Form4.Button3.visible = true then begin Form4.Button3.visible := false; Form4.label6.caption := 'O'; SPcheck := false; PCcheck := true; end; 2: if Form4.Button4.visible = true then begin Form4.Button4.visible := false; Form4.label7.caption := 'O'; SPcheck := false; PCcheck := true; end; 3: if Form4.Button5.visible = true then begin Form4.Button5.visible := false; Form4.label8.caption := 'O'; SPcheck := false; PCcheck := true; end; 4: if Form4.Button6.visible = true then begin Form4.Button6.visible := false; Form4.label9.caption := 'O'; SPcheck := false; PCcheck := true; end; 5: if Form4.Button7.visible = true then begin Form4.Button7.visible := false; Form4.label10.caption := 'O'; SPcheck := false; PCcheck := true; end; 6: if Form4.Button8.visible = true then begin Form4.Button8.visible := false; Form4.label11.caption := 'O'; SPcheck := false; PCcheck := true; end; 7: if Form4.Button9.visible = true then begin Form4.Button9.visible := false; Form4.label12.caption := 'O'; SPcheck := false; PCcheck := true; end; 8: if Form4.Button10.visible = true then begin Form4.Button10.visible := false; Form4.label13.caption := 'O'; SPcheck := false; PCcheck := true; end; 9: if Form4.Button11.visible = true then begin Form4.Button11.visible := false; Form4.label14.caption := 'O'; SPcheck := false; PCcheck := true; end; end; until PCcheck = true; end; if (Spieleein[4]= true) and (SPcheck =true) then begin repeat ButtonWahl:= Random (9) + 1; // Random für ButtonWahl case ButtonWahl of 1: if Form4.Button3.visible = true then begin Form4.Button3.visible := false; Form4.label6.caption := 'X'; SPcheck := false; PCcheck := true; end; 2: if Form4.Button4.visible = true then begin Form4.Button4.visible := false; Form4.label7.caption := 'X'; SPcheck := false; PCcheck := true; end; 3: if Form4.Button5.visible = true then begin Form4.Button5.visible := false; Form4.label8.caption := 'X'; SPcheck := false; PCcheck := true; end; 4: if Form4.Button6.visible = true then begin Form4.Button6.visible := false; Form4.label9.caption := 'X'; SPcheck := false; PCcheck := true; end; 5: if Form4.Button7.visible = true then begin Form4.Button7.visible := false; Form4.label10.caption := 'X'; SPcheck := false; PCcheck := true; end; 6: if Form4.Button8.visible = true then begin Form4.Button8.visible := false; Form4.label11.caption := 'X'; SPcheck := false; PCcheck := true; end; 7: if Form4.Button9.visible = true then begin Form4.Button9.visible := false; Form4.label12.caption := 'X'; SPcheck := false; PCcheck := true; end; 8: if Form4.Button10.visible = true then begin Form4.Button10.visible := false; Form4.label13.caption := 'X'; SPcheck := false; PCcheck := true; end; 9: if Form4.Button11.visible = true then begin Form4.Button11.visible := false; Form4.label14.caption := 'X'; SPcheck := false; PCcheck := true; end; end; until PCcheck = true; end; end; procedure TForm4.FormPaint(Sender: TObject); begin //waagerechte canvas.MoveTo (50, 132); Canvas.LineTo (232, 132); canvas.MoveTo (50, 188); Canvas.LineTo (232, 188); // Senkrecht canvas.MoveTo (108, 80); canvas.LineTo (108, 240); canvas.MoveTo (172, 80); canvas.LineTo (172, 240); label1.caption := 'Spieler 1: '; label2.caption := Spieler1name ; label3.caption := 'Spieler 2:'; label4.caption := 'Computer'; Spieleinstellung; ComputerZug; end; procedure TForm4.FormCreate(Sender: TObject); var Nrrr: Integer; begin for Nrrr := 1 to 4 do Spieleein[Nrrr] := false; PCcheck := false; SPcheck := false; end; procedure TForm4.Button2Click(Sender: TObject); var Knopf: Integer; begin Knopf := Application.MessageBox ('Sind Sie sicher?','Beenden', 1+32); if Knopf = IDOK then close; if Knopf <> IDCANCEL then ; end; procedure TForm4.Button1Click(Sender: TObject); begin refresh end; procedure TForm4.Button3Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button3.visible := false; form4.label6.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button3.visible := false; form4.label6.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button3.visible := false; form4.label6.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button3.visible := false; form4.label6.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button4Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button4.visible := false; form4.label7.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button4.visible := false; form4.label7.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button4.visible := false; form4.label7.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button4.visible := false; form4.label7.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button5Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button5.visible := false; form4.label8.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button5.visible := false; form4.label8.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button5.visible := false; form4.label8.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button5.visible := false; form4.label8.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button6Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button6.visible := false; form4.label9.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button6.visible := false; form4.label9.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button6.visible := false; form4.label9.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button6.visible := false; form4.label9.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button7Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button7.visible := false; form4.label10.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button7.visible := false; form4.label10.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button7.visible := false; form4.label10.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button7.visible := false; form4.label10.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button8Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button8.visible := false; form4.label11.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button8.visible := false; form4.label11.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button8.visible := false; form4.label11.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button8.visible := false; form4.label11.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button9Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button9.visible := false; form4.label12.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button9.visible := false; form4.label12.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button9.visible := false; form4.label12.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button9.visible := false; form4.label12.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button10Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button10.visible := false; form4.label13.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button10.visible := false; form4.label13.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button10.visible := false; form4.label3.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button10.visible := false; form4.label3.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; procedure TForm4.Button11Click(Sender: TObject); begin if Spieleein[1]= true then begin form4.button11.visible := false; form4.label14.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[2]= true then begin form4.button11.visible := false; form4.label14.caption := 'O'; SPCheck:= true; PCcheck := false; end; if Spieleein[3]= true then begin form4.button11.visible := false; form4.label14.caption := 'X'; SPCheck:= true; PCcheck := false; end; if Spieleein[4]= true then begin form4.button11.visible := false; form4.label14.caption := 'O'; SPCheck:= true; PCcheck := false; end; end; end. Danke |
Zitat |
Registriert seit: 29. Mai 2002 37.621 Beiträge Delphi 2006 Professional |
#2
Mit dem Ansatz mahst du es dir unnötig schwer. Guck dir mal mein Tutorial zu Container-Klassen an.
und bitte poste hier nicht 800 Zeilen Code, sondern beschränke dich auf das nötigste.
Michael
Ein Teil meines Codes würde euch verunsichern. |
Zitat |
Registriert seit: 2. Mär 2004 5.508 Beiträge Delphi 5 Professional |
#3
Hallo erstmal.
Du hast einen grossen Fehler gemacht: du verwendest normale Funktionen und Prozeduren anstelle von Methoden. Deshalb steht bestimmt 100 Mal in deinem Sourcecode "Form4.Irgendetwas". Hier erstmal der schlechte Code:
Delphi-Quellcode:
Und so wär's viel besser:
procedure Auswertung;
begin ..... Form4.button3.Visible := false; Form4.button4.Visible := false; Form4.button5.Visible := false; ...
Delphi-Quellcode:
Ich würde vorschlagen, du schreibst alles um, bis die ganzen "Form4" alle verschwinden (mit Ausnahme von var Form4:TForm4.
TForm4 = class(TForm)
.... private { Private-Deklarationen } // private Variablen Spieleein : Array[1..4] of Boolean; PCcheck,SPcheck: boolean; //PC oder SPieler dran Buttonwahl: integer; // Pc wählt im Random ein Button aus // private Methode(n) procedure Auswertung; // *** <========== public { Public-Deklarationen } end; ... procedure TForm4.Auswertung; // *** <========== begin .... // und jetzt muss das "Form4" weg !! // das spart viel Schreibarbeit und hat auch andere Vorteile button3.Visible := false; button4.Visible := false; button5.Visible := false;
Andreas
|
Zitat |
Registriert seit: 26. Mär 2007 Ort: Klingenstadt 541 Beiträge Delphi 2007 Enterprise |
#4
Hallo!
Mal ganz abgesehen davon, dass Dein Code unnötig lang und unleserlich ist (Zeilenumbrüche, Einrückungen, etc.), Du die Komponenten auf Deiner Form nicht vernünftig benennst, etc. p.p. mal zu Deiner eigentlichen Frage: Du musst die zusammengehörigen logischen Ausdrücke in Klammern schliessen, in etwa so:
Delphi-Quellcode:
Man beachte die von mir zusätzlich gesetzten Klammern! (gibt es hier nicht sowas wie ein [highlight]-TAG um in Sourcecode Stellen zu markieren?)
If ( (Form4.Label6.Caption = Form4.Label7.Caption) and (Form4.Label7.Caption = Form4.Label8.Caption) )
or ( (Form4.Label9.Caption = Form4.Label10.Caption) and (Form4.Label10.Caption = Form4.Label11.Caption) ) or { ... }
Es ist zu wahr um schön zu sein...
|
Zitat |
Ansicht |
Linear-Darstellung |
Zur Hybrid-Darstellung wechseln |
Zur Baum-Darstellung wechseln |
ForumregelnEs 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
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
LinkBack URL |
About LinkBacks |