Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Schweinchen (Schleifen)

Schweinchen ist ein Würfelspiel, das in deiner Region sicher ähnlich oder ganz anders heißt.

Die Regeln sind allerdings denkbar einfach:

 

  • Gespielt wird mit einem normalen (sechsseitigen) Würfel. Ziel des Spieles ist, als Ersty 100 Punkte zu erreichen.
  • Es wird reihum gewürfelt.
  • Ist ein Spiely an der Reihe, würfelt ette mindestens einmal. Augenzahlen von 2–6 werden in dieser Runde gutgeschrieben und ette hat die Option, noch einen Wurfversuch hinzuzufügen.
  • Würfelt das Spiely jedoch eine 1, verfallen sämtliche ette Punkte der Runde und das nächste Spiely ist an der Reihe.

 

Beispiele:

Alice hat 10 Punkte auf ihrem Konto. Sie ist an der Reihe und würfelt (nacheinander, fallweise):

  • 1
    Alice bekommt keine Punkte. Das nächste Spiely ist an der Reihe. Ihr Konto hat weiterhin 10 Punkte.
  • 4, 4, 4, 4, 4
    Nach diesen Würfen beschließt sie, ihre Runde zu beenden. Das nächste Spiely ist an der Reihe und Alice bekommt 5×4 = 20 Punkte gutgeschrieben. Auf ihrem Konto sind nun 10 + 20 = 30 Punkte.
  • 6, 6, 6, 6, 6, 1
    Alice bekommt keine Punkte, wegen der letzten 1. Das nächste Spiely ist an der Reihe. Alices Konto hat weiterhin 10 Punkte.

 

Deine Aufgabe:

Schreibe ein Schweinchen-Programm für zwei Spieler, das das Würfeln und die Rechnerei übernimmt.
Das User-Interface unterliegt gänzlich deinem persönlichen Geschmack, sollte aber benutzbar sein.

 

Fleißaufgabe:

Schreibe dein Programm so um, dass ein Einzelspiely gegen den Computer spielen kann.
Entwickle dafür eine nachvollziehbare Vorgehensweise für den Computer und lege ihn in einem Kommentarteil dar. Alles ist erlaubt, außer ein Computerpart, der einfach nur schummelt — es sei denn, der Computer schummelt auf wirklich clevere Weise.

2 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (2)

virgil 3. August 2021 00:31   reply report
@ BitSven:
100 Punkte sind das zu erreichende Minimum. Ist die 100 erreicht oder überschritten, gilt das Spiel als gewonnen. Das ist tatsächlich nicht aus der Beschreibung zu entnehmen: Vielen Dank!

Das User-Interface ist frei wählbar, wie erwähnt.
BotSven 2. August 2021 14:20   reply report
Was passiert, wenn über 100 Punkte erreicht werden?
Und was für ein User-Interface wäre denn gewünscht? Reicht CLI oder soll was mit JavaFX gebastelt werden?

Ansonsten aber eine schöne Aufgabe gewesen, die allerdings mehr Schreibarbeit als nachdenken war.

2 Lösung(en)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class schweinchen {

    //Das klassische Schweinchen Spiel. Dein Ziel, erreiche eine insgesamte Augenzahl von 100, würfelst du dabei eine 1 verlierst du alle Punkte. Mit einer vorzeitigen Pause kannst du deine Punkte sichern. Sei dabei aber schneller als dein Gegner!

    private static boolean GAME_RUNNING = false;
    private static boolean IN_ROUND = false;

    public static void main(String[] args) throws IOException {
        GAME_RUNNING = true;
        gameStart();
    }
    private static void gameStart() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int sumPlayerOne = 0;
        int sumPlayerTwo = 0;
        boolean trueIfPlayerOne = true;
        while(GAME_RUNNING) {
            IN_ROUND = true;
            int sumOfRolledDices = 0;
            if(trueIfPlayerOne){
                System.out.println("SPIELER 1: ");
            }else{
                System.out.println("SPIELER 2: ");
            }
            while (IN_ROUND){
                int currentDice = throwDice();
                System.out.printf("Deine gewürfelte Augenzahl: %d \n\n", currentDice);
                if(currentDice == 1){
                    System.out.println("Damit ist dein Zug zu Ende.\n");
                    break;
                }
                sumOfRolledDices += currentDice;

                int tempSum = trueIfPlayerOne ? sumPlayerOne : sumPlayerTwo;
                System.out.printf("Du hast in diesem Zug eine Augenzahl von %d gewürfelt und insgesamt %d. Möchtest du weiterwürfeln? " +
                        "Drücke 'j', ansonsten drücke 'n'\n", sumOfRolledDices, sumOfRolledDices+tempSum);
                if(reader.readLine().equals("n")){
                    if (trueIfPlayerOne){
                        sumPlayerOne += sumOfRolledDices;
                    }else{
                        sumPlayerTwo += sumOfRolledDices;
                    }
                    trueIfPlayerOne ^= trueIfPlayerOne;
                    IN_ROUND = false;
                }
                if(sumPlayerOne == 100 ){
                    System.out.println("Spieler 1 hat gewonnen.");
                }else if(sumPlayerTwo == 100){
                    System.out.println("Spieler 2 hat gewonnen.");
                }
            }
        }
    }

    private static int throwDice() {
        return (int) (Math.random()*6)+1;
    }

}

                

Lösung von: Name nicht veröffentlicht

let players = [
  { name: '', score: 0 },
  { name: '', score: 0 }
];

let curPlayer = 1,    // fällt in zeile 45 auf 0 zurück
    gameOver = false; // wird TRUE, wenn ein spiely 100 punkte erreicht

// namen für spielys abfragen
// (erleichtert die übersicht)
players[0].name = prompt("Name Spieler #1:").toUpperCase();
players[1].name = prompt("Name Spieler #2:").toUpperCase();

// würfeln
function roll() { return 1 + Math.floor(Math.random()*6) }

// spielrunde für ein spiely
function turn(player) {
  let curSum = 0,     // summe der runde
      quit = false,   // abbruch der runde
      dice;           // aktueller wurf
  alert(`${player.name} ist dran (${player.score}).`);
  while (!quit) {
      dice = roll();
      if (dice == 1) {
        alert('Eine 1. So\'n Pech!');
        quit = true;
      } else {
        curSum += dice;
        quit = !confirm(`
          Du würfelst eine ${dice} (Summe: ${curSum}).\n
          Nochmal würfeln?
        `);
        if (quit) {
          player.score += curSum;
          if (player.score >= 100) gameOver = true;
        }
      }
  }
}

// *main*
while (!gameOver) {
  // nächstes spiely
  curPlayer == 0 ? curPlayer = 1 : curPlayer = 0;
  turn(players[curPlayer]);
  if (gameOver) alert(`
    ${players[curPlayer].name} gewinnt (${players[curPlayer].score}).
  `);
}

                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Leicht
Webcode: q9hu-vv4t
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen