Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

30.09.2013, 23:56

Ressourcenwerte pro Minute addieren?

Hallo liebe Community,

mein Name ist LazerBeak und ich versuche schon verzweifelt seit ein paar Tagen nach einer Lösung für mein Problem.
Ich habe vor eine textbasierende Wirtschaftssimulation zu machen scheitere aber einfach an meiner nicht vorhandenen Erfahrung.
Ich möchte zum Beispiel, wenn ich 2 Holzfaeller habe, dass dann pro Minute in meinem Lager pro Holzfaeller 10 Baumstaemme gelagert werden.
Wie mache ich das am besten? Ich habe mich auf sämtliche SuFu's gestürzt aber leider nichts gefunden was mich weiter bringt.
Auch habe ich nicht so wirklich viel Wissen im Bereich C++, da ich vor circa 4 Tagen damit angefangen habe.
Ich bitte euch trotzdem inständig mir dabei zu helfen. Ich würde mich sehr freuen.

Hier der Code: (sehr lahm und ohne nichts :( aber aller anfang ist schwer :P)

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// TSIM - Konsole

#include <iostream>


using namespace std;

int main(){ // temp 

int tmp;
//Gebaeude

 int Holzfaeller;   
int Saegewerk;  
int Steinmetz;
    
//Ressourcen
    
float Baumstaemme;  
float Bretter;  
float Steine;

float Ressourcen_Gesamt;

Holzfaeller = 2;    
Saegewerk = 1;  
Steinmetz = 2;
    
Baumstaemme = Holzfaeller*(10); 
Bretter = Saegewerk*(20);   
Steine = Steinmetz*(10);

Ressourcen_Gesamt = Baumstaemme + Bretter + Steine;

//Gebaeude  
cout << Holzfaeller << " Holzfaeller | " << Saegewerk << " Saegewerk | " << Steinmetz << " Steinmetz |" << endl;    
//Leerzeile 
cout << "" << endl; // <-- Nicht beachten   
//Ressourcen    
cout << Baumstaemme << " Baumstaemme | " << Bretter << " Bretter | " << Steine << " Steine |" << endl;

cin >> tmp;
return 0;}



Liebe Grüße
LazerBeak

PS: Ich hoffe ihr könnt mir dabei helfen. :)

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

01.10.2013, 00:07

Das wirst du so (in einer Konsolenanwendung) nicht so leicht hinbekommen.
Ich schlage dir vor, das ganze rundenbasiert zu machen und nicht zeitbasiert.
Also z.B. pro "Runde" liefern die Holzfäller 1 Einheit Holz.

Warum schreibst du eigentlich Zahlen in Klammern?
Baumstaemme = Holzfaeller*(10);

3

01.10.2013, 00:16

Danke für die schnelle Antwort :)

also rundenbasiert. Hmm wie mache ich das am besten? Kennst du da ein Tutorial dafür? Also womit ich mich in die Richtung begeben kann?

Und ja also das mit der Konsolen-Anwendung fand ich erst mal sozusagen ganz interessant da ich mich an die Windows-Form noch nicht rantrauen wollte.

Die Zahlen schreibe ich in die Klammern da ich das in Mathe in der Schule auch immer gemacht habe um mir in der Arbeit einen schnelleren Überblick zu verschaffen, da mein + und mein * gleich aussahen :P

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

01.10.2013, 00:19

Na ganz einfach: Frag den Spieler, was er tun will. Dann ist die Runde vorbei, und das Spiel "arbeitet". Jetzt geht das Ganze wieder von vorne los, usw.

5

01.10.2013, 00:22

Ah Okay. Also praktisch das ganze via Schleife machen und die dann z.B. durch die Taste 'B' aktivieren?
Wie mache ich das dann aber, dass ich die Entwicklung der Ressourcen sehe? Das geht nicht über die Konsole oder? :whistling:

6

01.10.2013, 07:31

Teile die Schleife einfach in mehrere Teile auf:

