Würfelspiel für 2 Spieler
-
Hi, ich hab eine Hausaufgabe aufbekommen und sehen absolut nicht durch.
Da ich nicht so der Programmierer bin, wende ich mich an euch.
Hier meine Augabenstellung:
Programmieren Sie ein Würfelspiel für 2 Spieler. Jeder hat 3 Würfe. Derjenige mit der höchsten Gesamtpunktzahl hat gewonnen.Wäre schön wenn ihr mir da helfen könntet.
Danke
-
Schau dir mal rand() und srand() an, die dürften für den Anfang ausreichen (und schau mal in unser Magazin, dort hat Marc++us einen hilfreichen Artikel über Zufälle verfasst).
-
....du ganz ehrlich ich bin totaler Anfänger...ich hab keinen SChimmer was du damit meinst!!

-
In Kurzfassung: rand() liefert eine Zufallszahl zwischen 0 und RAND_MAX, die du mit verschiedenen Tricks umskalieren kannst auf (z.B.) den Bereich 1 bis 6. Du lässt dir jetzt 6 Zufallszahlen erzeugen, summierst drei davon für Spieler 1 und drei für Spieler 2 und dann vergleichst du die Summen, um den Sieger zu bestimmen.
-
oder weil die wahrscheinlichkeit, dass einer der beiden spieler gewinnt, jeweils 50% beträgt, musst du nur zufällig eine "0" oder eine "1" würfeln, und dann ausgeben "Spieler 0" hat gewonnen oder "Spieler 1" hat gewonnen...
-
@Andrey : Nicht ganz, es gibt ja noch Gleichstand. Ausserdem wäre so die Hausaufgabe ja nicht korrekt gelöst!

-
Andrey schrieb:
oder weil die wahrscheinlichkeit, dass einer der beiden spieler gewinnt, jeweils 50% beträgt, musst du nur zufällig eine "0" oder eine "1" würfeln, und dann ausgeben "Spieler 0" hat gewonnen oder "Spieler 1" hat gewonnen...
Die Wahrscheinlichkeit, dass du gewinnst hängt vom Resultat des Gegenspielers ab, das kann gar nicht 50% sein. Mach n Baum, dann merkst dus.
-
Don06 schrieb:
@Andrey : Nicht ganz, es gibt ja noch Gleichstand. Ausserdem wäre so die Hausaufgabe ja nicht korrekt gelöst!

dann soll der OP seinem lehrer einfach sagen, dass das spiel beim gleichstand einfach solange wiederholt wird, bis ein gewinner feststeht. Und es kann entweder der eine oder der andere sein... 50% :p
-
Um mal einen kleinen Tipp zu geben: Einen einzelnen Würfelwurf kannst du so realisieren:
#include <cstdlib> #include <ctime> using namespace std; int main(void) { srand(static_cast<int>(time(0))); int Wuerfelergebnis = (rand() % 6) + 1; return 0; }Die Zeilen
#include <cstdlib> #include <ctime> using namespace std;inkludieren die notwendigen Header-Dateien, damit du srand(), rand() und time() verwenden kannst und machen den Namespace std verfügbar, da man sonst immer mit std::srand(), ... auf die Funktionen zugreifen müsste.
Die Zeile
srand(static_cast<int>(time(0)));sollte nur ein einziges mal im ganzen Programm aufgerufen werden. Durch srand() wird der Zufallsgenerator mit einem bestimmten Wert (hier ein Zeitabhängiger Wert) initialisiert, da sonst bei jedem Programmdurchlauf wieder die gleichen "zufälligen" Zahlen erzeugt werden.
Mit
int Wuerfelergebnis = (rand() % 6) + 1;wird dann schließlich das Würfelergebnis erzeugt. rand() liefert eine Zufallszahl zwischen 0 und RAND_MAX. Durch rand() % 6 ergibt sich dann eine Zahl zwischen 0 und 5 (% ist Modulo, das gibt den Rest einer Division - in diesem Fall durch 6 - an). Durch addieren von 1 ergibt sich halt eine Zahl zwischen 1 und 6, also genau das, was einen Würfel ausmacht...
Den Rest solltest du eigentlich selber hinbekommen.
Felix
-
Da ich auch anfänger bin und hier zufällig draufgestoßen bin danke ich Phoemuex für die super erklärung ich werd mir die obige aufgaben stellung direkt mal zu ner kleinen Privat übung zur brust nehmen!!!
-
Hab das mal probiert und die gewünschten funktionen eingebaut.
wär super wenn jemand verbesserungen oder tipps dazu hathier der code
#include <iostream> #include <ctime> #include <string> using namespace std; int roll(); // Prototyb der Würfelfunktion // Hauptprogramm // int main() { struct S_player // Die Player struktur mit Name und Punkte { string name; int score; }; srand(static_cast<int>(time(0))); // Zufalls Zahl initialisieren int temp = 0; // Fängt die rückgabewerte der Würfelfunktion auf S_player player1,player2; // Die beiden player Strukturen player1.score = 0; // Punkte werden auf NULL gesetzt player2.score = 0; // Punkte werden auf NULL gesetzt cout << "+++ WuerfelSimulation +++" << endl<< endl; cout << "Bitte Spielernamen eingeben!" << endl<< endl; cout << "Spieler 1: "; cin >> player1.name; // Spielernamen werden eingelesen cout << "Spieler 2: "; cin >> player2.name; // Spielernamen werden eingelesen cout << "Wuerfelsimulation Starten..." << endl<< endl; system("PAUSE"); system("CLS"); for(int i =0;i < 3; ++i) // Schleife für player 1 { temp = roll(); // Temp wird die zufallszahl übergeben cout << i+1 <<". Wurf von " << player1.name; cout << ": " << temp << endl; // Wurf wird ausgegeben player1.score = player1.score + temp; // Punkte werden zusammenaddiert } cout << endl << "Gesamtpunktzahl von " << player1.name; cout << ": " << player1.score << endl << endl; for(int i =0;i < 3; ++i) // Schleife für player 2 { temp = roll(); // Temp wird die zufallszahl übergeben cout << i+1 <<". Wurf von " << player2.name; cout << ": " << temp << endl; // Wurf wird ausgegeben player2.score = player2.score + temp; // Punkte werden zusammenaddiert } cout << endl << "Gesamtpunktzahl von " << player2.name; cout << ": " << player2.score << endl << endl; if(player1.score > player2.score) // Hier die gewinn bedingungen { cout << player1.name << " gewinnt das duell" << endl; } if(player2.score > player1.score) { cout << player2.name << " gewinnt das duell" << endl; } if(player1.score == player2.score) { cout << "Gleichstand!!! keiner gewinnt!" << endl << endl<< endl; } system("PAUSE"); return 0; } // Würfelfunktion // // Aufgabe: Emuliert einen Würfel und liefert eine zahl zwischen 1 und 6 // int roll() { int Wuerfelergebnis = (rand() % 6) + 1; return Wuerfelergebnis; }