AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Punkte bei Spiel gehen immer auf 0 zurück
Thema durchsuchen
Ansicht
Themen-Optionen

Punkte bei Spiel gehen immer auf 0 zurück

Ein Thema von Schnittcher · begonnen am 9. Sep 2009 · letzter Beitrag vom 9. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#1

Punkte bei Spiel gehen immer auf 0 zurück

  Alt 9. Sep 2009, 10:06
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
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#2

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

  Alt 9. Sep 2009, 10:14
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.
2. Account Sero
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#3

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

  Alt 9. Sep 2009, 10:16
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

  Alt 9. Sep 2009, 10:26
Hallo,

du hast was geändert ? -> was ?

Zeig noch mal den kompletten Code.

F5 hast du schon probiert ?


Heiko
Heiko
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#5

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

  Alt 9. Sep 2009, 10:28
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

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

  Alt 9. Sep 2009, 10:29
Hat es einen bestimmten Grund, warum du mit Interfaces arbeitest?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#7

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

  Alt 9. Sep 2009, 10:29
Hallo,

ja ich sollte es machen, also es wurde mir nur gesagt, dass ich es tun soll.

Gruß,
Schnittcher
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

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

  Alt 9. Sep 2009, 10:39
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#9

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

  Alt 9. Sep 2009, 10:40
Hallo,

total verworren der Code ;)

Setze Breakpoints und debugge das ( F5, F7, F8 )


Heiko

[edit=Luckie]Smilies deaktiviert. Mfg, Luckie[/edit]
Heiko
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#10

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

  Alt 9. Sep 2009, 10:42
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:
FPunkte:= Fpunkte + Zahlen.HolePunkte; Gruß,
Schnittcher
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 04:43 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