JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=7ae7d2526ba7ada3344c0759a0882b7bMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Countdown

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 07:55    Titel: Countdown Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 11:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 13:03    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 14:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
VerruecktesHuhn
Super JLI'ler



Anmeldedatum: 30.07.2002
Beiträge: 492
Wohnort: Stuttgart
Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 14:34    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 16:40    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 17:18    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Tomm
Junior JLI'ler



Anmeldedatum: 23.12.2002
Beiträge: 93
Wohnort: Neuburg an der Donau
Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 17:36    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen AIM-Name
AFE-GmdG
JLI MVP
JLI MVP


Alter: 45
Anmeldedatum: 19.07.2002
Beiträge: 1374
Wohnort: Irgendwo im Universum...
Medaillen: Keine

BeitragVerfasst am: 16.01.2003, 18:39    Titel: Antworten mit Zitat

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 Wink
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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 17.01.2003, 14:46    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Starwash
Senior JLI'ler


Alter: 40
Anmeldedatum: 22.09.2002
Beiträge: 252
Wohnort: Zossen (bei Berlin)
Medaillen: Keine

BeitragVerfasst am: 17.01.2003, 14:58    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
DerJJ
Junior JLI'ler



Anmeldedatum: 24.12.2002
Beiträge: 84

Medaillen: Keine

BeitragVerfasst am: 17.01.2003, 15:07    Titel: Antworten mit Zitat

thx
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
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

Impressum