Russian Roulette Created on: 05.08.2008 Author: enco Das Programm wurde unter Linux geschrieben und erfolgreich kompiliert. Unter Windows müssen einige Änderungen vorgenommen werden.
#include <iostream> //Für die Ein- und Ausgabe #include <time.h> //Für die Initialisierung der Random-Funktion #include <cstdlib> //Für die Random-Funktion selbst using namespace std; //Damit ich mir das lästige std:: vor den Befehlen ersparen kann. void msWait(unsigned int _ms); //Hier wird die Funktion deklariert, die weiter unten zu finden ist //Hier beginnt das eigentliche Programm int main(){ // Ein paar Zeilen zur Begrüßung cout << "Russian Roulette\nJust a Game ... >:D\n" << endl; //Anzahl der Plätze im Revolver wo Kugeln reinkönnen int cartridges = 6; //In diesem Fall 6 cout << "Let's play with " << cartridges << " cartridges" << "... You will lose!\n" << endl; //Funktion um auch wirklich "zufällige" Zahlen zu erhalten ;-) srand((unsigned)time(NULL)); //Die Position an der die Kugel im Revolver ist + Vorbeugung gegen nen kleinen Bug int DeadPosition = rand() % (cartridges + 1); if(DeadPosition == 0){DeadPosition = 1;} //Eigene Position wählen int CurrentPosition = rand() % (cartridges + 1); if(CurrentPosition == 0){CurrentPosition = 1;} //Nur zu Debug Zwecken, im eigentlichen Spiel macht es keinen Sinn zu wissen an welcher Position die Kugel steckt ;-) cout << "\nCurrent Pos: " << CurrentPosition << " DeadPos: " << DeadPosition << "\n" << endl; int Winner = 0, i = 1; while(1){ if(i%2 == 0){ //Spieler ist dran cout << "::: > Your turn!" << endl; //Neu drehen oder gleich schießen? cout << "[Q] Do you wanna spin the cylinder? ([y]es)"; char spin, NewPos = 0; cin >> spin; if(spin == 'y'){ //Neu drehen, also komplett neue Position cout << "=> Spinning? Haha that won't help you!" << endl; NewPos = rand() % (cartridges + 1); if(NewPos == 0){NewPos = 1;} CurrentPosition = NewPos; } //Hier wird eine Zeit zwischen 500ms und 1.5s gewartet. Ein bisschen Spannung muss sein ;-) int ms = ((rand() % 1500) + 500); msWait(ms); //Prüfen ob tot oder nicht if(CurrentPosition == DeadPosition){ cout << "[XXX] BANG BANG You're dead! - Computer Wins!" << endl; Winner = 1; //Es ist wichtig hier aus der Schleife zu springen, da es logischerweise nicht mehr weitergehen kann wenn man tot ist break; } else{ cout << "[O] You live ... You're lucky!\n" << endl; } } else{ //Computer ist dran //Da hier alles ziemlich gleich abläuft wie beim Spieler spare ich mir die Kommentare. cout << "::: > Computers turn!" << endl; //Nach einem Zufallswert wird ermittelt ob der Computer dreht oder schießt int spin = ((rand() % 2) + 1), NewPos = 0; if(spin == 1){ cout << "=> The Computer want to spin ..." << endl; NewPos = rand() % (cartridges + 1); if(NewPos == 0){NewPos = 1;} CurrentPosition = NewPos; } int ms = ((rand() % 1500) + 500); msWait(ms); if(CurrentPosition == DeadPosition){ cout << "[XXX] 5Y573M 3RR0R - Player Wi....." << endl; Winner = 2; break; } else{ cout << "[O] Computer's lucky!\n" << endl; } } //Geschossen, also eine Position weiter CurrentPosition++; if(CurrentPosition > 6){ CurrentPosition = 1; } //i wird erhöht. Damit wird dem COmputer klargemacht, dass der nächste Spieler dran ist. i++; msWait(500); } if(Winner == 1){ cout << "\n===============================\nThe Game is over, Computer Wins after " << i << " rounds!" << endl; } else{ cout << "\n===============================\nThe Game is over, You Win after " << i << " rounds!" << endl; } return 0; } //Ein Äquivalent zur Sleep() Funktion unter Windows void msWait(unsigned int _ms){ usleep(_ms * 1000); }