Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem beim Punktezählen (https://www.delphipraxis.net/6374-problem-beim-punktezaehlen.html)

Wolverine 8. Jul 2003 18:11


Problem beim Punktezählen
 
Tach zusammen.
Wieder mal ein Prob.
Ich will den Wert einer Variablen bei einem bestimmten Ereigniss, Form1.Visible=True, immer um 1 erhöhen.
Das Problem ist, wenn das Formular 4 mal angezeigt wird, ändert sich der Wert trotzdem nur um 1, er sollte sich dann aber um z.B. 4 erhöhen!!!

Quellcode lautet:

Delphi-Quellcode:
if (Form1.Visible=True) then
begin
   scorespieler1 := scorespieler1 + 1;
   Form4.Label1.Caption:='Score von Spieler 1= '+IntToStr(scorespieler1);
 end;
Ist der Code so richtig oder fehlt etwas???
Was muss ich, wenn was fehlt, wie ändern???
Bräuchte die Lösung wiedermal schnell aber das ist hier ja Standard ;)

flomei 8. Jul 2003 18:14

Re: Problem beim Punktezählen
 
Besser wäre vielleicht:
Delphi-Quellcode:
Inc(scorespieler1);
Form4.Refresh;
:?:

MfG Florian :hi:

Wolverine 8. Jul 2003 18:18

Re: Problem beim Punktezählen
 
Hi flomei.
Deine Antwort ist zwar gut und schön aber leider hilft sie mir nicht weiter!
Dann wird das Programm noch nicht mal compiliert ;) und folgende Fehlermeldung kommt:
[Fehler] Unit3.pas(105): Inkompatible Typen: 'String' und 'procedure, untyped pointer or untyped parameter'

Was´n nu schon wieder los :?: :?: :?: *nixcheck :oops:

Daniel B 8. Jul 2003 18:18

Re: Problem beim Punktezählen
 
Hallo,
Zitat:

Zitat von Wolverine
Delphi-Quellcode:
if (Form1.Visible=True) then

Delphi-Quellcode:
if Form1.Visible then
und
Delphi-Quellcode:
Inc(Spieler1);
würde auch reichen.

Ich welcher Prozedur wird denn das ganze aufgerufen?

Grüsse, Daniel :hi:

Wolverine 8. Jul 2003 18:22

Re: Problem beim Punktezählen
 
Der ganze Stuff wird in einer Timerprozedur aufgerufen.
Wo soll ich denn das "Inc(Spieler1)" hinsetzen???

Daniel B 8. Jul 2003 18:25

Re: Problem beim Punktezählen
 
Zitat:

Zitat von Wolverine
Wo soll ich denn das "Inc(Spieler1)" hinsetzen???

Delphi-Quellcode:
scorespieler1 := scorespieler1 + 1;
Entspricht auch:
Delphi-Quellcode:
Inc(ScoreSpieler1);
Hmm, Timer, ist so ne sache...
Mach irgendwo eine globale Integervariable, meintwegen auf Form1. Auf die kannst Du von jeder Unit zugreifen! Und im OnShow von Form4, zählst Du nur noch die Var hoch. Mach mMn. viel mehr Sinn als ständig mit nem Timer zu prüfen...

Grüsse, Daniel :hi:

Wolverine 8. Jul 2003 18:31

Re: Problem beim Punktezählen
 
Das mit der Globalen variablen geht nun leider nicht mehr.

und das "Inc(scorespieler1)" anstelle von "scorespieler1:=scorespieler1+1" ???

Na gut ich probier es aus und sag dann ob es funzt!!!

Wolverine 8. Jul 2003 18:52

Re: Problem beim Punktezählen
 
Leider klappt es immer noch nicht so ganz.
Ich glaub ich hau mal den kompletten Code aus der Unit hier rein ^^.
Könnte etwas lang werden aber macht nix!!!

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm3 = class(TForm)
    Timer1: TTimer;
    Button1: TButton;
    procedure Timer1Timer(Sender: TObject);
    procedure FormShow(Sender: TObject);

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;
  counter: byte;
  scorespieler1, scorespieler2: integer;



