diff --git "a/\303\234bungen/Woche-8/black_Jack.sh" "b/\303\234bungen/Woche-8/black_Jack.sh" new file mode 100644 index 0000000000000000000000000000000000000000..b9115d1425cc52137048100d4b338b2720ff6de8 --- /dev/null +++ "b/\303\234bungen/Woche-8/black_Jack.sh" @@ -0,0 +1,103 @@ +#!/bin/bash + +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 +) + +choice="j" +bilanz=1000 + +karte_ziehen() { + local keys=(${!deck[@]}) + local random_index=$((RANDOM % ${#keys[@]})) + local card_name=${keys[$random_index]} + local card_value=${deck[$card_name]} + echo "$card_name" +} + +update_score() { + local -n cards=$1 + local -n score=$2 + local -i var=${deck["$3"]} + cards+=("$3") + ((score += var)) + if [[ $score -gt 21 ]]; then + for i in "${!cards[@]}"; do + if [[ ${cards[i]} == Ass ]]; then + cards[i]="Ass:1" + ((score -= 10)) + break + fi + done + fi +} + +echo -e "\033[34mWillkommen zu Black Jack!\033[0m\n" + +while [[ true ]]; do + read -p $'\033[1mMöchten Sie eine Runde spielen? j/n\033[0m ' choice + if [[ $choice != "j" ]]; then + break + fi + + if [[ $bilanz -lt 0 ]]; then + echo -e "Leider haben Sie nicht genügend Guthaben für diese Runde." + break + fi + + player_score=0 + dealer_score=0 + declare -a player_cards dealer_cards + einsatz=0 + + echo -e "\033[34mIhr Kontozustand: $bilanz\033[0m" + read -p $'\n\033[1mWie viel möchten Sie setzen?\033[0m ' einsatz + + if [[ $einsatz -gt $bilanz ]]; then + echo -e "\n\033[31mLeider haben Sie nicht genügend Guthaben für diese Runde.\033[0m" + fi + + 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 zieht Karten + 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 + + # Ergebnisse auswerten + 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" + + 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 \ No newline at end of file