Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Lazarus (IDE) (https://www.delphipraxis.net/81-lazarus-ide/)
-   -   Ressourcen pro Sekunde generieren (https://www.delphipraxis.net/191554-ressourcen-pro-sekunde-generieren.html)

markus5766h 27. Jan 2017 12:53

AW: Ressourcen pro Sekunde generieren
 
Moin.

Soll das so etwas wie Zivilisation werden ?

Wenn ja, wird eine Schleife nicht benötigt :
Zivilisation ist ein Runden-basiertes Spiel, d.h. Ressourcen werden je Runde aktualisiert,
nachdem alle Spieler (oder auch Engines) ihre Aktionen durchgeführt haben - die Resourcenänderung ist ja von
den Aktionen der Spieler abhängig . . .

Neutral General 27. Jan 2017 13:27

AW: Ressourcen pro Sekunde generieren
 
Okay Timer kurz erklärt:

Du willst ein Stück Code regelmäßig ausführen?

1) Zieh dir einen Timer aufs Formular (Name "Timer1" als Beispiel)
2) Setze die Eigenschaft "Interval" auf das Zeitinterval in Millisekunden in dem du deinen Code ausgeführt haben willst. (1000 = 1x pro Sekunde)
3) Wechsel auf das "Ereignisse" Tabsheet des Timers im Objektinpektor und klicke doppelt auf die leere Fläche rechts von "OnTimer".
4)

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Hier kommt der Code hin der jede Sekunde ausgeführt werden soll
end;
In deinem Fall also so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Luxusgueter:=Luxusgueter+Luxusgueterproduktion;
  Stein:=Stein+Steinproduktion;
  Nahrung:=Nahrung+Nahrungproduktion;
  Gold:=Gold+Goldproduktion;
  label13.caption:=floattostrf(Stein,fffixed,10,0);
  label14.caption:=floattostrf(luxusgueter,fffixed,10,0);
  label15.caption:=floattostrf(Nahrung,fffixed,10,0);
  label16.caption:=floattostrf(gold,fffixed,10,0);
  label17.caption:=inttostr(einwohner);
end;
5) Ein Timer ist standardmäßig angeschaltet, würde also sobald du das Formular bzw. die Anwendung öffnest anfangen den Code auszuführen.
Wenn du das nicht willst stell die Eigenschaft "Enabled" im Objektinspektor erst mal auf false und um den Timer zu aktivieren setzt du dann einfach irgendwo
im Quelltext (also da wo du ihn an/aus schalten willst) Timer1.Enabled := true (oder auch wieder auf false, falls du die Rohstoffproduktion wieder abschalten willst).

HINWEIS: Mach es NICHT mit dieser Schleife und Application.ProcessMessages! Das ist auf unendlich viele Arten schlecht und falsch!

himitsu 27. Jan 2017 20:23

AW: Ressourcen pro Sekunde generieren
 
Und nochmal kurz zu dem Problem mit den ungenauen Timern.
Die Timer sind nicht ganz genau, je kürzer das Interrval ist.
Und wenn dein Programm oder der PC etwas "hängt" (ausgelastet ist), dann bleibt der Timer quasi kurz stehen.

Stichwort: Interpolation

Da ist es dann egal, ob der Timer alle 0.5 , 1 oder 55 Sekunden auslöst.

* einfach den Zeitpunkt des Starts, bzw. des letzten Updates merken
* ausrechnen wieviel Zeit seitdem vergangen ist, in Sekunden
* und das mit dem WertProSekunde multipliziert dazuaddieren

heel213 24. Feb 2017 23:59

AW: Ressourcen pro Sekunde generieren
 
Zitat:

Zitat von Neutral General (Beitrag 1360174)
Okay Timer kurz erklärt:

Du willst ein Stück Code regelmäßig ausführen?

1) Zieh dir einen Timer aufs Formular (Name "Timer1" als Beispiel)
2) Setze die Eigenschaft "Interval" auf das Zeitinterval in Millisekunden in dem du deinen Code ausgeführt haben willst. (1000 = 1x pro Sekunde)
3) Wechsel auf das "Ereignisse" Tabsheet des Timers im Objektinpektor und klicke doppelt auf die leere Fläche rechts von "OnTimer".
4)

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Hier kommt der Code hin der jede Sekunde ausgeführt werden soll
end;
In deinem Fall also so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Luxusgueter:=Luxusgueter+Luxusgueterproduktion;
  Stein:=Stein+Steinproduktion;
  Nahrung:=Nahrung+Nahrungproduktion;
  Gold:=Gold+Goldproduktion;
  label13.caption:=floattostrf(Stein,fffixed,10,0);
  label14.caption:=floattostrf(luxusgueter,fffixed,10,0);
  label15.caption:=floattostrf(Nahrung,fffixed,10,0);
  label16.caption:=floattostrf(gold,fffixed,10,0);
  label17.caption:=inttostr(einwohner);
end;
5) Ein Timer ist standardmäßig angeschaltet, würde also sobald du das Formular bzw. die Anwendung öffnest anfangen den Code auszuführen.
Wenn du das nicht willst stell die Eigenschaft "Enabled" im Objektinspektor erst mal auf false und um den Timer zu aktivieren setzt du dann einfach irgendwo
im Quelltext (also da wo du ihn an/aus schalten willst) Timer1.Enabled := true (oder auch wieder auf false, falls du die Rohstoffproduktion wieder abschalten willst).

HINWEIS: Mach es NICHT mit dieser Schleife und Application.ProcessMessages! Das ist auf unendlich viele Arten schlecht und falsch!

Vielen vielen Dank, das war genau das, was ich brauchte! :D

t.roller 25. Feb 2017 05:55

AW: Ressourcen pro Sekunde generieren
 
Zitat:

Zitat von heel213 (Beitrag 1360145)
Ja moin, hier ist wieder euer Heel.
Und zwar will ich für das "Spiel", welches ich im Rahmen unseres Schulprojekts zusammenbasteln will eine Funktion einbauen, welche Ressourcen/s generiert, bisher habe ich mir das so vorgestellt:
Code:
Gaaanz laaanges Prograaamm

Ein ZIP-File im Anhang wäre sinnvoll, um das ganze Timing im Spiel zu erfassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:41 Uhr.
Seite 2 von 2     12   

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-2025 by Thomas Breitkreuz