studyklar
GdI 2 · Übungsblatt 2 · Aufgabe 5

Schere, Stein, Papier: Gewinner und Regel bestimmen

Schere, Stein, Papier gegen den Computer: Das vorgegebene Programm liest die Wahl ein und lässt den Computer zufällig wählen. Ergänzt werden soll, wer gewinnt und nach welcher Regel. Rechts steht das fertige Programm, die Zeilen zum aktuellen Schritt sind hervorgehoben. Mit Weiter geht es Schritt für Schritt voran.

Die Aufgabe

Aufgabe 5

Es soll ein Programm entwickelt werden, mit dem man „Schnick, Schnack, Schnuck“ („Schere, Stein, Papier“) spielen kann. Der Benutzer und der Computer wählen jeweils „Schere“, „Stein“ oder „Papier“. Der Gewinner wird nach den folgenden Regeln ermittelt:

  • Schere schlägt Papier (Schere schneidet Papier)
  • Papier schlägt Stein (Papier wickelt den Stein ein)
  • Stein schlägt Schere (Stein schleift Schere)

Wählen beide dasselbe, ist es unentschieden. Ergänzen Sie das vorgegebene Programm „SchnickSchnackSchnuck.java“ um die Ermittlung und die Ausgabe des Gewinners. Es soll auch ausgegeben werden, nach welcher Regel der Gewinner bestimmt wurde.

Die Datei SchnickSchnackSchnuck.java ist vorgegeben. Sie liegt uns nicht vor; der Rahmen hier stammt aus der Musterlösung (Zeilen 1 bis 30 und 53 bis 58, samt dem Kommentar in Zeile 29 und 30, der die Lücke markiert). Neu zu schreiben sind die Zeilen 31 bis 51.

Merke: Bei vielen Fällen erst die Fälle vollständig aufschreiben, dann den Code. Drei Wahlen für jeden Spieler ergeben 3 · 3 = 9 Fälle.
  1. Die Vorgabe verstehen: Schleife, Eingabe, Zufall.
  2. Alle neun Fälle in einer Tabelle.
  3. Unentschieden, dann je eine Verzweigung pro Wahl des Computers.
  4. Ein Probelauf.

Eine Schleife ohne Ende, ein break zum Aussteigen

        while (true) {
            } else {                break;            }        }        System.out.println("Tschüss!");

while (true) hat eine Bedingung, die immer wahr ist: Die Schleife läuft ohne Ende, eine Runde pro Spiel. Hinaus kommt man nur mit break. Es beendet die Schleife sofort, danach steht „Tschüss!“ auf der Konsole.

Aus Vorlesung 2, Folie 25 („Endlosschleife“): Eine Schleife mit while (true) endet nur durch break.

Eingabe lesen und prüfen

            System.out.print("Was wählst Du - Schere, Papier, Stein (oder Abbruch)? ");            String benutzerWahl = scanner.nextLine();             if (benutzerWahl.equals("Schere") || benutzerWahl.equals("Papier")                    || benutzerWahl.equals("Stein")) {

Die Wahl wird als Text gelesen. Das if prüft mit equals und || (oder), ob sie einer der drei erlaubten Begriffe ist. Nur dann wird gespielt. Jede andere Eingabe, etwa „Ende“, führt in den else-Teil mit dem break.

Noch 8 Schritte bis zum Ergebnis
Den ganzen Lösungsweg sehen Studierende und Lehrende der HS KL. Registriere dich mit deiner Adresse @stud.hs-kl.de oder @hs-kl.de, dann geht es hier direkt weiter.

Das Programm SchnickSchnackSchnuck

neu: Zeilen 31 bis 51

Abbildung 1Das Programm SchnickSchnackSchnuck

neu: Zeilen 31 bis 51

import java.util.Random;import java.util.Scanner; public class SchnickSchnackSchnuck {     public static void main(String[] args) {         Scanner scanner = new Scanner(System.in);        Random r = new Random(); // Zufallsgenerator         while (true) {            System.out.print("Was wählst Du - Schere, Papier, Stein (oder Abbruch)? ");            String benutzerWahl = scanner.nextLine();             if (benutzerWahl.equals("Schere") || benutzerWahl.equals("Papier")                    || benutzerWahl.equals("Stein")) {                 int i = r.nextInt(1, 4); // Erzeugt zufällige Zahl zwischen 1 und 3                 String computerWahl = "Schere";                if (i == 1) {                    computerWahl = "Papier";                } else if (i == 2) {                    computerWahl = "Stein";                }                 System.out.println("Der Computer hat " + computerWahl + " gewählt.");                 // Gib aus, ob der Computer oder der Benutzer gewonnen hat -                // und nach welcher Regel (oder ob es unentschieden ist)                if (computerWahl.equals(benutzerWahl)) {                    System.out.println("Unentschieden - beide haben " + computerWahl + " gewählt");                } else if (computerWahl.equals("Schere")) {                    if (benutzerWahl.equals("Papier")) {                        System.out.println("Computer gewinnt - Schere schneidet Papier");                    } else { // Benutzer muss Stein gewählt haben                        System.out.println("Benutzer gewinnt - Stein schleift Schere");                    }                } else if (computerWahl.equals("Stein")) {                    if (benutzerWahl.equals("Papier")) {                        System.out.println("Benutzer gewinnt - Papier wickelt Stein ein");                    } else { // Benutzer muss Schere gewählt haben                        System.out.println("Computer gewinnt - Stein schleift Schere");                    }                } else { // Computer muss Papier gewählt haben                    if (benutzerWahl.equals("Stein")) {                        System.out.println("Computer gewinnt - Papier wickelt Stein ein");                    } else { // Benutzer muss Schere gewählt haben                        System.out.println("Benutzer gewinnt - Schere schneidet Papier");                    }                }                 System.out.println();            } else {                break;            }        }        System.out.println("Tschüss!");    }}
LegendeDas ganze Programm.