1. Verändere die aktuellen Werte. Z.B. Holz um die Anzahl an vorhandenen Sägewerke erhöhen.
2. Gib die aktuelle Situation aus. Z.B. "Im Lager befinden sich 10 Holz"
3. Den nächsten Schritt des Spielers abfragen / Eingabe abfragen
4. Eingabe auswerten und verarbeiten. Z.B. Sägewerke um 1 erhöhen

Das Spiel läuft dann in einer Endlosscheife innerhalb der Schleife ab (bis der Spieler z.B. "Quit" eingibt).

TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

7

01.10.2013, 09:57

Dein Problem ist das cin. Das blockiert das gesamte Programm. Wenn du das nicht moechtest, schau dir mal das hier an: http://www.c-plusplus.de/forum/39320-full

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

8

01.10.2013, 17:36

Ich denke als Anfänger reicht auch erst mal die erste Version. Was TGGC meint wäre aber eine schöne Erweiterung. Das kannst du dir ja mal anschauen wenn du was einfaches laufen hast. Du kannst entweder nach jeder Aktion die der Spieler macht die komplette Situation ausgeben, zum Beispiel:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
<<Was möchtest du tun?

>>Holz hacken

<<100 Holz, 20 Erz im Lager

<<Was möchtest du tun?

>>Erz fördern

<<100 Holz, 21 Erz im Lager

Das wäre ein einfacher Ablauf eines Programms. "<<" steht hier vor Ausgaben und ">>" vor Eingaben. Die Ein- und Ausgaben sind hier natürlich alles sehr aufwendig. Man könnte die Aktionen die der Spieler machen kann auch einfach nummerieren und der Spieler gibt eben die Zahl ein, oder was auch immer du möchtest.
Andererseits könnte man die Ausgabe auch einfach als Aktion durchführen:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<<Was möchtest du tun?

>>Holz hacken

<<Was möchtest du tun?

>>Anzeigen

<<100 Holz, 20 Erz im Lager

<<Was möchtest du tun?

>>Holz hacken

<<Was möchtest du tun?

>>Anzeigen

<<101 Holz, 20 Erz im Lager


Hier würde der Befehl "Holz hacken" ein Holz zu den Ressourcen hinzu fügen und der Befehl "Anzeigen" würde alle Ressourcen ausgeben. In diesem Fall einfach nur die 2. Das kannst du dir ja so bauen wie du möchtest. Das ganze lässt du in einer Schleife laufen, das ist richtig. Wie schon gesagt wurde, kannst du das ganze so lange laufen lassen bis ein beenden Befehl gegeben wird wie zum Beispiel "Quit".

Das sind erst mal zwei einfache Varianten die du auch als Anfänger umsetzen kannst. Da gibt es sicherlich ein paar Dinge bei denen du dich ein wenig rein hängen musst aber ansonsten macht es ja auch keinen Spaß:) Versuchs einfach mal.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

9

01.10.2013, 18:02

Wieso float für die Ressourcen? Da geht doch auch int, denn du machst ja keine halben Steine oder ähnliches ;) . Dann machst du das wie Schorsch beschrieben hat.

P.S. Für Leerzeile kannst du auch : cout << Holzfaeller << " Holzfaeller | " << Saegewerk << " Saegewerk | " << Steinmetz << " Steinmetz | \n" << endl;

\n machen. :thumbup:

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

10

01.10.2013, 18:07

Ein "\n" und std::endl sind nicht das selbe. Nagelt mich nicht drauf fest, da ich kaum noch C++ benutze, aber std::endl macht ein Newline und ein flush. Es wird also nicht nur ein Zeilenumbruch ausgegeben, sondern der Stream auch direkt geschrieben. Streams sind ja gepuffert und da kann die eigentliche Ausgabe sonst ja auch mal verzögert kommen. Wichtig ist das für Logfiles als Beispiel. In der Konsole ist die Ausgabe soweit ich weiß allerdings nie verzögert und es wird automatisch geflusht. Wie gesagt nagelt mich bitte nicht 100% drauf fest;)
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werbeanzeige