Skip to content
Snippets Groups Projects
Commit 18041981 authored by Nikolai Milenko's avatar Nikolai Milenko :grinning:
Browse files

Upload New File

parent d9371661
No related branches found
No related tags found
No related merge requests found

# Black Jack Bash-Skript
Diese Markdown-Datei enthält den Black Jack Bash-Skript-Code mit Kommentaren an den wichtigsten Stellen, um die Funktionsweise zu erklären.
---
```bash
#!/bin/bash
# Definiere das Kartendeck als assoziatives Array:
# Schlüssel = Name der Karte, Wert = Punktzahl.
declare -A deck=(
["Zwei"]=2 ["Drei"]=3 ["Vier"]=4 ["Fünf"]=5 ["Sechs"]=6
["Sieben"]=7 ["Acht"]=8 ["Neun"]=9 ["Zehn"]=10
["Bube"]=10 ["Dame"]=10 ["König"]=10 ["Ass"]=11
)
# Initialisierung der Startwerte:
# choice: Entscheidung des Spielers, bilanz: Startguthaben,
# player_cards und dealer_cards: Arrays für die gezogenen Karten.
choice="j"
bilanz=1000
declare -a player_cards dealer_cards
# Funktion zum Ziehen einer zufälligen Karte
karte_ziehen() {
local keys=(${!deck[@]})
local random_index=$((RANDOM % ${#keys[@]})) # Zufälliger Index basierend auf der Anzahl der Karten.
local card_name=${keys[$random_index]}
echo "$card_name"
}
# Funktion zur Aktualisierung des Punktestands
update_score() {
local -n cards=$1
local -n score=$2
local -i var=${deck["$3"]}
cards+=("$3")
((score += var))
if [[ $score -gt 21 ]]; then
# Falls der Punktestand über 21 liegt, prüfe ob ein Ass (11) vorhanden ist.
# Falls ja, wandle es in "Ass:1" um und reduziere den Punktestand um 10.
for i in "${!cards[@]}"; do
if [[ ${cards[i]} == Ass ]]; then
cards[i]="Ass:1"
((score -= 10))
break
fi
done
fi
}
# Begrüßungstext
echo -e "\033[34mWillkommen zu Black Jack!\033[0m\n"
# Hauptspielschleife
while [[ true ]]; do
# Frage den Spieler, ob er eine Runde spielen möchte.
read -p $'\033[1mMöchten Sie eine Runde spielen? j/n\033[0m ' choice
if [[ $choice != "j" ]]; then
break
fi
# Überprüfe, ob der Spieler genügend Guthaben besitzt.
if [[ $bilanz -lt 0 ]]; then
echo -e "Leider haben Sie nicht genügend Guthaben für diese Runde."
break
fi
# Setze Punktestände und Kartensammlungen für eine neue Runde zurück.
player_score=0
dealer_score=0
player_cards=()
dealer_cards=()
einsatz=0
echo -e "\033[34mIhr Kontozustand: $bilanz\033[0m"
# Frage den Spieler, wie viel er setzen möchte.
read -p $'\n\033[1mWie viel möchten Sie setzen?\033[0m ' einsatz
# Falls der Einsatz den aktuellen Kontostand übersteigt, wird die Runde abgebrochen.
if [[ $einsatz -gt $bilanz ]]; then
echo -e "\n\033[31mLeider haben Sie nicht genügend Guthaben für diese Runde.\033[0m"
continue
fi
# Spielerzug: Der Spieler kann Karten ziehen, bis er "stopp" sagt oder über 21 kommt.
while [[ player_score -lt 21 ]]; do
read -p $'\033[1mMöchten Sie eine Karte ziehen? j/n\033[0m ' choice
if [[ $choice != "j" ]]; then
break
fi
new_card=$(karte_ziehen)
update_score player_cards player_score "$new_card"
echo -e "\n\033[42mGezogene Karte: $new_card\033[0m"
echo -e "\033[3mIhr Punktestand: \033[31m$player_score\033[0m\n"
if [[ $player_score -gt 21 ]]; then
echo -e "\n\033[41mSie haben überzogen! Dealer gewinnt. :(\033[0m"
((bilanz -= einsatz))
exit 0
fi
done
# Dealer-Zug: Der Dealer zieht Karten, bis sein Punktestand mindestens 17 erreicht.
while [[ $dealer_score -lt 17 ]]; do
sleep 2
new_card=$(karte_ziehen)
update_score dealer_cards dealer_score "$new_card"
echo -e "\n\033[35mDealer zieht: $new_card\033[0m"
echo -e "\033[3mPunktestand Dealer: \033[31m$dealer_score\033[0m\n"
done
# Zeige die Karten und Punktestände von Spieler und Dealer an.
echo -e "\033[32mSpieler\033[0m: ${player_cards[*]} \033[3m(Punkte: $player_score)\033[0m"
echo -e "\033[35mDealer\033[0m: ${dealer_cards[*]} \033[3m(Punkte: $dealer_score)\033[0m"
# Spielauswertung: Bestimme den Gewinner und passe den Kontostand an.
if [[ $player_score -gt 21 ]]; then
echo -e "\033[41mDealer gewinnt! :(\033[0m"
((bilanz -= einsatz))
elif [[ $dealer_score -gt 21 || $player_score -eq 21 && $dealer_score -lt 21 || $player_score -gt $dealer_score ]]; then
echo -e "\033[42mSpieler gewinnt! :)\033[0m"
((bilanz += einsatz))
elif [[ $dealer_score -eq $player_score ]]; then
echo -e "\033[46mUnentschieden! :| \033[0m"
else
echo -e "\033[41mDealer gewinnt! :(\033[0m"
((bilanz -= einsatz))
fi
done
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment