Die Regeln des Würfelspiels 10000 sind im Internet auffindbar. Für gewöhnlich wird zur Auswertung ein Block genommen, darauf eine Tabelle mit den Namen der Spieler geschrieben und dann die Ergebnisse der einzelnen Würfe irgendwie notiert. Ich bin ein Nerd, also will ich das im Terminal haben und weil ich einerseits faul, andererseits aber auch recht neugierig bin, habe ich ChatGPT das notwendige Skript schreiben lassen. Nach zwei Korrekturen ist das hier rausgekommen – und es funzt!
#!/bin/bash
# Funktionsdefinition: Berechne Punkte für das Würfeln eines einzelnen Spielers
# In diesem Fall wird der gesamte Wert als Eingabe genommen
calculate_points() {
local total_points=$1 # Der gesamte Punktwert eines Durchgangs
echo $total_points # Der Gesamtwert wird als Punkte zurückgegeben
}
# Eingabe der Anzahl und Namen der Spieler
echo "Gib die Anzahl der Spieler ein:"
read player_count
declare -A players
declare -A scores
# Namen der Spieler einlesen
for (( i=1; i<=player_count; i++ ))
do
echo "Gib den Namen des Spielers $i ein:"
read player_name
players[$i]=$player_name
scores[$player_name]=0 # Anfangspunktzahl ist 0
done
# Das Spiel läuft, bis ein Spieler 10.000 Punkte erreicht hat
MAX_POINTS=10000
game_over=false
while [ "$game_over" = false ]; do
for player_name in "${players[@]}"; do
if [ "${scores[$player_name]}" -ge "$MAX_POINTS" ]; then
continue # Dieser Spieler hat bereits gewonnen, überspringe ihn
fi
# Spieler würfelt: Gib den Gesamtwert des Durchgangs ein
echo "Spieler $player_name, gib den Gesamtwert des geworfenen Wertes ein:"
read total_roll_value # Liest den Gesamtwert des Wurfs
# Punkte für diese Runde berechnen
points=$(calculate_points "$total_roll_value")
# Punkte zum bisherigen Punktestand hinzufügen
scores[$player_name]=$((scores[$player_name] + points))
# Zwischenergebnis ausgeben
echo "Spieler $player_name hat jetzt ${scores[$player_name]} Punkte."
# Überprüfen, ob der Spieler 10000 Punkte erreicht hat
if [ "${scores[$player_name]}" -ge "$MAX_POINTS" ]; then
echo "Spieler $player_name hat das Spiel gewonnen mit ${scores[$player_name]} Punkten!"
game_over=true
break
fi
done
done
# Endergebnis ausgeben
echo "Endergebnisse:"
for player_name in "${!scores[@]}"; do
echo "$player_name: ${scores[$player_name]} Punkte"
done