Wie programmiere ich mehrere Runden in C++?
Hallo Leute,
ich beschäftige mich seit ca. 1 Monat mit C++ und habe jetzt Schere Stein Papier programmiert, ich werde gleich nach der frage den Code posten.
Nun zur Frage:Wenn ich das Programm starte läuft alles so wie ich es wollte, allerdings kann ich nur eine Runde spielen und weiß nicht, wie ich es so machen kann, dass ich z. B. 12 Runden spielen kann.
Weiß jemand, wie ich das anrichten soll, sodass ich mehrere Runden spielen kann? Ich wär für jede Antwort dankbar.
Am besten wäre, wenn jemand mein Code überarbeitet.
#include <iostream> #include <stdlib.h> using namespace std; main() { srand(time(NULL)); int wahl_pc; int wahl_spieler; cout<<"bitte wähle ein der drei items \n"; cout<<"1.nSchere\n"; cout<<"2.Stein \n"; cout<<"3.Papier \n"; cout<<"hier eingeben": cin>>wahl_spieler; //Der zufallsgenerator wahl_pc=1+(rand()%(4-1)); // Die vergleiche zu schere if(wahl_spieler==wahl_pc) { cout<<"unetschieden"; } if(wahl_spieler==1 && wahl_pc==2) { cout<<"computer gewinnt stein schlägt schere"; } if(wahl_spieler==1 && wahl_pc==3) { cout<<"Du gewinnst schere schlägt stein"; } //vergleiche zum stein if(wahl_spieler==2 && wahl_pc==1) { cout<<"Du gewinnst Stein schlägt Schere"; } if(wahl_spieler==2 && wahl_pc==3) { cout<<"Computer gewinnt Papier schlägt Stein"; } //Die vergleiche zu papier if(wahl_spieler==3 && wahl_pc==1) { cout<<"Computer gewinnt Schere schlägt papier"; } if(wahl_spieler==3 && wahl_pc==2) { cout<<"Du gewinnst papier schlägt stein"; } return 0; }
4 Antworten
Du könntest eine for-Schleife verwenden ... diese lässt einen Abschnitt des Quellcodes so oft wiederholen, bis eine bestimmte Bedingung zutrifft:
for (int i = 1; i++; i > 12) { // Dies wird 12-mal wiederholt. }
Den Kommentar könntest du jetzt durch deinen Code vom ersten bis zum letzten cout ersetzen.
Auch könntest du die Anzahl der Wiederholungen variabel machen. Dafür bietet sich aber eher eine do-while-Konstruktion an:
string antwort; do { // Dies wird mindestens einmal aufgerufen. cout << "Revanche?"; cin >> antwort; } while (cin == "Ja")
Lies dir auch gern noch mal diesen Artikel zur for-Schleife auf MSDN [https://msdn.microsoft.com/de-de/library/b80153d8.aspx], diesen zur do-while-Schleife [https://msdn.microsoft.com/de-de/library/b0kk5few.aspx] durch oder schau dir einige dieser Abbildungen an: https://www.google.de/search?q=for+loop&tbm=isch Zumindest mir erscheinen die alle gut :)
Ich hoffe, ich konnte dir helfen. :-)
Frag auch gern noch mal nach :)
Mit freundlichen Grüßen,
KnorxThieus (♂)
i < 12 soll das heißen. Die Bedingung muss wahr sein damit die Schleife durchlaufen wird.
Eine Schleife oder du machst es rekursiv. Also im return die Funktion erneut aufrufen. Ich glaube dazu müsstest du aber noch ein paar Änderungen an der Programmstruktur vornehmen.
Ich habe den code hier eingefügt. die struktur hat sich von selbst geändert. Eigentlich hab ich es viel ordentlicher. Aber danke ich werde es mit der while schleife versuchen
Mit struktur meinte ich nicht die Einrückung, aber ok. Ich meinte eher mehrere Funktionen, anstatt einer Main...
"Im return" ist erstmal bullshit. return ist eine Anweisung und bis diese abgearbeitet ist kann man nix mehr machen. 2. Rekursiv ist für diesen Anwendungszweck: bullshit. Wozu 'n Stackoverflow provozieren?
Um es mal anzumerken. Ich hab nicht allzu viel Erfahrung mit c++ nur c, Java, Python und ein wenig php.... und natürlich brainfuck, aber das ist wieder was anderes.
Normaler Weise ruft man im return-Statement die Methode nocheinmal selbst auf, zumindest bei c, wenn man etwas rekursiv lösen möchte. Natürlich muss man darauf achten, dass man letzendlich den richtigen Datentyp zurückgibt und man keinen Stackoverflow provoziert. Kann man ja auch verhindern, dass es zu einem Stackoverflow kommt. Eine Abbruchbedingung sollte man auch nach Möglichkeit nicht vergessen.
Es ist ja auch nur eine Alternative zu den Schleifen. Rekursion ist nicht immer geeignet, aber man sollte es als Anfänger vielleicht an möglichst einfachen Beispielen ausprobieren, bevor man dann irgendwann 10 ineinander verschachtelte Schleifen hat und nicht mehr weiß, wo man eigentlich ist.
Um eine Methode aufzurufen, ob rekursiv oder nicht, ist definitiv kein return notwendig.
Rekursion bei soetwas trivialem zu verwenden und zu meinem man würde einem Anfänger was gutes tun ist blödsinn. Das ist so als müsste jemand ohne handwerkliche erfahrung einen Nagel in die Wand hämmern und du gibst ihm nen Nagelpistole anstatt, dass er mit nem Hammer umgehen lernt. Rekursion kommt früh genug.
Warum hast du die für C++ für den Anfang entschieden? Magst es direkt schwer haben?
Zu deiner Frage: mach eine endlosscheife um alles. Unten fragst du dann ab ( benutzereingabe) ob man weiterspielen will und brichst aus wenn man nicht will.
Übrigens sind funktionen praktisch. Probier sie mal aus.
Danke, habs jetzt geschafft. Der grund warum ich c++ genommen habe ist weil ich öfters gehört habe das dies die mächtigste Sprache sei und wenn ich diese Sprache kann der umstieg auf eine andre Sprache viel leichter wäre. Nach c++ würde ich noch gerne Java programmieren.
Mächtig, aber viel zu groß um es als anfangsprache komplett zu beherrschen. Deswegen gibt man Kindern auch keinen wissenschaftlich grafischen Taschenrechner mit wenn sie das 1x1 üben. Lerne lieber mit einer einfachen Sprache wie Python oder Ruby und arbeiter dich hoch. Java ist auch sehr populär, aber auch da wäre es toll wenn du schon etwas erfahrung in anderen Sprachen hast.
Python hat mir persönlich nicht so gefallen. Deshalb werde ich java ausprobieren und schauen wie es mir so gefällt.
Jupp mach das. Ein Blick auf Ruby schadet aber auch nicht. Ist eine Scriptsprache wie Python, aber die einrückung spielt keine Rolle. Scriptsprachen sind erstmal einfacher auszuführen und einfacher zu debuggen, benötigen aber meistens nicht eine komplette Entwicklungsumgebung wie etwa java oder c# (wenn du auf windows unterwegs bist auch eine gute alternative)
Schleifen ?:)