====== Aufgabe: Münzenspiel ======
===== Spielregeln =====
- Zu Beginn legen die Spieler einige Münzen (10 - 30) auf den Tisch.
- Zwei Spieler nehmen nun abwechslungsweise eine, zwei oder drei Münzen vom Tisch.
- Gewonnen hat der Spieler, der zuletzt Münzen vom Tisch genommen hat.
===== Auftrag =====
Schreiben Sie ein Programm, um das Spiel zu spielen.
== Ablauf in der Konsole ==
Willkommen zum Münzenspiel
Es sind noch 11 Münzen auf dem Stapel
Spieler 1 nimm 1-3 Münzen > 3
Es sind noch 8 Münzen auf dem Stapel
Spieler 2 nimm 1-3 Münzen > 7
Du darst höchstens 3 Münzen nehmen
Es sind noch 8 Münzen auf dem Stapel
Spieler 2 nimm 1-3 Münzen > 2
Es sind noch 6 Münzen auf dem Stapel
Spieler 1 nimm 1-3 Münzen > 0
Du musst mindestens 1 Münze nehmen
Es sind noch 6 Münzen auf dem Stapel
Spieler 1 nimm 1-3 Münzen > 3
Es sind noch 3 Münzen auf dem Stapel
Spieler 2 nimm 1-3 Münzen > 3
Spieler 1 hat verloren
Bis bald
=== Programmgerüst mit Logik ===
Als Vorbereitung haben Sie im Programmgerüst die Programmlogik als Kommentare umgesetzt.
import java.util.Scanner;
/**
* play a game with coins
*
* @author Marcel Suter
* @since 2018-09-28
* @version 1.0
*/
public class CoinGame{
static Scanner scanner;
/**
* constructor
*/
public CoinGame() {
scanner = new Scanner(System.in);
}
/**
* starts the execution
*
* @param args
* command line arguments
*/
public static void main(String[] args) {
CoinGame program = new CoinGame();
System.out.println("Willkommen zum Münzenspiel");
program.play();
System.out.println("Bis bald");
scanner.close();
}
/**
* play the coin game
*/
private void play() {
// TODO Variablen deklarieren
// TODO aktueller Spieler gleich 1
/* generate random number of coins
between 10 and 30 */
TODO = (int)(Math.random() * 20 + 10);
// TODO Solange Restliche Münzen grösser Null
// TODO Ausgabe: Restliche Münzen
// TODO Ausgabe: aktueller Spieler nimm 1-3 Münzen
// TODO Eingabe: Anzahl Münzen
// TODO Falls Anzahl Münzen kleiner 1
System.out.println("Du musst mindestens 1 Münze nehmen");
// TODO Sonst
// TODO Falls Anzahl Münzen grösser 3
// TODO Ausgabe: Du kannst höchstens 3 Münzen nehme
// TODO Sonst
// TODO Reduziere Restliche Münzen um Anzahl
// TODO Aktueller Spieler = 3 - Aktueller Spieler
// Ende der inneren Selektion
// Ende der äusseren Selektion
// Ende der Iteration
// TODO Ausgabe: aktueller Spieler hat verloren
}
}
=== Hinweise ===
== Zufällige Anzahl Münzen ==
Zu Beginn des Programms wird eine zufällige Anzahl Münzen generiert.
Dies geschieht mit dem Befehl ''... (int)(Math.random() * 20 + 10);''
- ''Math.random()'' erzeugt eine Zufallszahl zwischen 0 und 1.
- Multipliziert man diese Zufallszahl mit 20, so erhält man eine Zahl zwischen 0 und 20.
- Nun addiert man 10, so erhält man eine Zahl zwischen 10 und 30.
Sie brauchen das Ergebnis dieses Befehls nur in einer Variable zu speichern.
== Aktueller Spieler ==
Die Spieler 1 und 2 ziehen abwechslungsweise.
Für die Anzeige des jeweils aktuellen Spielers, benötigen wir eine Variable.
Diese Variable erhält am Anfang den Wert ''1'', also ist Spieler **1** am Zug.
Hat der Spieler eine gültige Anzahl eingegeben, so wechselt der Spieler.
Dazu rechnen wir ''Aktueller Spieler = 3 - Aktueller Spieler''.
* Ist der aktuelle Spieler = ''1'', so ist das Resultat der Rechnung ''2''.
* Ist der aktuelle Spieler = ''2'', so ist das Resultat der Rechnung ''1''.
Das Resultat wird in der Variable für den aktuellen Spieler gespeichert.
===== Vorgehen =====
Stellen Sie nach jedem Schritt sicher, dass das Programm korrekt kompiliert wird.
Fahren Sie erst fort, nachdem alle Fehler korrigiert sind.
=== 1. Programmgerüst mit Logik ===
- Erstellen Sie einen neues Modul in Ihrem Projekt.
- Kopieren Sie das Programmgerüst in ihre IDE
=== 2. Variablen ===
- Bestimmen Sie alle benötigten Variablen mit Bezeichnung (Name) und Datentyp (int, char, float, boolean, ...).
- Deklarieren Sie die Variablen in der Methode ''play()''.
=== 3. Ein- / Ausgaben ===
Realisieren Sie alle Ein- und Ausgaben
=== 4. Selektionen und Iterationen ===
Realisieren Sie schrittweise die Selektionen und Iterationen.
=== 5. Testen ===
Spielen Sie das Spiel gegen sich selber oder einen Kollegen.
Prüfen Sie auch, wie das Programm auf ungültige Züge (z.B. 0 Münzen, 5 Münzen) reagiert.
Zeigt das Programm den Sieger korrekt an?
===== Erweiterung =====
Erstellen Sie ein neues Programm (CoinsSolo), bei dem ein Spieler gegen den Computer spielen kann.
Für den Zug des Computers können Sie verschiedene Varianten programmieren:
* Der Computer nimmt immer genau 1 Münze
* Der Computer nimmt eine zufällige Anzahl Münzen \\ ''coinTake = (int)(Math.random() * 3 + 1);''
* Der Computer nimmt genau so viele Münzen, dass er am Ende gewinnt.
----
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] (c) Marcel Suter