Das Nim-Spiel ist ein Spiel für zwei Personen.

Statt der Streichhölzer kann man auch Münzen, Spielkarten, Bierdeckel oder andere gleichartige Gegenstände verwenden. (Wikipedia)


Übung (Nim Spiel):

Schreibe eine Funktion spiele (ohne Parameter, mit int als Rückgabewert). Implementiere in dieser Funktion den Ablauf des Nim Spiels. Es sind abwechselnd der Spieler 1 und der Spieler 2 am Zug. Der Rückgabewert der Funktion ist die Nummer des Spielers der gewonnen hat (1 oder 2). Verwende den Rückgabewert um im Hauptprogramm den Sieger auszugeben.

Beachte:

Beispiel für Spielablauf:

=== Willkommen zum Nim Spiel ===

||||||||||||| (13)
Spieler 1: 2
||||||||||| (11)
Spieler 2: _

Übung (Nim Spiel – Parameter):

Verschiebe den im vorherigen Beispiel programmierten Spielablauf in eine Funktion und mache dabei die Anzahl der Streichhölzer am Anfang und die Anzahl der Streichhölzer die maximal genommen werden dürfen durch Parameter variabel.

int spiele(int start, int max);

Parameter:


Übung (Nim Spiel – Menü):

Programmiere ein Menü zur Bedienung des Spiels:

*======================================
* Nim-Spiel
*   a .. Anzahl der Streichhölzer (13)
*   m .. Maximale Entnahme (3)
*   s .. Spielen
*   e .. Programm beenden
*======================================
Deine Wahl: _

Nach Abarbeiten eines Menüpunkts soll das Menü wieder angezeigt werden. Anfangs ist die Anzahl der Streichhölzer 13 und es dürfen max. 3 auf einmal genommen werden. Beide Werte können vom Anwender aber geändert werden.

Nimm folgendes Haupt-Programm als Startpunkt:

char taste;
int nimstart=13;
int nimmax=3;
	
do {
	// ...
} while(taste!='e');

Tipps zur Implementierung

Halte den Programmtext in main() so kurz und übersichtlich wie möglich.

Implementiere die folgenden Funktionen:

char menue(int start, int max);
int inputStart();
int inputMax();

Übung (Computergegner):

Ein Spieler soll vom Computer übernommen werden, mache über das Menü einstellbar welcher.

Implementiere verschiedene, einstellbare Schwierigkeitsstufen.

Hinweise für das Programm:

int inputGegner();
int inputSchwierigkeit();
int gegner=0; // 0-kein Computergegner
int schwierigkeit=1;

Übung (Variante):

Eine Variante des Spiels ist, dass derjenige der das letzte Streichholz nimmt verliert (nennt man auch Misère – französisch — auf deutsch etwa ein “Bettler-Spiel”). Zwischen der Original und der Misère-Variante soll über das Menü gewählt werden können.

Es soll auch bei der Misère-Variante möglich sein gegen den Computer zu spielen.

Hinweise für das Programm:

int inputMisere();
int misere=0; // 1 um Misere einzuschalten