Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Punkte bei Spiel gehen immer auf 0 zurück (https://www.delphipraxis.net/139965-punkte-bei-spiel-gehen-immer-auf-0-zurueck.html)

Schnittcher 9. Sep 2009 10:06


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:
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.
Gruß,
Schnittcher

BAMatze 9. Sep 2009 10:14

Re: Punkte bei Spiel gehen immer auf 0 zurück
 
Hallo versuche mal:

1.Vermutung
Delphi-Quellcode:
// ändere
lbPunkte.Caption:= IntToStr(Zahlen.HolePunkte);
// in
lbPunkte.Caption:= IntToStr(FPunkte);
2. Vermutung:
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.

Schnittcher 9. Sep 2009 10:16

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

hoika 9. Sep 2009 10:26

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

Schnittcher 9. Sep 2009 10:28

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:
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.
Gruß,
Schnittcher

Luckie 9. Sep 2009 10:29

Re: Punkte bei Spiel gehen immer auf 0 zurück
 
Hat es einen bestimmten Grund, warum du mit Interfaces arbeitest?

Schnittcher 9. Sep 2009 10:29

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

Luckie 9. Sep 2009 10:39

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.

hoika 9. Sep 2009 10:40

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]

Schnittcher 9. Sep 2009 10:42

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:
 
FPunkte:= Zahlen.HolePunkte;
Das muss so sein:
Delphi-Quellcode:
FPunkte:= Fpunkte + Zahlen.HolePunkte;
Gruß,
Schnittcher


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:43 Uhr.
Seite 1 von 2  1 2      

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