Hilfe bei einem Zaehler
-
Hallo Leute,
ich bin neu auf diesem Forum und lerne seit gut einer Woche C++. Da dieses Forum gut besucht wird, habe ich mich nun hier registriert und hoffe auf nette Mitglieder. Und bitte nicht schlagen, sollte ich mich blöd bei der Sprache anstellen oder schon viel zu hohe Erwartungen für mich gesetzt haben ;).
Naja, nun zu meiner Frage:
Ich will eine Art QuizSpiel machen, dort sollen also Fragen gestellt werden, man startet mit 100 Kronen, falls man sie richtig beantwortet, bekommt man 50 dazu, falls falsch, bekommt man -50 Kronen. Soweit klar?
Meine Frage ist nun, wie man einen intelligenten Zaehler einbauen kann, also der dann nach der dritten und vierten Frage noch weiß, wie viele Kronen der Spieler gesamt hat. Also wenn er die erste Frage falsch hat, dann rechnet -50 Kronen und bei der zweiten Frage immer noch sagen kann wie viele Kronen er hat.Hier der Code, falls nötig (Die Fragen werden natürlich noch in Sinnvolle getauscht und diese Sache mit dem Betrug gibt es dann selbstverständlich nicht mehr.
#include <iostream> using namespace std; int main() { int Antwort; cout<<"Willkommen! Dies ist ein kleines Quiz. Sie starten mit 100 Kronen, eine Frage kostet 10 Kronen." <<endl; cout<<"Sollten sie eine Frage falsch haben, werden ihnen 50 Kronen abgezogen." <<endl; cout<<"Bei richtiger Antwort bekommen sie 50 Kronen dazu." <<endl; cout<<"Dann sind wir mal gespannt, wie weit sie es schaffen." <<endl; cout<<"" <<endl; cout<<"Starten wir mit der ersten Frage." <<endl; cout<<"Test ?: "<<endl; cout<<"1: false, 2: false, 3: false, 4: right "; cin>>Antwort; if (Antwort == 4) { cout<<"" <<endl; cout<<"Richtig !" <<endl; cout<<"Zur naechsten Frage" <<endl; } else { cout<<"Falsch!" <<endl; cout<<""<<endl; cout<<"-50 Kronen" <<endl; cout<<""<<endl; cout<<""<<endl; cout<<"Zur naechsten Frage" <<endl; } cout<<"Nun zur zweiten Frage" <<endl; cout<<"Wie schreibt man Wasser?" <<endl; cout<<"1: Waser, 2: Wasser, 3: Wahser, 4: Wahssehr" <<endl; cin>>Antwort; if (Antwort == 2) { cout<<"" <<endl; cout<<"Naja, eigtl. richtig jedoch abgelesen, also geschummelt!" <<endl; cout<<"-100 Kronen wegen Betrugs" <<endl; cout<<"Sorry, aber wer betruegt und das Wort abliest, muss mit den Konsequenzen leben..." <<endl; cout<<"Zur naechsten Frage" <<endl; } else { cout<<"Falsch!" <<endl; cout<<""<<endl; cout<<"-50 Kronen" <<endl; cout<<""<<endl; cout<<""<<endl; cout<<"Zur naechsten Frage" <<endl; } system("pause"); }
EDIT: Könnte man es vllt sogar mit einer if-Anweisung machen? Wenn ja, wie genau?
LG und einen schönen Abend noch
Max
-
Leg dir doch einfach am Anfang eine Variable an, in der du den aktuellen Stand speicherst und nach jeder Antwort aktualisierst.
PS: Mit dem Ansatz bist du übrigens nicht besonders flexibel - ich würde die Fragen aus einer Datei auslesen und dann in einer Schleife beantworten lassen.
PPS: Mit dem Quiz hängst du dem Trend ein wenig hinterher
-
Mach um Zeile 6 herum etwas wie
int kontostand = 100;
Bei einer richtigen Antwort machst dukontostand += 50;
bei einer falschenkontostand -= 50;
Den Konstostand kannst du an jeder Stelle mitcout << "Der Konstostand ist " << kontostand << endl;
oder ähnlichem ausgeben.
-
So:
#include <iostream> int main() { int AnzahlKronen = 100; //100 = Startwert std::cout << "1 + 1 = "; int Eingabe; std::cin >> Eingabe; if(Eingabe == 2) { std::cout << "Ja, richtig!" << std::endl; std::cout << "+50 Kronen"!" << std::endl; AnzahlKronen += 50; //Zur Variable AnzahlKronen 50 dazuzählen std::cout << "Anzahl Kronen: " << AnzahlKronen << std::endl; } else { std::cout << "Ne, sorry!" << std::endl; std::cout << "-50 Kronen"!" << std::endl; AnzahlKronen -= 50; //Von Variable AnzahlKronen 50 subtrahieren std::cout << "Anzahl Kronen: " << AnzahlKronen << std::endl; } }
-
Was du brauchst ist eine Variable die sich die Zahlen merkt.
Ich gehe davon aus, dass das Spiel bei 0 Kronen endet.int main() { int antwort; int betrag = 100; // kronen zum start if( /* Frage ist richtig */) { betrag += 50; // 50 Kronen gewonnen } else { betrag -= 50; // 50 Kronen verloren } if(betrag < 0) { // Spiel verloren } return 0; }
-
unlogged schrieb:
Was du brauchst ist eine Variable die sich die Zahlen merkt.
Ich gehe davon aus, dass das Spiel bei 0 Kronen endet.Gegenfrage: Woher willst du wissen, was der Nutzer geantwortet hat?
-
Danke, erst einmal für eure Antworten.
EOutOfResources schrieb:
So:
#include <iostream> int main() { int AnzahlKronen = 100; //100 = Startwert std::cout << "1 + 1 = "; int Eingabe; std::cin >> Eingabe; if(Eingabe == 2) { std::cout << "Ja, richtig!" << std::endl; std::cout << "+50 Kronen"!" << std::endl; AnzahlKronen += 50; //Zur Variable AnzahlKronen 50 dazuzählen std::cout << "Anzahl Kronen: " << AnzahlKronen << std::endl; } else { std::cout << "Ne, sorry!" << std::endl; std::cout << "-50 Kronen"!" << std::endl; AnzahlKronen -= 50; //Von Variable AnzahlKronen 50 subtrahieren std::cout << "Anzahl Kronen: " << AnzahlKronen << std::endl; } }
Der Code funktioniert beim Debuggen aber nicht. Außerdem werde ich aus dem
std::
nicht schlau, da ich, wie gesagt, erst vor ca. 1 Woche immer 1 Stunde am Tag lerne und diese Anweisung noch nicht dran kam in meinem Buch außer mit
using namespace std;
. Was bedeutet denn das
std::
?
@ CStoll: Ich weiß, dass die Anwendung auch kürzer geht, aber bei den drei Anweisungen und Befehlen die ich gelernt habe, bin ich schon beinahe froh, dass ich so etwas geschafft habe, wenn auch der Code so lange ist
-
Wenn
using namespace std;
fehlt musst du vor jedem Objekt, Funktion und Typ der Standard-Bibliothek einstd::
setzten. Für dich bedeutet das: Entwederusing namespace std;
oder jedercin
odercout
hat einstd::
vor sich.EDIT: In den Zeile 11 und 18 kannst du jeweils das mittlere " entfernen, dann sollte es funktionieren.
-
SeppJ schrieb:
Mach um Zeile 6 herum etwas wie
int kontostand = 100;
Bei einer richtigen Antwort machst dukontostand += 50;
bei einer falschenkontostand -= 50;
Den Konstostand kannst du an jeder Stelle mitcout << "Der Konstostand ist " << kontostand << endl;
oder ähnlichem ausgeben.Wenn ich dieses genau so eingebe, dann bleibt er 100 stehen, wenn ich jedoch dann eingebe
cout << "Der Konstostand ist " << kontostand-=50 << endl;
, dann ist es eine Fehlermeldung. Also, was habe ich falsch gemacht?
-
sLink. schrieb:
Wenn ich dieses genau so eingebe, dann bleibt er 100 stehen, wenn ich jedoch dann eingebe
cout << "Der Konstostand ist " << kontostand-=50 << endl;
, dann ist es eine Fehlermeldung. Also, was habe ich falsch gemacht?So wild mischen kannst du das nicht. Beziehungsweise doch, wenn du dir Klammern richtig setzt, aber das wird arg unübersichtlich. Mach Programmlogik und Ausgabe nicht gleichzeitig. Zieh erst die 50 ab, dann gib den neuen Stand aus.
-
SeppJ schrieb:
sLink. schrieb:
Wenn ich dieses genau so eingebe, dann bleibt er 100 stehen, wenn ich jedoch dann eingebe
cout << "Der Konstostand ist " << kontostand-=50 << endl;
, dann ist es eine Fehlermeldung. Also, was habe ich falsch gemacht?So wild mischen kannst du das nicht. Beziehungsweise doch, wenn du dir Klammern richtig setzt, aber das wird arg unübersichtlich. Mach Programmlogik und Ausgabe nicht gleichzeitig. Zieh erst die 50 ab, dann gib den neuen Stand aus.
Könntest du mir vielleicht noch einen Beispielcode geben?
-
sLink. schrieb:
Könntest du mir vielleicht noch einen Beispielcode geben?
Beispiel wozu? Du sollst einfach nur nicht die Zuweisung und die Ausgabe in einer Zeile machen, sondern so wie ich es dir zuerst gezeigt habe.
Und bitte versuch die Antworten die du schon bekommen hast durchzulesen und durch zu denken.
-
SeppJ schrieb:
Mach um Zeile 6 herum etwas wie
int kontostand = 100;
Bei einer richtigen Antwort machst dukontostand += 50;
bei einer falschenkontostand -= 50;
Den Konstostand kannst du an jeder Stelle mitcout << "Der Konstostand ist " << kontostand << endl;
oder ähnlichem ausgeben.Das war deine Antwort, über die wir sprechen? Und dann, wie du sagst
cout << "Der Konstostand ist " << kontostand << endl;
mache ich darauscout << "Der Konstostand ist " << kontostand=-50 << endl;
bei einer falschen Antwort. Oder meinst du gleich unter dasint kontostand;
, also dann zum Beispiel so:int Antwort; int kontostand; if (Antwort=wrong) { kontostand=-50 }
also das Ganze oder so Ähnliches ab Zeile 6 einfügen?
-
Letzteres.
Verstehst du eigentlich auch nur irgendetwas von den Anweisungen die du da benutzt? Mir kommt das so vor, als würdest du einfach nur Codefetzen zusammenklicken ohne zu verstehen, was sie machen.
-
SeppJ schrieb:
Letzteres.
Verstehst du eigentlich auch nur irgendetwas von den Anweisungen die du da benutzt? Mir kommt das so vor, als würdest du einfach nur Codefetzen zusammenklicken ohne zu verstehen, was sie machen.
Ja, verstehe ich auf jeden Fall, das Problem ist halt ich kann sie nicht wirklich anwenden. Aber auch dies bessert sich. Es ist halt auch meine erste Programmiersprache, die ich lerne und ich war davor, was das angeht, wirklich blank. Ich lerne aber wie gesagt, so gut und viel ich kann, mache dies ja auch erst seit einer Woche und denke, ich weiß zwar, was sie bringen, aber habe Probleme mit den Klammern, etc, aber wie gesagt, ich hoffe, dass sich das bessert
PS: Ich habe es jetzt erfolgreich geschafft!;)
-
Wie lernst du denn?
Hast du ein Buch, ein Schulbuch vielleicht, oder ein Tutorial im Netz ?
-
Hacker schrieb:
Wie lernst du denn?
Hast du ein Buch, ein Schulbuch vielleicht, oder ein Tutorial im Netz ?
Ich lerne mit einem Buch.
-
Na dann können wir nur hoffen, daß dort nicht der Name J.W. vorne drauf steht
Wenn doch: Such dir ein besseres Buch.
-
Wieso !?
Jürgen Wolf hat gute Bücher geschrieben, ich hab zum Beispiel C++ - von A bis Z.
Es ist halt nur voll von irgendwelchen Müll, der die Seiten manchmal doppelt solange wie nötig macht...
aber halt auch nur manchmal
-
Das würde dann wohl erklären, wie man zu solchem Code kommt :D. Ich hab' mich zwar noch nicht ernsthaft mit seinen Büchern beschäftigt, aber hier sind schon genug JW-Opfer gewaltig auf die Nase gefallen und mussten auf den richtigen Weg zurückgeführt werden, weil seine Bücher auf den ersten Blick schön aussehen, aber viele Details fehlerhaft darstellen.