![JLI Spieleprogrammierung Foren-Übersicht](templates/subSilver/images/jlilogo.jpg) |
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 16.01.2003, 07:55 Titel: Countdown |
|
|
Hallo...
Ich würde gerne mal einen Timer programmieren, so das in meinem Fenster halt der timer von irgendwas runterzählt und dann irgendetwas passiert.
Und wär auch cool wenn mir jemand erklären könnte, wie ich ein datum in einer datei abspeichern kann, sie dann wann anders wieder lädt und den zeitraum ausrechnen kann, also wie lange es her ist das das programm zum letzten mal geöffnet wurde...
P.S. Könnte man das auch selber in dem programm abspeichern, ohne eine extra datei??? |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
VerruecktesHuhn Super JLI'ler
![](http://avatarpage.rapidforum.com/coma1/5.jpg)
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 16.01.2003, 11:46 Titel: |
|
|
Zu dem Countdown: Da gibts wahrscheinlich ne extra Funktion oder so, aber ich hätt da nen Vorschlag:
Du könntest nen Thread machen, der immer ne Sekunde oder so schläft, und dann ne Variable um sag ma mal 1 verringert. Dann diese Variable ausgeben und so... |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 16.01.2003, 13:03 Titel: |
|
|
Hi,
wenn du mit der WinAPI programmierst kannst du einfach und geschmacklos einen WM_TIMER nutzen, welcher jede Sekunde aufgerufen wird. Beim programmstart initialisierst du eine globale Variable mit 60 oder so und dein Timer zählt diese immer runter bis, sie bei 0 angekommen ist (musst du selber per if regeln). Achtung, der Timer wird weiterhin jede sekunde aufgerufen, bis du ihn mit KillTimer wieder abstellst.
Die Funktionen die du benötigst sind SetTimer und KillTimer.
Also, soweit ich weiß musst du das Datum in eine extra Datei schreiben. Die aktuelle Zeit und auch das aktuelle Datum bringt die die Funktion
void GetSystemTime(LPSYSTEMTIME lpSystemTime).
Gruss Tarek |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 16.01.2003, 14:24 Titel: |
|
|
ApniK->Tarek hat Folgendes geschrieben: |
Also, soweit ich weiß musst du das Datum in eine extra Datei schreiben. Die aktuelle Zeit und auch das aktuelle Datum bringt die die Funktion
void GetSystemTime(LPSYSTEMTIME lpSystemTime).
|
Kann mir das mal einer noch ein bissl genauer erklären???
Edit:
Und zu dem in eine datei schreiben:
ích möchte einmal das datum reinschreiben(automatisch) und beim öffnen überprüfen wielange das her ist, also welcher zeitraum dazwischen liegt.
und ich möchte in der datei so spielstände speichern, also 1 für vorhanden und 0 für nichtvorhanden, und das öfter, wie kann ich das dann bei mehreren sachen überprüfen ob das nun vorhanden ist oder nicht...
Und wie kann ich bestimmt sachen aus einer datei in eine variable speichern? |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
VerruecktesHuhn Super JLI'ler
![](http://avatarpage.rapidforum.com/coma1/5.jpg)
Anmeldedatum: 30.07.2002 Beiträge: 492 Wohnort: Stuttgart Medaillen: Keine
|
Verfasst am: 16.01.2003, 14:34 Titel: |
|
|
Is ganz einfach, einfach ne variable mit dem Typ: SYSTEMTIME
erzeugen und der Funktion übergeben. Da stehen dann Jahr und so drin... steht alles in der MSDN... |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 16.01.2003, 16:40 Titel: |
|
|
Hi,
du deklarierst erstmal eine Variable des Typs LPSYSTEMTIME. Dann übergibst du diese an deine Funktion und diese füllt dir die mit den aktuellen Informationen.
Nun pickst du einzelne Informationen raus und schreibst sie in deine Datei.
Zuvor überprüfst du noch, ob die Datei vorhanden ist.
Also sieht dein Code folgendermaßen aus:
Code: |
char Buffer[256];
int iYear, iMonth, iDay;
FILE* Fdatum = NULL;
LPSYSTEMTIME lpSysTime;
Fdatum = fopen("text.txt","r");
if(Fdatum != NULL){
//Datei vorhanden, Daten einlesen
fgets(Buffer,256,Fdatum);
sscanf("%i %i %i",&iDay,&iMonth,&iYear);
fclose(Fdatum);
}else{
//Datei nicht vorhanden, neue erstellen
Fdatum = fopen("text.txt","w");
GetSystemTime(lpSysTime);
iYear = lpSysTime->wYear;
iMonth = lpSysTime->wMonth;
iDay = lpSysTime->wDay;
fprintf("%i %i %i",iDay,iMonth,iYear);
fclose(Fdatum);
}
|
Der Quelltext ist bestimmt fehlerhaft und überarbeitungsdürtig, da er ungetestet ist, sollte aber das grobe Prinzip verdeutlichen denke ich.
Gruss Tarek |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 16.01.2003, 17:18 Titel: |
|
|
jo danke, hat mich um einiges weitergebracht
Bloß 2 Fragen noch...
muss das ne txt datei sein oder kann ich da ein beliebiges(frei erfundenes) dateiformat hinschreiben?
Wie kann ich die datei im Binärmodus öffnen und schreiben damit man sie nicht im Texteditor einfach umschreiben kann? |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Tomm Junior JLI'ler
![](http://www.gotomm.de/wbb/images/avatars/avatar-1.gif)
Anmeldedatum: 23.12.2002 Beiträge: 93 Wohnort: Neuburg an der Donau Medaillen: Keine
|
Verfasst am: 16.01.2003, 17:36 Titel: |
|
|
Geöffnet wird die Datei auch mit fopen.
Zum schreiben:
Code: |
site_t fwrite(const void *Puffer, size_t Groesse, size_t Anzahl, FILE *Datei);
|
Steht so im Buch auf Seite 165.
Edit: Du kannst jede beliebige Endung verwenden, soweit ich weiss. _________________ Tomato Interactive Homepage
Das Forum von Tomato Interactive |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
AFE-GmdG JLI MVP
![JLI MVP JLI MVP](http://www.jliforum.de/images/mvp.gif)
![](http://jliforum.de/afe-gmdg/anthill.png)
Alter: 45 Anmeldedatum: 19.07.2002 Beiträge: 1374 Wohnort: Irgendwo im Universum... Medaillen: Keine
|
Verfasst am: 16.01.2003, 18:39 Titel: |
|
|
Man kann jede beliebige Dateiendung nutzen, die einem einfällt, ob alles Sinnvoll ist, ist aber nicht gleich gesagt. Es wird dich keiner daran hindern, eine Textdatei mit der Endung Exe zu versehen, ausführen wirst du sie dann aber trotzdem nicht können
Um eine Datei im Binärmodus zu öffnen, schreibt man als Modus einfach rb, wb oder ab (b für binary) in das passende Feld. Zum Lesen / Schreiben nimmt man dann fread / fwrite. Wenn du nicht willst, dass jemand die Daten verändert baue eine Checksumme mit in die Datei - das geht sogar im Klartext, niemand macht sich die Mühe, ein Checksummencode auszurechnen, nur wenn er die Urzeit in der Datei ändern will...
AFE-GmdG _________________
CPP: | float o=0.075,h=1.5,T,r,O,l,I;int _,L=80,s=3200;main(){for(;s%L||
(h-=o,T= -2),s;4 -(r=O*O)<(l=I*I)|++ _==L&&write(1,(--s%L?_<(L)?--_
%6:6:7)+\"World! \\n\",1)&&(O=I=l=_=r=0,T+=o /2))O=I*2*O+h,I=l+T-r;} |
|
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 17.01.2003, 14:46 Titel: |
|
|
okay,
was meinst du mit checksumme???
Wegen dem Timer... WM_TIMER is ja ziemlich weit unten eingestuft, hat das irgendwie auswirkungen auf den sekundentack??
wie oft wird das wm_timer(jede sek?) gesendet?
Kann mir das einer mit dem Settimer und killtimer nochmal näher erklären??? das kapier ich nich so... |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
Starwash Senior JLI'ler
Alter: 40 Anmeldedatum: 22.09.2002 Beiträge: 252 Wohnort: Zossen (bei Berlin) Medaillen: Keine
|
Verfasst am: 17.01.2003, 14:58 Titel: |
|
|
Hi,
also mit der SetTimer gibst startest du die Timernachricht, die Periodenlänge kannst du selber in ms angeben. KillTimer stoppt den Timer wieder, alles weitere solltest du aus der MSDN lesen können.
Naja, du könntest bspw. in die erste Zeile deines Programms ein Zahl schreiben, welche sich aus der Summe deiner einzelnen ASCII-Werte zusammensetzt. Wenn du nun den String einliest rechnest du wieder die Summe der einzelnen ASCII-Werte aus, nur wenn diese übereinstimmt mit der, die in der Datei steht, dann ist das Datum aus der Dateigültig, ansonsten hat, wer in dieser Datei rumgepfuscht.
Gruss Tarek |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
DerJJ Junior JLI'ler
Anmeldedatum: 24.12.2002 Beiträge: 84
Medaillen: Keine
|
Verfasst am: 17.01.2003, 15:07 Titel: |
|
|
thx |
|
Nach oben |
|
![](templates/subSilver/images/spacer.gif) |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|