---
# System prepended metadata

title: 【dialog 專案作業】布丁狗夢工廠
tags: [Linux]

---

## 環境說明
作業系統 : ubuntu 22.04.3 Live Server
適用服務：dialog –version #Version: 1.3-20211214
程式作者：EvelynChen、RichChang、WeiTseng、MinaKao
最後更新：2024/2/29 17：51

## 代碼
pompom.sh
```bash=
#!/bin/bash

# 安裝環境
sudo apt install dialog mariadb-server -y
# 建立資料集
sudo mysql -uroot -p123456 -e "create database pudding;"
# 建立資料表
sudo mysql -uroot -p123456 -Dpudding -e "USE pudding; create table player_record (player_name VARCHAR(40),  power int, coin int);"

restart_game() {
    dialog --title "重新開始遊戲" --yesno "是否要重新開始遊戲？" 10 70
    RESTART_OPTION=$?

    if [ "$RESTART_OPTION" -eq 0 ]; then
        # 重新執行遊戲的主要部分
        bash pudding2.sh
    else
        # 如果玩家選擇不重新開始，則顯示結束訊息並退出
        dialog --title "遊戲結束" --msgbox "感謝您的遊玩！再見！" 10 70
        exit 0
    fi
}

# 遊戲介紹
dialog --title "歡迎來到布丁狗夢工廠" --msgbox "在這個五分鐘小遊戲裡，你可以收養一支專屬於你的布丁狗，\n並且在他的人生道路上做出選擇，\n創造出屬於你的布丁狗吧！" 10 70

# 定義變數
name=""
power=100
coin=500

# 玩家名稱輸入
name=$(dialog --inputbox "請輸入您的名稱:" 10 70 3>&1 1>&2 2>&3)

# 資料庫 新增飼主名稱
sudo mysql -uroot -p123456 -Dpudding -e "USE pudding; INSERT INTO player_record (player_name, power, coin) VALUES ('$name', '$power', '$coin');"

# 進度條
{
    for ((i = 0 ; i <= 100 ; i+=20)); do
        # 發送新的進度條百分比
        echo $i
        sleep 0.2
    done
} | dialog  --gauge "布丁狗正在努力加載..." 10 70 0

# 收養布丁狗
dialog --title "收養一隻布丁狗" --yesno "有一天，你在下班的路上，看到一個髒兮兮的紙箱，\n湊近一看，發現居然是一隻小布丁狗，\n他也正好抬起頭來看向你。\n\n你是否願意收養這隻布丁狗呢？" 10 70
YESNO=$?

if [ "$YESNO" -ne 0 ]; then
    dialog --title "結局" --msgbox "你看著可憐的布丁狗，雖然心生憐憫，\n但一想到自己家裡根本沒有條件再養一隻狗狗，\n雖然不捨，也只能含淚拒絕布丁狗的眼神攻勢。\n\n幾年後的今天，你再次回想起那個雨夜，心裡生起一陣婉惜。" 10 70
    restart_game	
else
    choice=$(dialog --title "收養一隻布丁狗" --menu "因為不忍心布丁狗被遺棄，你將紙箱抱了回家，\n在回家的路上你路過了寵物店，但手上的錢只夠你買一樣商品，\n你會選擇購買：" 17 70 4 \
    1 "柔軟的寵物床(200元)" \
    2 "狗狗罐頭(50元)" \
    3 "狗狗衣服(100元)" \
    4 "狗狗項圈(80元)" 3>&1 1>&2 2>&3)

    case $choice in
        1) item="柔軟的寵物床(200元)"
           cost=200 ;;
        2) item="狗狗罐頭(50元)"
           cost=50 ;;
        3) item="狗狗衣服(100元)"
           cost=100 ;;
        4) item="狗狗項圈(80元)"
           cost=80 ;;
    esac

    # 檢查金額是否足夠購買商品
    if [ $coin -lt $cost ]; then
        dialog --title "購買失敗" --msgbox "購買餘額不足，無法購買此商品。" 10 70
    else
        coin=$((coin - cost))
        dialog --title "購買成功" --msgbox "成功購買 $item" 10 70
    fi
fi

dialog --title "歡迎來到布丁狗夢工廠" --msgbox "看著懷裡睡得打呼嚕的小布丁狗，\n你終於深刻體會到，自己終於不再是孤單一人，\n你下定決心，一定要給布丁狗最完善的照顧！" 10 70

# 才藝課選擇
TALENT_CHOICE=$(dialog --title "布丁狗的才藝課程" --menu "在經歷了幾年的養成，小布丁狗長大了不少，\n作為家長兼飼主的你，也是時候該為你的布丁狗思考一下他的才藝課了。\n\n在經過與布丁狗的聊天與志向討論後，你決定為他報名：" 14 70 4 \
1 "烹飪課(消耗200元，10點體力)" \
2 "運動課(消耗150元，15點體力)" \
3 "藝術課(消耗180元，12點體力)" \
4 "AI大數據狗才養成班(消耗500元，20點體力)" 3>&1 1>&2 2>&3)

# 才藝課消耗金錢和體力
case $TALENT_CHOICE in
    1) cost=200; energy=10 ;;
    2) cost=150; energy=15 ;;
    3) cost=180; energy=12 ;;
    4) cost=500; energy=20 ;;
esac

# 檢查金額是否足夠購買才藝課程
if [ $coin -lt $cost ]; then
    dialog --title "購買失敗" --msgbox "購買餘額不足，無法購買此才藝課程。" 10 70
else
    coin=$((coin - cost))
    power=$((power - energy))
    dialog --title "購買成功" --msgbox "成功購買 $talent" 10 70
fi
# 打工的選擇
if [ "$TALENT_CHOICE" -eq 4 ]; then
    # 如果選擇了AI大數據狗才養成班，顯示所有五個打工選項
    WORK_CHOICE=$(dialog --title "打工選擇" --menu "布丁狗完成才藝課程後，您決定為他選擇一份工作：" 14 70 5 \
    1 "女僕咖啡廳" \
    2 "健身教練" \
    3 "街頭賣藝" \
    4 "爬蟲搶票黃牛" \
    5 "Python接案工程師" 3>&1 1>&2 2>&3)
else
    # 如果選擇了其他才藝課程，只顯示前三個打工選項
    WORK_CHOICE=$(dialog --title "打工選擇" --menu "布丁狗完成才藝課程後，您決定為他選擇一份工作：" 14 70 3 \
    1 "女僕咖啡廳" \
    2 "健身教練" \
    3 "街頭賣藝" 3>&1 1>&2 2>&3)
fi


# 顯示結局與剩餘金錢和體力
case $WORK_CHOICE in
    1)
        if [ "$TALENT_CHOICE" -eq 1 ]; then
            # 女僕咖啡廳成功
            MSG="布丁狗最終選擇去女僕咖啡廳打工：\n\n布丁狗在進入女僕咖啡廳後，迅速拿出他最拿手的一道料理：\n布丁狗蛋糕(布丁口味的布丁狗造型蛋糕)。\n並憑藉可愛的女僕料理魔法吸引許多客人，\n最終成為了女僕咖啡廳的招牌女僕。"              
        else
            # 女僕咖啡廳失敗
            MSG="布丁狗最終選擇去女僕咖啡廳打工：\n\n由於一開始缺乏打工的經驗，布丁狗打破了好幾個盤子，\n可憐的布丁狗，為了要賠償咖啡廳的損失，不得不留下來洗碗，\n不幸的是，在洗碗的過程中，布丁狗又不小心打破了更多的盤子。\n最終布丁狗不得不辭職離開。"                
        fi
        ;;
    2)
        if [ "$TALENT_CHOICE" -eq 2 ]; then
            # 健身教練成功
            MSG="布丁狗最終選擇去健身房擔任教練：\n\n布丁狗在加入健身房後，練成了肌肉猛男，\n憑藉他的體育專業，以及可愛的外表，\n迅速吸引了大批學員前來報名他的1對1教練課，\n健身房老闆為了留住布丁這個狗才，發放了5%的股權給了布丁狗。"         
        else
            # 健身教練失敗
            MSG="布丁狗最終選擇去健身房擔任教練：\n\n因為布丁狗長得太可愛，再加上他傲人的身材，\n導致他在健身房經常被學員亂摸。\n布丁狗實在不勝其擾，有一次，他忍不住揍了亂摸他的學員一拳，\n最後被健身房開除。"
        fi
        ;;
    3)
        if [ "$TALENT_CHOICE" -eq 3 ]; then
            # 街頭賣藝成功
            MSG="布丁狗最終選擇去街頭賣藝：\n\n由於自身可愛的外表，以及經年累月的藝術訓練，\n布丁狗在街頭表演中大放異彩。\n\n某天居然被星探相中，受邀和大耳狗、庫洛米、酷企鵝等動物，\n組成三麗鷗偶像團體，成為了紅極一時的Idol！"               
        else
            # 街頭賣藝失敗
            MSG="布丁狗最終選擇去街頭賣藝：\n\n在做出這個決定之後，布丁狗苦苦思考了許久，\n仍然不知道應該要表演什麼才藝才好\n最終，他選擇表演他從小到大最擅長的事情：吃布丁！\n\n不幸的是，在某一天的下午，\n布丁狗的布丁被路邊的乞丐一把全部搶走，\n但布丁狗每天吃布丁早已是入不敷出，再也無法繼續進行街頭賣藝的工作。"               
        fi
        ;;
    4)
        MSG="布丁狗最終選擇利用他在${talent}學到的爬蟲技巧：\n\n布丁狗走上了利用機器人搶演唱會門票再以高價賣出的黃牛生意。\n\n一開始的確賺了不少錢，但是不到短短一個月，\n你與布丁狗的家就被警察造訪，布丁狗被重罰，最終導致家裡破產。"
        ;;
    5)
        MSG="布丁狗最終選擇利用他在${talent}學到的Python技巧：\n\n由於布丁狗在養成班認真學習，並在接案的過程中累積了相當豐富的經驗，\n最終自己創業成功，成為了家喻戶曉的霸道總裁，\n人人見他都得尊稱他一句「布總」！\n\n身為布丁狗飼主的你，身價也跟著水漲船高，\n開始過著揮金如土的幸福生活～"              
        ;;
esac

# 顯示結局與剩餘金錢和體力
dialog --title "結局" --msgbox "$MSG\n\nHI! $name 您辛苦栽培的布丁狗\n\n剩餘金錢：$coin 元\n剩餘體力：$power 點" 30 70

# 將值寫入臨時文件
echo "$name" > /tmp/name.txt
echo "$power" > /tmp/power.txt
echo "$coin" > /tmp/coin.txt

# 讀取臨時文件中的值
player_name=$(cat /tmp/name.txt)
power=$(cat /tmp/power.txt)
coin=$(cat /tmp/coin.txt)

# 資料庫 更新飼主數據
sudo mysql -uroot -p123456 -Dpudding -e "USE pudding; UPDATE player_record SET power = '$power', coin = '$coin' WHERE player_name = '$name';"

# 刪除臨時文件
rm /tmp/name.txt /tmp/power.txt /tmp/coin.txt

# 顯示成功消息
dialog --title "成功" --msgbox "資料已成功寫入 MariaDB 資料庫中！" 10 60
restart_game
clear

```
## 執行步驟:
複製以上代碼至 pompom.sh
更改檔案執行權限，chmod +x pompom.sh
./pompom.sh，即可開始遊玩

## 執行結果：
![image](https://hackmd.io/_uploads/SyN-f0baT.png)
![image](https://hackmd.io/_uploads/SkyyEA-a6.png)
![image](https://hackmd.io/_uploads/r11n7CW66.png)
![image](https://hackmd.io/_uploads/Skizz0W6p.png)
![image](https://hackmd.io/_uploads/S1DEf0Z66.png)
![image](https://hackmd.io/_uploads/SktrMCZ6a.png)
![image](https://hackmd.io/_uploads/Bk8vfC-p6.png)
![image](https://hackmd.io/_uploads/S1m9GAZTa.png)
![image](https://hackmd.io/_uploads/By3jzRZaa.png)
![image](https://hackmd.io/_uploads/Hyh2f0Zap.png)
![image](https://hackmd.io/_uploads/Sy9RzAZTp.png)
![image](https://hackmd.io/_uploads/HkfxXC-66.png)
![image](https://hackmd.io/_uploads/rJRgXC-aT.png)
遊戲結果已寫入mySQL資料庫
![image](https://hackmd.io/_uploads/SJYRbA-Ta.png)
