hallo zusammen,
ich habe oben ja schon eine Lösung in C gepostet.
Hier noch eine Lösung in c++ unter Verwendung einer Klasse (CWaffe).
Es wäre dadurch grundsätzlich möglich, das Spiel so zu erweitern, dass
a) mehrere Spieler mit jeweils einer eigenen Instanz von CWaffe spielen (jeder verwendet seinen eigenen Revolver)
b) der Computer einen eigenen Revolver verwendet.
In der ersten Lösung hatte ich bei jedem "Feuern" lediglich die Wahrscheinlichkeit dekrementiert , mit der ein Treffer erzielt wird
Bei jedem "Drehen" hette ich die Wahrscheinlichkeit wieder auf 1/6 hochgesetzt.
Diesmal habe ich ein Objekt erzeugt, bei dem bei jedem Drehen die Position der Kugel festgelegt wird.
Bei jedem Feuern, wird die Kugelposition dekrementiert.
In den Methoden habe ich jeweils Anweisungen eingefügt, die die aktuelle Kugelposition ausgeben.
Dies dient natürlich nur der Analyse und sollte beim Spielen auskommentiert werden.
Interessanterweise benötigt nur eine Methode einen Rückgabewert, nämlich die Methode feuern():
Wenn man ein bisschen darüber nachdenkt, ist es aber logisch.
Hier also meine Dateien:
classes/rr.h:
Code:
#include"CWaffe.h"
class CWaffe;
bool wahl();
classes/CWaffe.h:
Code:
class CWaffe
{
public:
CWaffe();
// Methoden
void vorbereiten();
void drehen();
bool feuern();
private:
// Variablen
int position;
};
classes/wahl.cpp:
Code:
#include<iostream>
using namespace std;
bool wahl()
{
bool wahl;
cout << "\tdrehen[0] oder feuern[1]" << endl;
cin >> wahl;
return wahl;
}
classes/CWaffe.cpp
Code:
#include<iostream>
#include"CWaffe.h"
using namespace std;
CWaffe::CWaffe()
{
vorbereiten();
};
void CWaffe::vorbereiten()
{
position = random()%6;
cout << "\t\t\t\t\tPosition nach dem Vorbereiten: " << position << endl;
};
void CWaffe::drehen()
{
position = random()%6;
cout << "\t\t\t\t\tPosition nach dem Drehen: " << position << endl;
CWaffe::feuern();
};
bool CWaffe::feuern()
{
if(position)
{
cout << "\t\t\t\t\tPosition vor dem Feuern: " << position << endl;
position--;
cout << "\t\t\t\t\tPosition nach dem Feuern: " << position << endl;
return 1;
}
else
{
return 0;
}
};
main.cpp:
Code:
#include<iostream>
#include"classes/rr.h"
using namespace std;
int main()
{
srandom(time(NULL));
CWaffe* dieWaffe;
dieWaffe = new CWaffe;
do
{
// Spieler ist dran
if (wahl()) // gleich feuern, wenn wahl !=0 sonst drehen
{
cout << "\tSpieler feuert!" << endl;
if(dieWaffe->feuern())
cout << "\tGlueck gehabt!" << endl;
else
{
cout << "\tPAENG! \t\tSpieler verliert\n\tGame Over" << endl;
return 0;
}
}
else
{
cout << "\tSpieler dreht!" << endl;
dieWaffe->drehen();
}
// Computer ist dran
if(random()%2)
{
cout << "\tComputer feuert!" << endl;
if(dieWaffe->feuern())
cout << "\tGlueck gehabt!" << endl;
else
{
cout << "\tPAENG! \t\tComputer verliert\n\tGame Over" << endl;
return 0;
}
}
else
{
cout << "\tComputer dreht!" << endl;
dieWaffe->drehen();
}
}
while(1);
}
Zum Thema Kiste dumm (dreht zufällig oder nach 5 Schuss auf jeden Fall) oder nicht:
Die Option zum Drehen ist eigentlich grundsätzlich unrealistisch, da man vom logischen Standpunkt aus vor jedem Schuß drehen sollte, da hier die Chancen immer höher sind als beim sofortigen Feuern.