# [Dialog專案] 推理思考謎題 ### :small_blue_diamond: 專案緣起:這是一個推理小遊戲,玩家可以選擇簡單、普通、困難三種難度的謎題。 創作者:Thomas 創作日期:2023/6/17 最後更新:2023/6/19 適用系統:Ubuntu 20.04 up、Rucky Linux 8 up、CentOS 7 up ## 程式碼內容 :::info 這個專案用了四個.sh檔來呈現 ::: vim game_start.sh #新增一個sh檔,並給予執行權限 (chmod +x game_start.sh) :::success dialog --stdout --title "選擇難易度" --radiolist "單選" 10 30 3 1 "簡單" on 2 "普通" off 3 "困難" off > 難度.txt snh=$(cat 難度.txt) case $snh in 1) ./Simple.sh ;; 2) ./Normal.sh ;; 3) ./Hard.sh ;; *) echo "Error"2> error.txt ;; esac ::: vim Simple.sh #新增一個sh檔,並給予執行權限 (chmod +x Simple.sh) :::success n=2<br> while true; do<br> dialog --title "簡單" --checklist "有甲、乙、丙、丁、戊五個人,每個人頭上戴一頂白帽子或者黑帽子,每個人只能看見別人頭上帽子的顏色,看不見自己頭上帽子的顏色。戴白帽子的人只能說真話,戴黑帽子只能說謊話。 甲說:我看見三頂白帽子一頂黑帽子。乙說:我看見四頂黑帽子。 丁說:我看見一頂白帽子三頂黑帽子。戊說:我看見四頂白帽子。 請問誰戴了白帽子?(可複選)" 17 75 5 \ 1 "甲" off \ 2 "乙" off \ 3 "丙" off \ 4 "丁" off \ 5 "戊" off 2> selection.txt<br> result=$(cat selection.txt) if [[ $result == *"3"* && $result == *"4"* ]]; then dialog --msgbox "恭喜答對!" 10 50 break elif [[ $n == 0 ]]; then dialog --msgbox "請好好睡一覺後再回來挑戰吧。" 10 50 break else dialog --yesno "好可惜!您還有$n次機會,請問要繼續嘗試嗎?" 10 50 response=$? n=$((n-1)) if [[ $response -ne 0 ]]; then dialog --title "" --msgbox "請好好睡一覺後再回來挑戰吧。" 10 50 break fi fi done ::: vim Normal.sh #新增一個sh檔,並給予執行權限 (chmod +x Normal.sh) :::success n=3<br> while true; do dialog --title "普通" --inputbox "誠實村與騙人村在圓桌圍成一圈開會,主席問了三個問題: 1.「如果你『右手邊那個人,是誠實村的人』的話,請舉手」有4個人舉手<br> 2.「如果你『左手邊那個人,上一個問題有舉手』的話,請舉手」一樣有4個人舉手<br> 3.「如果你『前兩次都有舉手』的話,麻煩請再舉一次手」這次只有2個人舉手<br> 誠實村及騙人村參加會議的人數相等,並且主席自己舉了兩次手<br> 請問參加會議的總人數為何?" 17 75 2> selection.txt<br> result=$(cat selection.txt) if [[ $result == *"8"* ]]; then dialog --msgbox "恭喜答對!" 10 50 break elif [[ $n == 0 ]]; then dialog --msgbox "請好好睡一覺後再回來挑戰吧。" 10 50 break else dialog --yesno "好可惜!您還有$n次機會,請問要繼續嘗試嗎?" 10 50 response=$? n=$((n-1)) if [[ $response -ne 0 ]]; then dialog --title "" --msgbox "請好好睡一覺後再回來挑戰吧。" 10 50 break fi fi done ::: vim Hard.sh #新增一個sh檔,並給予執行權限 (chmod +x Hard.sh) :::success dialog --title "困難" --msgbox " 在一棟合租房中,D於自己房間內遭到殺害,警方初步調查後得到以下線索: 一、被害人的手機不見了,推測是被兇手帶走。 二、床頭枕邊及桌上共3個指針式鬧鐘與2個電子鐘,5個鬧鐘設定的鬧鈴時間分別為8:50、8:55、9:00、9:05、9:10,全部處於鈴聲開啟的狀態。 合租房除了D還住了居民ABC,第一發現者A今天早上聽到鬧鐘依序響起卻都沒關,去了D房間查看才發現屍體。 警方對ABC進行了訊問,下面是三人的回答:" 15 75 dialog --title "警衛A" --msgbox " 我上完大夜班後想回家補眠,結果D先生房間的鬧鐘一直響,去敲門後發現門沒鎖,結果看到D先生躺在地上沒了呼吸,於是我立刻報警。剩下的鬧鐘大概響了10分鐘左右就停了。 關於D先生的異狀嗎?昨晚8點45分左右我們在玄關碰面,一問之下才知道D先生也被叫去值夜班,他看起來心情不好,但突然被叫去值班沒有人會感到高興吧。" 15 75 dialog --title "記者B" --msgbox " 早上我一直睡覺,直到被A先生叫醒後才知道發生命案。鬧鐘?我睡得很沉,所以沒聽到鬧鈴的聲音。 昨晚的狀況?我獨自一人在房間寫新聞稿,偶爾感覺到客廳有人出入的動靜,不過我專注在寫稿上,沒察覺出什麼異狀。" 15 75 dialog --title "大學生C" --msgbox " 早上8點出頭我就去學校參加社團活動,接到電話才曉得D先生的事情。 昨晚我出去吃晚餐順便散步,回來時發現D先生坐在客廳,他抱怨說公司打錯電話叫錯人,害他白跑一趟還沒看到自己很愛看的電視劇,聊了幾句後就各自回房間了。時間?大約是在9點45分左右的時候吧。" 15 75 dialog --title "關鍵線索" --msgbox " 結束三人的偵訊,烏探長再次回到案發現場。這時一旁的警員發現了一件事,鬧鈴設定9:00的指針式鬧鐘,比實際時間快了2分鐘,也就是說這個鬧鐘真正的響鈴時間是8:58。 警員只覺得是時鐘不準,沒有放在心中。不過烏探長卻認為不對勁,再三思考後,他發現三人之中有一人說了謊,極具嫌疑! 這個說謊的嫌疑人是哪一位?" 15 75 dialog --yesno "確定公布答案?" 5 40 if [ $? -eq 0 ]; then dialog --title "真相大白" --msgbox " 這個指針式鬧鐘並不是早上起床用的,而是提醒被害人他喜歡的電視劇就要開播了。由於8:45出門、9:45回家還沒看到,因此那個電視劇是在9:00開播,所以鬧鐘才設在8:58的時候響起。而用來提醒早上9:00起床的鬧鐘已經被兇手帶走了,那就是被害人的手機>。 回到案情,8:58的鬧鐘處於鈴聲開啟的狀態。代表被害人昨晚出門前忘記關鬧鐘,回來後也沒有再關掉,也就是說昨晚8:58那個鬧鐘在無人的房間鈴聲大作,這時A去值晚班,C也出門吃飯,然而B聲稱自己一直在房間寫作,卻「沒察覺到任何異狀」,很顯然是在說謊。" 15 75 fi ::: ### 操作畫面說明 :::info 請確保環境可以執行dialog(sudo apt install dialog),並輸入以下指令:<br> ./game_start.sh ::: 畫面一<br><br> 畫面二<br> <br> 畫面三<br> <br> 畫面四<br> <br> 畫面五<br> <br> 畫面六<br> <br> 畫面七<br> <br> 畫面八<br> <br> 畫面九<br> <br> 畫面十<br> <br> 畫面十一<br> <br> 畫面十二<br> <br>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up