implementation

uses Movement, Unit2, Unit4;

{$R *.dfm}

procedure TForm3.Timer1Timer(Sender: TObject);
begin
dec(counter);
Button1.Caption:='Noch '+IntToStr(counter)+' Sekunden';



if (counter=0)
and (Form1.Visible=True)
or (counter=0)
and (Form2.Visible=True)
then
 begin
  Timer1.Enabled:=False;
  counter:=0;
  Form1.Visible:=False;
  Form2.Visible:=False;
  Form4.Visible:=True;
  //Application.Terminate;
 end;

{Diese Bedingung ruft Form 2 auf, versteckt Form1 und Deaktiviert den Timer
wenn der Zähler =0 UND Form1 sichtbar ist -> Start des Spiels}
if (counter=0)
and (Form1.Visible=True)
then
 begin
  Timer1.Enabled:=false;
  Form2.Visible:=true;
  Form1.Visible:=False;
 end;

{Aktiviert den Timer und setzt den Zähler auf 30, wenn Form2 sichtbar, der Timer
deaktiviert UND der Zähler =0 ist}
if (Form2.Visible=True)
and (Timer1.Enabled=false)
and (Counter = 0)
then
 begin
  Timer1.Enabled:=True;
  counter := 30;
 end;

{Hier werden der Timer deaktiviert, Form1 sichtbar und Form2 versteckt, wenn
Form2 sichtbar, der Zähler =0 UND Form1 versteckt ist}
if (Form2.Visible=True)
and (Counter = 0)
and (Form1.Visible=False)
then
 begin
  Timer1.Enabled:=false;
  Form1.Visible:=true;
  Form2.Visible:=false;
 end;

{Timer wird aktiviert und der Zähler auf 30 gesetzt, wenn Form2 versteckt, Form1
sichtbar UND der Zähler =0 ist}
if (Form2.Visible=false)
and (Form1.Visible=true)
and (counter=0)
then
 begin
   Timer1.Enabled:=True;
   Counter:=30;
 end;

if Form1.Visible then
begin
Inc(scorespieler1);
Form4.Label1.Caption:='Score von Spieler 1= '+IntToStr(scorespieler1);
end;

end;


procedure TForm3.FormShow(Sender: TObject);
begin


if
    (Form1.Kugelrot.Left=40)
  and
    (Form1.Kugelrot.Top=40)
  and
    (Form1.Kugeblau.Left=480)
  and
    (Form1.Kugeblau.Top=296)
  then
begin
counter:=30;
end;
if
    (Form2.Kugelrot.Left=40)
  and
    (Form2.Kugelrot.Top=40)
  and
    (Form2.Kugeblau.Left=480)
  and
    (Form2.Kugeblau.Top=296)
  then
begin
counter:=30;
end;
end;

end.
So, nun viel Spass beim Code zerpflücken, aber nich zu dolle ich brauch den noch :wink: !!!
Hoffe damit könnt Ihr mir jetzt aber richtig helfen.

Blizzard 16. Jul 2003 12:58

Re: Problem beim Punktezählen
 
mit nem timer wird das wohl, wenn ich dich richtig verstehe, ned funktionieren.
ich würd mal versuchen das inc(scorespieler1) in die onshow oder onactivate prozedur von form1 zu stellen

also so oder so ähnlich
Delphi-Quellcode:
procedure tform1.form1activate(sender: Tobject);
begin
 if form3.timer.enabled then inc(scorespieler1);
end;
blizzard

MrSpock 17. Jul 2003 07:03

Re: Problem beim Punktezählen
 
Hallo Blizzard,

mir ist folgendes augefallen:

Delphi-Quellcode:
if (counter=0)
and (Form1.Visible=True)
or (counter=0)
and (Form2.Visible=True)
ist m.E. falsch geklammert. Es müsste so aussehen:
Delphi-Quellcode:
if ((counter=0)
and (Form1.Visible=True))
or ((counter=0)
and (Form2.Visible=True))
liegt es vielleicht daran, dass der entsprechende then Teil deshalb nie ausgeführt wird?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 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