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:
Ist der Code so richtig oder fehlt etwas???
if (Form1.Visible=True) then
begin scorespieler1 := scorespieler1 + 1; Form4.Label1.Caption:='Score von Spieler 1= '+IntToStr(scorespieler1); end; Was muss ich, wenn was fehlt, wie ändern??? Bräuchte die Lösung wiedermal schnell aber das ist hier ja Standard ;) |
Re: Problem beim Punktezählen
Besser wäre vielleicht:
Delphi-Quellcode:
:?:
Inc(scorespieler1);
Form4.Refresh; MfG Florian :hi: |
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: |
Re: Problem beim Punktezählen
Hallo,
Zitat:
Delphi-Quellcode:
und
if Form1.Visible then
Delphi-Quellcode:
würde auch reichen.
Inc(Spieler1);
Ich welcher Prozedur wird denn das ganze aufgerufen? Grüsse, Daniel :hi: |
Re: Problem beim Punktezählen
Der ganze Stuff wird in einer Timerprozedur aufgerufen.
Wo soll ich denn das "Inc(Spieler1)" hinsetzen??? |
Re: Problem beim Punktezählen
Zitat:
Delphi-Quellcode:
Entspricht auch:
scorespieler1 := scorespieler1 + 1;
Delphi-Quellcode:
Hmm, Timer, ist so ne sache...
Inc(ScoreSpieler1);
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: |
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!!! |
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:
So, nun viel Spass beim Code zerpflücken, aber nich zu dolle ich brauch den noch :wink: !!!
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. Hoffe damit könnt Ihr mir jetzt aber richtig helfen. |
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:
blizzard
procedure tform1.form1activate(sender: Tobject);
begin if form3.timer.enabled then inc(scorespieler1); end; |
Re: Problem beim Punktezählen
Hallo Blizzard,
mir ist folgendes augefallen:
Delphi-Quellcode:
ist m.E. falsch geklammert. Es müsste so aussehen:
if (counter=0)
and (Form1.Visible=True) or (counter=0) and (Form2.Visible=True)
Delphi-Quellcode:
liegt es vielleicht daran, dass der entsprechende then Teil deshalb nie ausgeführt wird?
if ((counter=0)
and (Form1.Visible=True)) or ((counter=0) and (Form2.Visible=True)) |
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