Zeit simulieren?

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Frusciante

Betreff: Zeit simulieren?

BeitragSo, Mai 13, 2007 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, ich bin seit einigen Tagen daran einen kleinen Fussballmanager zu programmieren. Momentan bin ich daran die Simulation eines Spiels zu verfeinern. Dabei stoße ich aber gerade auf ein Problem. Das Programm sollte an bestimmten Stellen ja quasi nicht weiterlaufen, (ein PC rechnet ja sehr schnell) da sonst viel zu schnell Tore fallen würden. In dieser Zeit möchte ich aber dennoch z.B. Text ausgeben, für einen Liveticker. Da komme ich zu den 2 Fragen:
1.Wie lässt es sich einrichten das mein Programm in einer bestimmten Zeit (eine festgelegte Zeit, z.b. 10 Sekunden) nur bestimmte Befehle ausführt und das Programm dann entweder weiterführt oder wieder an die Stelle springt.
2.Wie kann ich überhaupt eine bestimmte reale Zeit berechnen? Z.B. ein Programm das sich von allein nach 10 Skunden beendet.

Delay ist ja quatsch, dabei kann ich ja nichts anderes mehr machen. Evtl. mit waittimer? Habe überlegt das ich einen Timer erstelle der einen Takt pro sekunde gibt und dann eine Variable immer plus 1 zählt wenn waittimer("1 sekunde") vorbei ist. Allerdings weiß ich nicht wie ich so etwas verwirkliche, mein Programm soll ja nicht tatsächlich dann 1 sekunde anhalten. Hoffe ich hab mich klar ausgedrückt Wink

mfg Frusciante

Tankbuster

BeitragSo, Mai 13, 2007 19:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Versuch mal mit Millisecs() Wink
Das müsste klappen!
Twitter
Download Jewel Snake!
Windows|Android
 

Frusciante

Betreff: hm

BeitragSo, Mai 13, 2007 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Meinst du so etwas in der Art?

Code: [AUSKLAPPEN]



a = MilliSecs()/1000 + 10

Repeat

Text 100,100, MilliSecs()/1000
Cls

Until a = MilliSecs()/1000

Print "10 sek. sind um!"
WaitKey

Tankbuster

BeitragSo, Mai 13, 2007 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
zeit_bis_zum_event=10000 ;10000 Millisekunden
anfang = MilliSecs()
While Not lol=True
zeit=anfang-MilliSecs()+zeit_bis_zum_event
If Zeit<=0 Then tuwas()
Cls

Text 100,100, zeit/1000

Flip

Wend

Ehr sowas, kommt aber aufs selbe raus!
PS: "Text" und danach "Cls" macht nicht sehr viel sinn Wink
Twitter
Download Jewel Snake!
Windows|Android
 

Frusciante

BeitragMo, Mai 14, 2007 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich muss ehrlich sagen damit bin ich nicht weiter gekommen. Wenn ich das Spiel künstlich verlangsamen will, weiß ich immer noch nicht wie ich z.B. trotzdem eine flüssige Mausführung erreiche und ein mögliches Abbrechen des Programmes zu jederzeit. Delay und waittimer halten beides das Programm an (beide auf ihre art und weise), und Millisecs() kann mir dabei ja auch nicht wirklich weiterhelfen :/
Habe eine vollkommene Gehirn Sperre, mir fällt nichts dazu ein! Wäre für ein paar Anregungen sehr dankbar.

Frusciante

Noobody

BeitragMo, Mai 14, 2007 14:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Du lässt gewisse Befehle (wie zum Beispiel Ballbewegung und Spielerbewegungen), sobald dass eine Variable, zum Beispiel "slo_mo" 1 ist, nur jedes zweites Frame ausführen. Das würde schon zum doppelt so langsamen Spielverlauf führen und der Programmablauf mit Maus usw. würde nicht beeinträchtigt.
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun

BladeRunner

Moderator

BeitragMo, Mai 14, 2007 15:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich verstehe dein Problem nicht ganz - Was spricht dagegen festzulegen dass zB 1 Sekunde Echtzeit 1 Minute 'Spielzeit' entspricht ?

Jedes mal wenn 1000 millisekunden Verstrichen sind (Du speicherst den Millisecswert zum Spiestart und vergleichst damit) erhöhst Du den Spielstand um eine Minute und lässt die Grafiklogik für das Spielfeld einmal laufen. Die restliche Gamelogik liegt ausserhalb dieser Bedingung und läuft somit immer, wodurch Mausabfrage etc. gewährleistet sind.

Code: [AUSKLAPPEN]
if millisecs() >= lastmillisecs+1000 then
    lastmillisecs = millisecs()
    spielminute = spielminute +1
    bewegespieler()
    maldasspielfeld()
endif
fragmausab()
zeichneGUI()
...
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group