![]() |
Punkte bei Spiel gehen immer auf 0 zurück
Hallo,
kann mir jemand sagen wieso ich hier immer nur einen Punkt bekomme?
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, zahlen; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; edZahl1: TEdit; edZahl2: TEdit; edZahl3: TEdit; Button1: TButton; lbPunkte: TLabel; procedure Button1Click(Sender: TObject); private FPunkte: integer; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Zahlen: IZahlen; SpielerZahlen: TMeineZahlen; begin SpielerZahlen[0] := StrToInt(edZahl1.Text); SpielerZahlen[1] := StrToInt(edZahl2.Text); SpielerZahlen[2] := StrToInt(edZahl3.Text); Zahlen := TBackupClassesFactory.Zahlen; Zahlen.SpielerZahl := SpielerZahlen; Zahlen.set_ComputerZahlen; FPunkte:= Zahlen.HolePunkte; Zahlen.vergleichen; Zahlen.get_Punkte(FPunkte); lbPunkte.Caption:= IntToStr(Zahlen.HolePunkte); end; end.
Delphi-Quellcode:
Gruß,
unit zahlen;
interface type TMeineZahlen = array[0..2] of Integer; IZahlen = interface(IInterface) ['{EAA23356-FA98-49A6-B3D3-62362FF46485}'] procedure set_ComputerZahlen; procedure set_SpielerZahl(const Value: TMeineZahlen); property SpielerZahl: TMeineZahlen write set_SpielerZahl; function vergleichen: string; function get_Punkte(const Punkte: Integer): Integer; function get_HolePunkte: Integer; property HolePunkte: Integer read get_HolePunkte; end; TBackupClassesFactory = class(TObject) public class function Zahlen: IZahlen; end; implementation type TZahlen = class(TInterfacedObject, IZahlen) private FComputerZahl1, FComputerZahl2, FComputerZahl3, FSpielerZahl1, FSpielerZahl2, FSpielerZahl3: Integer; FHolePunkte: Integer; FPunkte, Fpunkte2: Integer; procedure set_ComputerZahlen; protected function get_HolePunkte: Integer; function get_Punkte(const Punkte: Integer): Integer; procedure set_SpielerZahl(const Value: TMeineZahlen); function vergleichen: string; property HolePunkte: Integer read get_HolePunkte; property SpielerZahl: TMeineZahlen write set_SpielerZahl; end; procedure TZahlen.set_ComputerZahlen; begin randomize; FComputerZahl1 := 1; //random(6); FComputerZahl2 := random(6); FComputerZahl3 := random(6); end; procedure TZahlen.set_SpielerZahl(const Value: TMeineZahlen); begin FSpielerZahl1 := Value[0]; FSpielerZahl2 := Value[1]; FSpielerZahl3 := Value[2]; end; function TZahlen.vergleichen: string; var punkte: integer; begin if FSpielerZahl1 = FComputerZahl1 then begin FPunkte := FPunkte + 1; Result := 'Sie haben gewonnen!'; end else Result := 'Sie haben verloren'; // TODO -cMM: TZahlen.vergleichen default body inserted end; function TZahlen.get_Punkte(const Punkte: Integer): Integer; begin FPunkte := FPunkte + Punkte; end; function TZahlen.get_HolePunkte: Integer; begin Result := FPunkte; end; class function TBackupClassesFactory.Zahlen: IZahlen; begin Result := TZahlen.Create; end; end. Schnittcher |
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hallo versuche mal:
1.Vermutung
Delphi-Quellcode:
2. Vermutung:
// ändere
lbPunkte.Caption:= IntToStr(Zahlen.HolePunkte); // in lbPunkte.Caption:= IntToStr(FPunkte); deine Deklarartion Zahlen: IZahlen global und nicht Lokal machen, weil die lokale nach dem Buttonklick wieder verschwindet und somit beim erneuten Klicken wieder von vorne anfängt zu zählen. |
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hallo,
ich denke deine 2. Vermutung stimmt, das Problem hatte ich doch mal bei etwas anderem. Ich versuche es. Danke. Edit: Es geht beides nicht. :( Gruß, Schnittcher |
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hallo,
du hast was geändert ? -> was ? Zeig noch mal den kompletten Code. F5 hast du schon probiert ? Heiko |
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hallo,
ich habe das geändert, was BAMatze gesagt hat.
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, zahlen; type TForm1 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; edZahl1: TEdit; edZahl2: TEdit; edZahl3: TEdit; Button1: TButton; lbPunkte: TLabel; procedure Button1Click(Sender: TObject); private FPunkte: integer; Zahlen: IZahlen; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var SpielerZahlen: TMeineZahlen; begin SpielerZahlen[0] := StrToInt(edZahl1.Text); SpielerZahlen[1] := StrToInt(edZahl2.Text); SpielerZahlen[2] := StrToInt(edZahl3.Text); Zahlen := TBackupClassesFactory.Zahlen; Zahlen.SpielerZahl := SpielerZahlen; Zahlen.set_ComputerZahlen; FPunkte:= Zahlen.HolePunkte; Zahlen.vergleichen; Zahlen.get_Punkte(FPunkte); lbPunkte.Caption:= IntToStr(Zahlen.HolePunkte); end; end.
Delphi-Quellcode:
Gruß,
unit zahlen;
interface type TMeineZahlen = array[0..2] of Integer; IZahlen = interface(IInterface) ['{EAA23356-FA98-49A6-B3D3-62362FF46485}'] procedure set_ComputerZahlen; procedure set_SpielerZahl(const Value: TMeineZahlen); property SpielerZahl: TMeineZahlen write set_SpielerZahl; function vergleichen: string; function get_Punkte(const Punkte: Integer): Integer; function get_HolePunkte: Integer; property HolePunkte: Integer read get_HolePunkte; end; TBackupClassesFactory = class(TObject) public class function Zahlen: IZahlen; end; implementation type TZahlen = class(TInterfacedObject, IZahlen) private FComputerZahl1, FComputerZahl2, FComputerZahl3, FSpielerZahl1, FSpielerZahl2, FSpielerZahl3: Integer; FPunkte: Integer; procedure set_ComputerZahlen; protected function get_HolePunkte: Integer; function get_Punkte(const Punkte: Integer): Integer; procedure set_SpielerZahl(const Value: TMeineZahlen); function vergleichen: string; property HolePunkte: Integer read get_HolePunkte; property SpielerZahl: TMeineZahlen write set_SpielerZahl; end; procedure TZahlen.set_ComputerZahlen; begin randomize; FComputerZahl1 := 1; //random(6); FComputerZahl2 := random(6); FComputerZahl3 := random(6); end; procedure TZahlen.set_SpielerZahl(const Value: TMeineZahlen); begin FSpielerZahl1 := Value[0]; FSpielerZahl2 := Value[1]; FSpielerZahl3 := Value[2]; end; function TZahlen.vergleichen: string; var punkte: integer; begin if FSpielerZahl1 = FComputerZahl1 then begin FPunkte := FPunkte + 1; Result := 'Sie haben gewonnen!'; end else Result := 'Sie haben verloren'; // TODO -cMM: TZahlen.vergleichen default body inserted end; function TZahlen.get_Punkte(const Punkte: Integer): Integer; begin FPunkte := FPunkte + Punkte; end; function TZahlen.get_HolePunkte: Integer; begin Result := FPunkte; end; class function TBackupClassesFactory.Zahlen: IZahlen; begin Result := TZahlen.Create; end; end. Schnittcher |
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hat es einen bestimmten Grund, warum du mit Interfaces arbeitest?
|
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hallo,
ja ich sollte es machen, also es wurde mir nur gesagt, dass ich es tun soll. Gruß, Schnittcher |
Re: Punkte bei Spiel gehen immer auf 0 zurück
Das ist eigentlich kein Grund. Ich frage nur, weil du dir mit Interfaces eine zusätzliche Komplexibilität ins Programm holst, die eventuell überflüssig ist und zu Fehlern führen kann.
|
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hallo,
total verworren der Code ;) Setze Breakpoints und debugge das ( F5, F7, F8 ) Heiko [edit=Luckie]Smilies deaktiviert. Mfg, Luckie[/edit] |
Re: Punkte bei Spiel gehen immer auf 0 zurück
Hallo,
ich soll lernen mit Interfaces zu arbeiten. Ich bin in einer Ausbildung und deswegen mache ich das mit Interfaces. Aber ich habe meinen Fehler gefunden. :)
Delphi-Quellcode:
Das muss so sein:FPunkte:= Zahlen.HolePunkte;
Delphi-Quellcode:
Gruß,
FPunkte:= Fpunkte + Zahlen.HolePunkte;
Schnittcher |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:47 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 by Thomas Breitkreuz