Unabhängiger Zähler
-
Moin erstmal zusammen.
Bin ganz neu hier und habe einige Fragen.Zu mir erstmal:
Mach gerade mein Fachabbi, und hab hier und da was mit Informatik zu tun gehabt.Momentan beschäftige ich mich mit C++. Ich habe dafür den kostenlosen Kompiler dev-C++ 4.9.9.2
Ein Freund sagte mir zwar das er nicht optimal wäre, aber für meine Zwecke sollte er reichen.Was ich kann(ist nicht viel).
- Natürlich ein Hallo Welt Programm.
- For und do while Schleifen.
- und ein wenig was ich mir zusammenkopiert und durchprobiert habe.Was ich momentan will:
Es ist eigentlich ganz einfach.Ich habe schonmal ein kleines Textadventure programmiert zum spaß.
Jetzt will ich eine Art Strategiespiel programieren.
Alles auf Konsolenanwendung programmiert.Zudem ist meine Frage eigentlich nur wie ich eine Zählerschleife programieren kann die Unabhängig von dem was ich eingebe und mache oben in der Ecke weiterläuft.
Einen Reccausen Zähler für Holz.
Je nach dem ob ich dann zum Beispiel einen Holzfäller baue, soll sich der Zähler um 100 verringern, und dann etwas schneller ablaufen. Weil ein zweiter Holzfäller ja mitproduziert. Währendessen soll der Zähler dann in Echtzeit weiterlaufen.Momentan hab ichs nur geschafft das der Zähler läuft, ich eine eingabe mache, und der Zähler dann von vorne anfängt.
Ich habe auch nach einem ähnlichen Beitrag gesucht, aber ich wurde nicht fündig.
Ich bitte um Hilfe und Verständnis.
mfg
Last-Boyscout
-
Du benötigst auf jeden Fall eine Variable "holz", in der du dir deinen aktuellen Materialstand merkst. In der Hauptschleife kannst du diese Variable dann anzeigen, erhöhen oder vrringern, je nach Bedarf:
//Achtung, Pseudocode: int holz=1000;//Startkapital while(!ende) { //Hauptschleife: int select=get_input() switch(select) { case BAUEN: { CBuild building = get_building(); if(building.bholz()<holz) error("zu wenig Holz"); else { build(building); holz-=building.bholz(); } break; } case AUSWAHL: ... } //Anzeige: ... gotoxy(0,5);cout<<"H:"<<holz; ... //Produktion: ... holz+=get_count(holzfaeller); ... }(die Details mußt du dir selber überlegen, aber das Prinzip sollte klar sein)
-
Vielen Dank, damit kann ich was anfangen.
mfg
Last-Boyscout
-
Den Ressourcenzuwachs und sonst alles was zeitabhängig ist, kannst du dir recht leicht ermitteln lassen:
Du berechnest den Zuwachs in Sekunden.zum beispiel
int holz_zuwachs = 12; //12 Einheiten Holz pro SekundeDann speicherst du einfach die Zeit die zwischen dem Hochzählen der Ressourcen vergangen ist:
//du brauchst hier ne Zeitfunktion die Milisekundenauflösung hat unsigned letzte_zeit = timeGetTime();//windows-spezifische zeitfunktion float delta = 0.0f; //hier speichern wie die Zeit die seit dem letzten Holz-Tick vergangen ist while(true) //Endlosschleife für dein Spiel { unsigned zeit = timeGetTime(); float vergangen = zeit - letzte_zeit / 1000.0f;//vergangene Zeit in Sekunden while( 1/holz_zuwachs < delta ) //Zeit den Holz-Bestand zu erhöhen { ++holzVorrat; delta -= 1/holz_zuwachs; //Einmal Holz-Tick-Zeit abziehen } }So löst man das Problem in Spielen, aber vllt. solltest du dich fürs erste mit nem einfacheren System begnüngen, nämlich nem Rundenbasierten, dann macht der Spieler seine Aktionen und jede Runde gibts dann einmal Ressourcen, Bauzeiten werden aktualisiert, etc.
-
Ach jetz hab ich die hälfte vergessen. Ich schreibs dir nochmal neu, dieses mal mach ich nichts nebenher.
//du brauchst hier ne Zeitfunktion die Milisekundenauflösung hat unsigned letzte_zeit = timeGetTime();//windows-spezifische zeitfunktion float delta = 0.0f; //hier speichern wie die Zeit die seit dem letzten Holz-Tick vergangen ist while(true) //Endlosschleife für dein Spiel { unsigned zeit = timeGetTime(); //aktuelle Zeit in Milisekunden delta += zeit - letzte_zeit / 1000.0f; //vergangene Zeit in Milisekunden letzte_zeit = zeit; //"neue" letzte_zeit //1/holz_zuwachs gibt an wieviele Sekunden (bzw. Milisekunden in Einheit Sekunden) für eine Einheit Holz vergehen müssen //wenn delta größer wie diese Zeitspanne ist, dann wird es Zeit den Zähler zu erhöhen und anschließend delta um diesen Wert //zu verringern. Das ganze geschieht so lange, bis delta wieder kleiner ist while( 1/holz_zuwachs < delta ) //Zeit den Holz-Bestand zu erhöhen { ++holzVorrat; delta -= 1/holz_zuwachs; //Einmal Holz-Tick-Zeit abziehen } }
-
Auch vielen Dank, an dich!
Ich werde alles mal durchprobieren und mal sehen wie weit ich komme.Wenn ich fragen habe komme ich natürlich wieder hier zu euch.

mfg
Last-Boyscout