Computer bescheißt im Spiel

Ich bin gerade dabei ein paar Visual c++ Tutorials durchzuarbeiten und bin gerade dabei ein Nimm-Spiel zu schreiben.

[erklärung]
Man legt eine Bestimmte Anzahl an Münen auf den Tisch und jeder darf abwechselnd 1-3 Münzen ziehn, derjenige der die letzte Münze nimmt hat gewonnen
[/erklärung]

Der Computer Spielt eigentlich auch ganz fair bis zum letzten Zug, dann nämlich bricht er die Regeln meiner Programmierung und zieht 4 Münzen, jetzt habe ich das mit einer while schleife abgefangen und was macht der PC? Er zieht 3 und gewinnt doch noch :( Könnt ihr mal den Code durchschauen und mir sagen was ich falsch Programmiert habe?

Code:
#include <iostream.h>
#include <stdlib.h>

int AnzahlderMuenzen;
int computerzug;
int zugspieler2;

int RandomInt(int iMin, int iMax)
{
	return iMin + int((float)(iMax+1) * rand()/(RAND_MAX+1.0));
};


void main()
{
	cout << "Mit wie vielen Muenzen wollen wir anfangen? :";
	cin >> AnzahlderMuenzen;
	while (AnzahlderMuenzen > 0)
	{
		cout << "Der Computer ist dran"<< endl;
		computerzug = RandomInt(1, 3);
		if (computerzug >3)
			cout << "Der Computer zieht " << computerzug << " Muenzen!" << endl;
		else
			;
			while (computerzug > 3 || computerzug < 1)
		{
			cout << "Der Computer hat einen ungültigen Zug gemacht!";
			cout << "Der Comnputer zieht nochmal!";
			computerzug = RandomInt(1, 3);
		}
		cout << "Der Computer zieht " << computerzug << " Muenzen!" << endl;

		AnzahlderMuenzen = AnzahlderMuenzen - computerzug;
		if (AnzahlderMuenzen <= 0)
		{
			cout << "Der Computer hat gewonnen!" << endl;
			break;
		}
		else
		{
			cout << "Es liegen noch " << AnzahlderMuenzen << " Muenzen auf dem Tisch" << endl;
			cout << "Spieler 2 Sie sind dran!" << endl;
		}
		cout << "Spieler 2 wie viele Muenzen moechten Sie ziehen? :";
		cin >> zugspieler2;
				while (zugspieler2 > 3 || zugspieler2 < 1)
		{
			cout << "Das ist eine Ungueltige Eingabe, geben Sie bitte eine Zahl zwischen 1 und 3 ein";
			cout << "Spieler 2 wie viele Muenzen moechten Sie ziehen? :";
			cin >> zugspieler2;
		}
		AnzahlderMuenzen = AnzahlderMuenzen - zugspieler2;
		if (AnzahlderMuenzen <= 0)
			cout << "Spieler 2 Sie haben gewonnen" << endl;
		else
			cout << "Es liegen noch " << AnzahlderMuenzen << " Muenzen auf dem Tisch" << endl;
	}
}

P.S.:Bitte nicht auf den Schreibstyl achten!

Bin um jede Antwort dankbar
 
1. RandomInt liefert Zahlen von iMin bis iMin+iMax.
2. rand wird nie mir srand initialisiert, daher macht der Computer bei jedem Start des Programms die selben Züge.
3. Was sollen Zeile 24/25?
 
lagalopex, das ist einfach nur damit das if auch ein else hat, ist kein schöner programmierstyl und auch net unbedingt notwendig, aber das habe ich mir halt so geschrieben gehabt (ich schreibe erst if und else dann weise ich if was zu und dann else wobei hier else nicht beachtet worden ist)

wie kann ich dann einen richtigen zufallszahlengenerator basteln?

christian
 
häufig wird das folgende konstrukt benutzt:
Code:
#include <time.h>
...
int main()
{
    srand(time(0));
...
}

und in deinem Rand einfach "iMax" durch "iMax - iMin" schreiben...
 
merker, doch er soll auch gewinnen könne, aber nicht jedes mal!

danke für die code tips werde dieses wochenende mal umschreiben und neu testen.

christian
 
Zurück
Oben