Spaces:
Running
Running
Publish L6Sat week02 final projects
Browse files- projects/2026Fall進階專題六午/張棨竣/week02_校園謎案調查局/case_data.json +42 -0
- projects/2026Fall進階專題六午/張棨竣/week02_校園謎案調查局/main.py +102 -0
- projects/2026Fall進階專題六午/李合盛/week02_校園謎案調查局/case_data.json +42 -0
- projects/2026Fall進階專題六午/李合盛/week02_校園謎案調查局/main.py +93 -0
- projects/2026Fall進階專題六午/林守桀/week02_校園謎案調查局/case_data.json +42 -0
- projects/2026Fall進階專題六午/林守桀/week02_校園謎案調查局/main.py +106 -0
- projects/2026Fall進階專題六午/王三策/week02_校園謎案調查局/case_data.json +42 -0
- projects/2026Fall進階專題六午/王三策/week02_校園謎案調查局/main.py +103 -0
- projects/2026Fall進階專題六午/王辭信/week02_校園謎案調查局/case_data.json +42 -0
- projects/2026Fall進階專題六午/王辭信/week02_校園謎案調查局/main.py +116 -0
- projects/2026Fall進階專題六午/胡惟媗/week02_校園謎案調查局/case_data.json +42 -0
- projects/2026Fall進階專題六午/胡惟媗/week02_校園謎案調查局/main.py +102 -0
- projects/2026Fall進階專題六午/蔡昊儒/week02_校園謎案調查局/case_data.json +42 -0
- projects/2026Fall進階專題六午/蔡昊儒/week02_校園謎案調查局/main.py +112 -0
projects/2026Fall進階專題六午/張棨竣/week02_校園謎案調查局/case_data.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"title": "消失的校徽",
|
| 3 |
+
"intro": "午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?",
|
| 4 |
+
"locations": {
|
| 5 |
+
"1": {
|
| 6 |
+
"name": "六年一班教室",
|
| 7 |
+
"scene": "展示櫃半開,窗戶也沒有關好。",
|
| 8 |
+
"evidence": {
|
| 9 |
+
"id": "blue_fiber",
|
| 10 |
+
"name": "窗框上的藍色纖維",
|
| 11 |
+
"detail": "纖維顏色和清潔推車的布套相同。"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場司令台",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的輪痕。",
|
| 17 |
+
"evidence": {
|
| 18 |
+
"id": "wheel_track",
|
| 19 |
+
"name": "沾著亮粉的推車輪痕",
|
| 20 |
+
"detail": "亮粉和展示櫃內的裝飾相同。"
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"name": "圖書館",
|
| 25 |
+
"scene": "清潔推車停在書架旁,後方似乎有東西反光。",
|
| 26 |
+
"requires": ["blue_fiber", "wheel_track"],
|
| 27 |
+
"locked_text": "你看見推車,卻還不知道該檢查哪裡。也許要先找出它的移動路線。",
|
| 28 |
+
"evidence": {
|
| 29 |
+
"id": "badge",
|
| 30 |
+
"name": "卡在推車後方的校徽",
|
| 31 |
+
"detail": "校徽沒有損壞,背面黏著一小段藍色纖維。"
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"conclusions": {
|
| 36 |
+
"1": "有同學故意把校徽藏在圖書館",
|
| 37 |
+
"2": "風吹起校徽,清潔推車不小心把它帶到圖書館",
|
| 38 |
+
"3": "校徽從一開始就放在圖書館"
|
| 39 |
+
},
|
| 40 |
+
"correct_answer": "2",
|
| 41 |
+
"success": "推理正確!風把校徽吹到布套上,推車經過教室後又將它帶到圖書館。這是一場意外。"
|
| 42 |
+
}
|
projects/2026Fall進階專題六午/張棨竣/week02_校園謎案調查局/main.py
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Week 2:校園謎案調查局 Starter。
|
| 2 |
+
|
| 3 |
+
先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
CASE_TITLE = "消失的水壺"
|
| 7 |
+
|
| 8 |
+
LOCATIONS = {
|
| 9 |
+
"1": {
|
| 10 |
+
"name": "六年13班教室",
|
| 11 |
+
"scene": "凌亂的座位,窗戶也碎掉了。",
|
| 12 |
+
"evidence": "玻璃碎片",
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場的空地",
|
| 16 |
+
"scene": "地面有血跡,有人刻意用落葉阻擋的痕跡。",
|
| 17 |
+
"evidence": " 小鳥的羽毛"
|
| 18 |
+
},
|
| 19 |
+
"3": {
|
| 20 |
+
"name": "洗手台",
|
| 21 |
+
"scene": "沒有關的水龍頭,後方的垃圾桶閃著光。",
|
| 22 |
+
"evidence": "在桶子裡的水壺",
|
| 23 |
+
},
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
evidence_bag = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def investigate(location_id):
|
| 30 |
+
"""調查地點並將新線索放入證物袋。"""
|
| 31 |
+
# TODO 1:確認 location_id 是否存在於 LOCATIONS。
|
| 32 |
+
if location_id not in LOCATIONS:
|
| 33 |
+
print("bad")
|
| 34 |
+
return
|
| 35 |
+
#TODO 2:顯示地點名稱與現場描述。
|
| 36 |
+
print(f"你到了{LOCATIONS[location_id]['name']}")
|
| 37 |
+
print(f"{LOCATIONS[location_id]['scene']}")
|
| 38 |
+
# TODO 3:線索尚未取得時才 append 到 evidence_bag。
|
| 39 |
+
if location_id not in evidence_bag:
|
| 40 |
+
evidence_bag.append(location_id)
|
| 41 |
+
|
| 42 |
+
def show_evidence():
|
| 43 |
+
"""列出目前取得的所有證物。"""
|
| 44 |
+
# TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
|
| 45 |
+
if not evidence_bag:
|
| 46 |
+
print("你沒證據")
|
| 47 |
+
return
|
| 48 |
+
else:
|
| 49 |
+
print(evidence_bag)
|
| 50 |
+
print("證物袋功能還沒完成。")
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def make_deduction():
|
| 54 |
+
"""取得足夠證物後,讓玩家選擇真相。"""
|
| 55 |
+
if len(evidence_bag) < 3:
|
| 56 |
+
print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
|
| 57 |
+
return False
|
| 58 |
+
|
| 59 |
+
print("\n哪一個說法最符合所有證物?")
|
| 60 |
+
print("1. 有同學故意把校徽藏在圖書館")
|
| 61 |
+
print("2. 風吹起校徽,清潔推車不小心把它帶到圖書館")
|
| 62 |
+
print("3. 校徽從一開始就放在圖書館")
|
| 63 |
+
answer = input("你的推理:").strip()
|
| 64 |
+
|
| 65 |
+
# TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
|
| 66 |
+
print("推理判定還沒完成。")
|
| 67 |
+
return False
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
def show_menu():
|
| 71 |
+
print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
|
| 72 |
+
print("1. 調查六年13班教室")
|
| 73 |
+
print("2. 調查操場的空地")
|
| 74 |
+
print("3. 調查洗手台")
|
| 75 |
+
print("4. 查看證物袋")
|
| 76 |
+
print("5. 提出推理")
|
| 77 |
+
print("6. 離開")
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
def main():
|
| 81 |
+
print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
|
| 82 |
+
|
| 83 |
+
while True:
|
| 84 |
+
show_menu()
|
| 85 |
+
choice = input("請選擇:").strip()
|
| 86 |
+
|
| 87 |
+
if choice in LOCATIONS:
|
| 88 |
+
investigate(choice)
|
| 89 |
+
elif choice == "4":
|
| 90 |
+
show_evidence()
|
| 91 |
+
elif choice == "5":
|
| 92 |
+
if make_deduction():
|
| 93 |
+
break
|
| 94 |
+
elif choice == "6":
|
| 95 |
+
print("案件暫停。證物袋已交回調查局。")
|
| 96 |
+
break
|
| 97 |
+
else:
|
| 98 |
+
print("請輸入 1~6。")
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
if __name__ == "__main__":
|
| 102 |
+
main()
|
projects/2026Fall進階專題六午/李合盛/week02_校園謎案調查局/case_data.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"title": "不見dre人有67人",
|
| 3 |
+
"intro": "午休結束後,校慶展示櫃裡的人消失了。你能找出真相嗎?",
|
| 4 |
+
"locations": {
|
| 5 |
+
"1": {
|
| 6 |
+
"name": "六年一百班教室",
|
| 7 |
+
"scene": "展示櫃大開,窗戶也沒有關好。",
|
| 8 |
+
"evidence": {
|
| 9 |
+
"id": "blue_fiber",
|
| 10 |
+
"name": "窗框上的人頭",
|
| 11 |
+
"detail": "人頭和清潔推車的頭套相同。"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場司令台有人手和腳",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的輪痕和血。",
|
| 17 |
+
"evidence": {
|
| 18 |
+
"id": "wheel_track",
|
| 19 |
+
"name": "",
|
| 20 |
+
"detail": "血和展示櫃內的標本相同。"
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"name": "圖書館",
|
| 25 |
+
"scene": "清潔推車停在書架旁,後方似乎有東西反光。",
|
| 26 |
+
"requires": ["blue_fiber", "wheel_track"],
|
| 27 |
+
"locked_text": "你看見推車,卻還不知道該檢查哪裡。也許要先找出它的移動路線。",
|
| 28 |
+
"evidence": {
|
| 29 |
+
"id": "badge",
|
| 30 |
+
"name": "卡在推車後方的67人",
|
| 31 |
+
"detail": "校徽沒有損壞,背面黏著一小段藍色纖維。"
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"conclusions": {
|
| 36 |
+
"1": "有同學故意把校徽藏在圖書館",
|
| 37 |
+
"2": "風吹起校徽,清潔推車不小心把它帶到圖書館",
|
| 38 |
+
"3": "校徽從一開始就放在圖書館"
|
| 39 |
+
},
|
| 40 |
+
"correct_answer": "2",
|
| 41 |
+
"success": "推理正確!風把校徽吹到布套上,推車經過教室後又將它帶到圖書館。這是一場意外。"
|
| 42 |
+
}
|
projects/2026Fall進階專題六午/李合盛/week02_校園謎案調查局/main.py
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Week 2:校園謎案調查局 Starter。
|
| 2 |
+
|
| 3 |
+
先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
CASE_TITLE = "不見dre人有67人"
|
| 7 |
+
|
| 8 |
+
LOCATIONS = {
|
| 9 |
+
"1": {
|
| 10 |
+
"name": "六年一百班教室",
|
| 11 |
+
"scene": "展示櫃大開,窗戶也沒有關好。",
|
| 12 |
+
"evidence": "窗框上的人頭",
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場司令台有人手和腳",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的輪痕和血。",
|
| 17 |
+
"evidence": "血的推車輪痕",
|
| 18 |
+
},
|
| 19 |
+
"3": {
|
| 20 |
+
"name": "生物教室",
|
| 21 |
+
"scene": "清潔推車停在骨架旁下有血跡,後方似乎有東西在叫。",
|
| 22 |
+
"evidence": "卡在推車後方的67人",
|
| 23 |
+
},
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
evidence_bag = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def investigate(location_id):
|
| 30 |
+
"""調查地點並將新線索放入證物袋。"""
|
| 31 |
+
# TODO 1:確認 location_id 是否存在於 LOCATIONS。
|
| 32 |
+
if location_id not in LOCATIONS:
|
| 33 |
+
print("here don't have you need")
|
| 34 |
+
return
|
| 35 |
+
print("這個調查功能還沒完成。")
|
| 36 |
+
|
| 37 |
+
|
| 38 |
+
def show_evidence():
|
| 39 |
+
"""列出目前取得的所有證物。"""
|
| 40 |
+
# TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
|
| 41 |
+
print("證物袋功能還沒完成。")
|
| 42 |
+
|
| 43 |
+
|
| 44 |
+
def make_deduction():
|
| 45 |
+
"""取得足夠證物後,讓玩家選擇真相。"""
|
| 46 |
+
if len(evidence_bag) < 3:
|
| 47 |
+
print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
|
| 48 |
+
return False
|
| 49 |
+
|
| 50 |
+
print("\n哪一個說法最符合所有證物?")
|
| 51 |
+
print("1.他們互相殘殺,最後一個人自殺")
|
| 52 |
+
print("2. 有人故意殺人")
|
| 53 |
+
print("3. 67人一開始就在圖書館")
|
| 54 |
+
answer = input("你的推理:").strip()
|
| 55 |
+
|
| 56 |
+
# TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
|
| 57 |
+
print("推理判定還沒完成。")
|
| 58 |
+
return False
|
| 59 |
+
|
| 60 |
+
|
| 61 |
+
def show_menu():
|
| 62 |
+
print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
|
| 63 |
+
print("1. 調查六年一班教室")
|
| 64 |
+
print("2. 調查操場司令台")
|
| 65 |
+
print("3. 調查圖書館")
|
| 66 |
+
print("4. 查看證物袋")
|
| 67 |
+
print("5. 提出推理")
|
| 68 |
+
print("6. 離開")
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
def main():
|
| 72 |
+
print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
|
| 73 |
+
|
| 74 |
+
while True:
|
| 75 |
+
show_menu()
|
| 76 |
+
choice = input("請選擇:").strip()
|
| 77 |
+
|
| 78 |
+
if choice in LOCATIONS:
|
| 79 |
+
investigate(choice)
|
| 80 |
+
elif choice == "4":
|
| 81 |
+
show_evidence()
|
| 82 |
+
elif choice == "5":
|
| 83 |
+
if make_deduction():
|
| 84 |
+
break
|
| 85 |
+
elif choice == "6":
|
| 86 |
+
print("案件暫停。證物袋已交回調查局。")
|
| 87 |
+
break
|
| 88 |
+
else:
|
| 89 |
+
print("請輸入 1~6。")
|
| 90 |
+
|
| 91 |
+
|
| 92 |
+
if __name__ == "__main__":
|
| 93 |
+
main()
|
projects/2026Fall進階專題六午/林守桀/week02_校園謎案調查局/case_data.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"title": "半夜的舊校舍",
|
| 3 |
+
"intro": "深夜的校園傳出詭異琴聲與哭喊,你能揭開舊校舍的祕密嗎?",
|
| 4 |
+
"locations": {
|
| 5 |
+
"1": {
|
| 6 |
+
"name": "廢棄音樂教室",
|
| 7 |
+
"scene": "鋼琴蓋自己微微晃動,琴鍵上記號筆寫著血紅色的字。",
|
| 8 |
+
"evidence": {
|
| 9 |
+
"id": "sheet_music",
|
| 10 |
+
"name": "散落一地的老舊樂譜碎片",
|
| 11 |
+
"detail": "樂譜邊緣有燒焦痕跡,上面記著怪異的音符。"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "走廊盡頭的女廁",
|
| 16 |
+
"scene": "最後一間廁所門半開,鏡子上滿是水氣與詭異手印。",
|
| 17 |
+
"evidence": {
|
| 18 |
+
"id": "red_scrunchie",
|
| 19 |
+
"name": "沾著濕黏水跡的紅色髮圈",
|
| 20 |
+
"detail": "髮圈上纏著幾根長髮,還散發著淡樟腦味。"
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"name": "地下室器材室",
|
| 25 |
+
"scene": "角落的老舊木櫃發出叩叩聲,地上有一排發光的鞋印。",
|
| 26 |
+
"requires": ["sheet_music", "red_scrunchie"],
|
| 27 |
+
"locked_text": "木櫃發出強烈的震動,門被鎖死了。也許需要先找齊走廊與教室的線索才敢靠近。",
|
| 28 |
+
"evidence": {
|
| 29 |
+
"id": "bronze_key",
|
| 30 |
+
"name": "刻有神秘符號的銅製鑰匙",
|
| 31 |
+
"detail": "金屬表面冰冷刺骨,刻痕看起來像是手刻的。"
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"conclusions": {
|
| 36 |
+
"1": "這一切只是舊校舍地基下陷產生的自然聲響",
|
| 37 |
+
"2": "有學長在半夜偷偷溜進舊校舍試圖解開地下的封印",
|
| 38 |
+
"3": "校園裡真的有幽靈在尋找失落的舊鑰匙"
|
| 39 |
+
},
|
| 40 |
+
"correct_answer": "2",
|
| 41 |
+
"success": "推理正確!原來是有人深夜闖入搞鬼,真相大白了!"
|
| 42 |
+
}
|
projects/2026Fall進階專題六午/林守桀/week02_校園謎案調查局/main.py
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Week 2:校園謎案調查局 Starter。
|
| 2 |
+
|
| 3 |
+
先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
CASE_TITLE = "半夜的舊校舍"
|
| 7 |
+
|
| 8 |
+
LOCATIONS = {
|
| 9 |
+
"1": {
|
| 10 |
+
"name": "廢棄音樂教室",
|
| 11 |
+
"scene": "鋼琴蓋自己微微晃動,琴鍵上記號筆寫著血紅色的字。",
|
| 12 |
+
"evidence": "散落一地的老舊樂譜碎片",
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "走廊盡頭的女廁",
|
| 16 |
+
"scene": "最後一間廁所門半開,鏡子上滿是水氣與詭異手印。",
|
| 17 |
+
"evidence": "沾著濕黏水跡的紅色髮圈",
|
| 18 |
+
},
|
| 19 |
+
"3": {
|
| 20 |
+
"name": "地下室器材室",
|
| 21 |
+
"scene": "角落的老舊木櫃發出叩叩聲,地上有一排發光的鞋印。",
|
| 22 |
+
"evidence": "刻有神秘符號的銅製鑰匙",
|
| 23 |
+
},
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
evidence_bag = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def investigate(location_id):
|
| 30 |
+
"""調查地點並將新線索放入證物袋。"""
|
| 31 |
+
# TODO 1:確認 location_id 是否存在於 LOCATIONS。
|
| 32 |
+
if location_id in LOCATIONS:
|
| 33 |
+
loc = LOCATIONS[location_id]
|
| 34 |
+
# TODO 2:顯示地點名稱與現場描述。
|
| 35 |
+
print(f"地點:{loc['name']}")
|
| 36 |
+
print(f"現場:{loc['scene']}")
|
| 37 |
+
# TODO 3:線索尚未取得時才 append 到 evidence_bag。
|
| 38 |
+
if loc["evidence"] not in evidence_bag:
|
| 39 |
+
evidence_bag.append(loc["evidence"])
|
| 40 |
+
print(f"找到證物:{loc['evidence']}")
|
| 41 |
+
|
| 42 |
+
|
| 43 |
+
def show_evidence():
|
| 44 |
+
"""列出目前取得的所有證物。"""
|
| 45 |
+
# TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
|
| 46 |
+
if not evidence_bag:
|
| 47 |
+
print("目前沒有任何證物。")
|
| 48 |
+
else:
|
| 49 |
+
for i, item in enumerate(evidence_bag, 1):
|
| 50 |
+
print(f"{i}. {item}")
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def make_deduction():
|
| 54 |
+
"""取得足夠證物後,讓玩家選擇真相。"""
|
| 55 |
+
if len(evidence_bag) < 3:
|
| 56 |
+
print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
|
| 57 |
+
return False
|
| 58 |
+
|
| 59 |
+
print("\n哪一個說法最符合所有證物?")
|
| 60 |
+
print("1. 這一切只是舊校舍地基下陷產生的自然聲響")
|
| 61 |
+
print("2. 有學長在半夜偷偷溜進舊校舍試圖解開地下的封印")
|
| 62 |
+
print("3. 校園裡真的有幽靈在尋找失落的舊鑰匙")
|
| 63 |
+
answer = input("你的推理:").strip()
|
| 64 |
+
|
| 65 |
+
# TODO (5Checkpoint C):判斷答案,正確時回傳 True。
|
| 66 |
+
if answer == "2":
|
| 67 |
+
print("推理正確!原來是有人深夜闖入搞鬼,真相大白了!")
|
| 68 |
+
return True
|
| 69 |
+
else:
|
| 70 |
+
print("推理錯誤,這種說法無法解釋所有異象,再試試看。")
|
| 71 |
+
return False
|
| 72 |
+
|
| 73 |
+
|
| 74 |
+
def show_menu():
|
| 75 |
+
print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
|
| 76 |
+
print("1. 調查廢棄音樂教室")
|
| 77 |
+
print("2. 調查走廊盡頭的女廁")
|
| 78 |
+
print("3. 調查地下室器材室")
|
| 79 |
+
print("4. 查看證物袋")
|
| 80 |
+
print("5. 提出推理")
|
| 81 |
+
print("6. 逃離現場")
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
def main():
|
| 85 |
+
print("深夜的校園傳出詭異琴聲與哭喊,你能揭開舊校舍的祕密嗎?")
|
| 86 |
+
|
| 87 |
+
while True:
|
| 88 |
+
show_menu()
|
| 89 |
+
choice = input("請選擇:").strip()
|
| 90 |
+
|
| 91 |
+
if choice in LOCATIONS:
|
| 92 |
+
investigate(choice)
|
| 93 |
+
elif choice == "4":
|
| 94 |
+
show_evidence()
|
| 95 |
+
elif choice == "5":
|
| 96 |
+
if make_deduction():
|
| 97 |
+
break
|
| 98 |
+
elif choice == "6":
|
| 99 |
+
print("你感到一陣惡寒,決定先撤離舊校舍。")
|
| 100 |
+
break
|
| 101 |
+
else:
|
| 102 |
+
print("請輸入 1~6。")
|
| 103 |
+
|
| 104 |
+
|
| 105 |
+
if __name__ == "__main__":
|
| 106 |
+
main()
|
projects/2026Fall進階專題六午/王三策/week02_校園謎案調查局/case_data.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"title": "消失的校徽",
|
| 3 |
+
"intro": "午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?",
|
| 4 |
+
"locations": {
|
| 5 |
+
"1": {
|
| 6 |
+
"name": "六年一班教室",
|
| 7 |
+
"scene": "展示櫃半開,窗戶也沒有關好。",
|
| 8 |
+
"evidence": {
|
| 9 |
+
"id": "blue_fiber",
|
| 10 |
+
"name": "窗框上的藍色纖維",
|
| 11 |
+
"detail": "纖維顏色和清潔推車的布套相同。"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場司令台",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的輪痕。",
|
| 17 |
+
"evidence": {
|
| 18 |
+
"id": "wheel_track",
|
| 19 |
+
"name": "沾著亮粉的推車輪痕",
|
| 20 |
+
"detail": "亮粉和展示櫃內的裝飾相同。"
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"name": "圖書館",
|
| 25 |
+
"scene": "清潔推車停在書架旁,後方似乎有東西反光。",
|
| 26 |
+
"requires": ["blue_fiber", "wheel_track"],
|
| 27 |
+
"locked_text": "你看見推車,卻還不知道該檢查哪裡。也許要先找出它的移動路線。",
|
| 28 |
+
"evidence": {
|
| 29 |
+
"id": "badge",
|
| 30 |
+
"name": "卡在推車後方的校徽",
|
| 31 |
+
"detail": "校徽沒有損壞,背面黏著一小段藍色纖維。"
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"conclusions": {
|
| 36 |
+
"1": "有同學故意把校徽藏在圖書館",
|
| 37 |
+
"2": "風吹起校徽,清潔推車不小心把它帶到圖書館",
|
| 38 |
+
"3": "校徽從一開始就放在圖書館"
|
| 39 |
+
},
|
| 40 |
+
"correct_answer": "2",
|
| 41 |
+
"success": "推理正確!風把校徽吹到布套上,推車經過教室後又將它帶到圖書館。這是一場意外。"
|
| 42 |
+
}
|
projects/2026Fall進階專題六午/王三策/week02_校園謎案調查局/main.py
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Week 2:校園謎案調查局 Starter。
|
| 2 |
+
|
| 3 |
+
先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
CASE_TITLE = "湊企鵝謎團[棍木伱看布辶彳亍子!!!恭喜!棍木]"
|
| 7 |
+
|
| 8 |
+
LOCATIONS = {
|
| 9 |
+
"1": {
|
| 10 |
+
"name": "資源班教室",
|
| 11 |
+
"scene": "有兩隻湊企鵝開心的笑[gugugaga]",
|
| 12 |
+
"evidence": "一個紙條,上面似乎有一串號碼...---...x1",
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "實驗室",
|
| 16 |
+
"scene": "旁邊的貨架上有綠色和粉色的藥劑在冒泡",
|
| 17 |
+
"evidence": "一瓶綠色的奇怪藥劑x1一瓶粉色的奇怪藥劑x1",
|
| 18 |
+
},
|
| 19 |
+
"3": {
|
| 20 |
+
"name": "保安室",
|
| 21 |
+
"scene": "窗戶碎掉了,只有一隻湊企鵝在叫,但是地上有一個奇怪的腳印...",
|
| 22 |
+
"evidence": "一張奇怪的紙條.... . .-. .- -. --- ..- - -.-.--x1",
|
| 23 |
+
},
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
evidence_bag = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def investigate(location_id):
|
| 30 |
+
"""調查地點並將新線索放入證物袋。"""
|
| 31 |
+
# TODO 1:確認 location_id 是否存在於 LOCATIONS。
|
| 32 |
+
if location_id not in LOCATIONS:
|
| 33 |
+
print("你眼x嗎沒有這個號碼0227407890")
|
| 34 |
+
return
|
| 35 |
+
# TODO 2:顯示地點名稱與現場描述
|
| 36 |
+
print(f"你到了:{LOCATIONS[location_id]['name']}")
|
| 37 |
+
print(LOCATIONS[location_id]["scene"])
|
| 38 |
+
# TODO 3:線索尚未if not in evidence_bag:
|
| 39 |
+
if location_id not in evidence_bag:
|
| 40 |
+
evidence_bag.append(location_id)
|
| 41 |
+
else:
|
| 42 |
+
print("你蒐集過這個了^^")
|
| 43 |
+
|
| 44 |
+
|
| 45 |
+
def show_evidence():
|
| 46 |
+
"""列出目前取得的所有證物。"""
|
| 47 |
+
# TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
|
| 48 |
+
if not evidence_bag:
|
| 49 |
+
print("\n證物袋目前是空的,快去各地點調查吧!")
|
| 50 |
+
return
|
| 51 |
+
print("證物袋功能還沒完成。")
|
| 52 |
+
|
| 53 |
+
|
| 54 |
+
def make_deduction():
|
| 55 |
+
"""取得足夠證物後,讓玩家選擇真相。"""
|
| 56 |
+
if len(evidence_bag) < 3:
|
| 57 |
+
print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
|
| 58 |
+
return False
|
| 59 |
+
|
| 60 |
+
print("\n哪一個說法最符合所有證物?")
|
| 61 |
+
print("1. 有同學故意把校徽藏在圖書館")
|
| 62 |
+
print("2. 風吹起校徽,清潔推車不小心把它帶到圖書館")
|
| 63 |
+
print("3. 校徽從一開始就放在圖書館")
|
| 64 |
+
answer = input("你的推理:").strip()
|
| 65 |
+
|
| 66 |
+
# TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
|
| 67 |
+
print("推理判定還沒完成。")
|
| 68 |
+
return False
|
| 69 |
+
|
| 70 |
+
|
| 71 |
+
def show_menu():
|
| 72 |
+
print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
|
| 73 |
+
print("1. 調查六年一班教室")
|
| 74 |
+
print("2. 調查操場司令台")
|
| 75 |
+
print("3. 調查圖書館")
|
| 76 |
+
print("4. 查看證物袋")
|
| 77 |
+
print("5. 提出推理")
|
| 78 |
+
print("6. 離開")
|
| 79 |
+
|
| 80 |
+
|
| 81 |
+
def main():
|
| 82 |
+
print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
|
| 83 |
+
|
| 84 |
+
while True:
|
| 85 |
+
show_menu()
|
| 86 |
+
choice = input("請選擇:").strip()
|
| 87 |
+
|
| 88 |
+
if choice in LOCATIONS:
|
| 89 |
+
investigate(choice)
|
| 90 |
+
elif choice == "4":
|
| 91 |
+
show_evidence()
|
| 92 |
+
elif choice == "5":
|
| 93 |
+
if make_deduction():
|
| 94 |
+
break
|
| 95 |
+
elif choice == "6":
|
| 96 |
+
print("案件暫停。證物袋已交回調查局。")
|
| 97 |
+
break
|
| 98 |
+
else:
|
| 99 |
+
print("請輸入 1~6。")
|
| 100 |
+
|
| 101 |
+
|
| 102 |
+
if __name__ == "__main__":
|
| 103 |
+
main()
|
projects/2026Fall進階專題六午/王辭信/week02_校園謎案調查局/case_data.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"title": "消失的校徽",
|
| 3 |
+
"intro": "午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?",
|
| 4 |
+
"locations": {
|
| 5 |
+
"1": {
|
| 6 |
+
"name": "六年一班教室",
|
| 7 |
+
"scene": "展示櫃半開,窗戶也沒有關好。",
|
| 8 |
+
"evidence": {
|
| 9 |
+
"id": "blue_fiber",
|
| 10 |
+
"name": "窗框上的藍色纖維",
|
| 11 |
+
"detail": "纖維顏色和清潔推車的布套相同。"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場司令台",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的輪痕。",
|
| 17 |
+
"evidence": {
|
| 18 |
+
"id": "wheel_track",
|
| 19 |
+
"name": "沾著亮粉的推車輪痕",
|
| 20 |
+
"detail": "亮粉和展示櫃內的裝飾相同。"
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"name": "圖書館",
|
| 25 |
+
"scene": "清潔推車停在書架旁,後方似乎有東西反光。",
|
| 26 |
+
"requires": ["blue_fiber", "wheel_track"],
|
| 27 |
+
"locked_text": "你看見推車,卻還不知道該檢查哪裡。也許要先找出它的移動路線。",
|
| 28 |
+
"evidence": {
|
| 29 |
+
"id": "badge",
|
| 30 |
+
"name": "卡在推車後方的校徽",
|
| 31 |
+
"detail": "校徽沒有損壞,背面黏著一小段藍色纖維。"
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"conclusions": {
|
| 36 |
+
"1": "有同學故意把校徽藏在圖書館",
|
| 37 |
+
"2": "風吹起校徽,清潔推車不小心把它帶到圖書館",
|
| 38 |
+
"3": "校徽從一開始就放在圖書館"
|
| 39 |
+
},
|
| 40 |
+
"correct_answer": "2",
|
| 41 |
+
"success": "推理正確!風把校徽吹到布套上,推車經過教室後又將它帶到圖書館。這是一場意外。"
|
| 42 |
+
}
|
projects/2026Fall進階專題六午/王辭信/week02_校園謎案調查局/main.py
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Week 2:校園謎案調查局 Starter。
|
| 2 |
+
|
| 3 |
+
先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
CASE_TITLE = "消失的鑽石棍木67不知道很雷霆"
|
| 7 |
+
|
| 8 |
+
LOCATIONS = {
|
| 9 |
+
"1": {
|
| 10 |
+
"name": "六七年七十八九十一班教室",
|
| 11 |
+
"scene": "展示櫃半開,窗戶也沒有關好就受者。",
|
| 12 |
+
"evidence": "窗框上的棍木6767色纖維",
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "676767這波我挺偉偉的操場",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的痕跡。",
|
| 17 |
+
"evidence": "沾著野生狗奶棍木6767的推車輪痕",
|
| 18 |
+
},
|
| 19 |
+
"3": {
|
| 20 |
+
"name": "676767競爭者不好玩圖書館",
|
| 21 |
+
"scene": "清潔推車停在書架旁,後方似乎有東西反光。",
|
| 22 |
+
"evidence": "卡在推車後方的鑽石棍木67",
|
| 23 |
+
},
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
evidence_bag = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def investigate(location_id):
|
| 30 |
+
"""調查地點並將新線索放入證物袋。"""
|
| 31 |
+
# TODO 1:確認 location_id 是否存在於 LOCATIONS。
|
| 32 |
+
if location_id not in LOCATIONS:
|
| 33 |
+
print("無效的地點!")
|
| 34 |
+
return
|
| 35 |
+
|
| 36 |
+
# 取得對應地點的資料
|
| 37 |
+
loc = LOCATIONS[location_id]
|
| 38 |
+
|
| 39 |
+
# TODO 2:顯示地點名稱與現場描述。
|
| 40 |
+
print(f"\n【調查地點:{loc['name']}】")
|
| 41 |
+
print(f"現場狀況:{loc['scene']}")
|
| 42 |
+
|
| 43 |
+
# TODO 3:線索尚未取得時才 append 到 evidence_bag。
|
| 44 |
+
found_evidence = loc['evidence']
|
| 45 |
+
if found_evidence not in evidence_bag:
|
| 46 |
+
evidence_bag.append(found_evidence)
|
| 47 |
+
else:
|
| 48 |
+
print("這個地點已經調查過了,沒有新的發現。")
|
| 49 |
+
|
| 50 |
+
|
| 51 |
+
def show_evidence():
|
| 52 |
+
"""列出目前取得的所有證物。"""
|
| 53 |
+
# TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
|
| 54 |
+
if not evidence_bag:
|
| 55 |
+
print("目前空空如也,趕快去調查吧!")
|
| 56 |
+
else:
|
| 57 |
+
print("\n=== 目前收到的證物 ===")
|
| 58 |
+
for i, evidence in enumerate(evidence_bag, start=1):
|
| 59 |
+
print(f"{i}. {evidence}")
|
| 60 |
+
print("=============")
|
| 61 |
+
|
| 62 |
+
|
| 63 |
+
def make_deduction():
|
| 64 |
+
"""取得足夠證物後,讓玩家選擇真相。"""
|
| 65 |
+
if len(evidence_bag) < 3:
|
| 66 |
+
print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
|
| 67 |
+
return False
|
| 68 |
+
|
| 69 |
+
print("\n哪一個說法最符合所有證物?")
|
| 70 |
+
print("1. 有同學故意把鑽石棍木67藏在圖書館")
|
| 71 |
+
print("2. 風吹起鑽石棍木67,清潔推車不小心把它帶到圖書館")
|
| 72 |
+
print("3. 鑽石棍木67從一開始就放在圖書館")
|
| 73 |
+
answer = input("你的推理:").strip()
|
| 74 |
+
|
| 75 |
+
# TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
|
| 76 |
+
if answer == "2":
|
| 77 |
+
print("\n🎉 推理正確!窗邊的棍木6767色纖維跟推車的軌跡吻合,是一場意外!案件圓滿解決。")
|
| 78 |
+
return True
|
| 79 |
+
else:
|
| 80 |
+
print("\n❌ 案情似乎沒有這麼簡單,再重新看一次證物吧!")
|
| 81 |
+
return False
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
def show_menu():
|
| 85 |
+
print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
|
| 86 |
+
print("1. 調查六七年七十八九十一班教室")
|
| 87 |
+
print("2. 調查676767這波我挺偉偉的操場")
|
| 88 |
+
print("3. 調查676767競爭者不好玩圖書館")
|
| 89 |
+
print("4. 查看證物袋")
|
| 90 |
+
print("5. 提出推理")
|
| 91 |
+
print("6. 離開")
|
| 92 |
+
|
| 93 |
+
|
| 94 |
+
def main():
|
| 95 |
+
print("午休結束後,校慶展示櫃裡的鑽石棍木67消失了。你能找出真相嗎?")
|
| 96 |
+
|
| 97 |
+
while True:
|
| 98 |
+
show_menu()
|
| 99 |
+
choice = input("請選擇:").strip()
|
| 100 |
+
|
| 101 |
+
if choice in LOCATIONS:
|
| 102 |
+
investigate(choice)
|
| 103 |
+
elif choice == "4":
|
| 104 |
+
show_evidence()
|
| 105 |
+
elif choice == "5":
|
| 106 |
+
if make_deduction():
|
| 107 |
+
break
|
| 108 |
+
elif choice == "6":
|
| 109 |
+
print("案件暫停。證物袋已交回調查局。")
|
| 110 |
+
break
|
| 111 |
+
else:
|
| 112 |
+
print("請輸入 1~6。")
|
| 113 |
+
|
| 114 |
+
|
| 115 |
+
if __name__ == "__main__":
|
| 116 |
+
main()
|
projects/2026Fall進階專題六午/胡惟媗/week02_校園謎案調查局/case_data.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"title": "消失的校徽",
|
| 3 |
+
"intro": "午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?",
|
| 4 |
+
"locations": {
|
| 5 |
+
"1": {
|
| 6 |
+
"name": "六年一班教室",
|
| 7 |
+
"scene": "展示櫃半開,窗戶也沒有關好。",
|
| 8 |
+
"evidence": {
|
| 9 |
+
"id": "blue_fiber",
|
| 10 |
+
"name": "窗框上的藍色纖維",
|
| 11 |
+
"detail": "纖維顏色和清潔推車的布套相同。"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場司令台",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的輪痕。",
|
| 17 |
+
"evidence": {
|
| 18 |
+
"id": "wheel_track",
|
| 19 |
+
"name": "沾著亮粉的推車輪痕",
|
| 20 |
+
"detail": "亮粉和展示櫃內的裝飾相同。"
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"name": "圖書館",
|
| 25 |
+
"scene": "清潔推車停在書架旁,後方似乎有東西反光。",
|
| 26 |
+
"requires": ["blue_fiber", "wheel_track"],
|
| 27 |
+
"locked_text": "你看見推車,卻還不知道該檢查哪裡。也許要先找出它的移動路線。",
|
| 28 |
+
"evidence": {
|
| 29 |
+
"id": "badge",
|
| 30 |
+
"name": "卡在推車後方的校徽",
|
| 31 |
+
"detail": "校徽沒有損壞,背面黏著一小段藍色纖維。"
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"conclusions": {
|
| 36 |
+
"1": "有同學故意把校徽藏在圖書館",
|
| 37 |
+
"2": "風吹起校徽,清潔推車不小心把它帶到圖書館",
|
| 38 |
+
"3": "校徽從一開始就放在圖書館"
|
| 39 |
+
},
|
| 40 |
+
"correct_answer": "2",
|
| 41 |
+
"success": "推理正確!風把校徽吹到布套上,推車經過教室後又將它帶到圖書館。這是一場意外。"
|
| 42 |
+
}
|
projects/2026Fall進階專題六午/胡惟媗/week02_校園謎案調查局/main.py
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Week 2:校園謎案調查局 Starter。
|
| 2 |
+
|
| 3 |
+
先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
CASE_TITLE = "停止の時間(?"
|
| 7 |
+
|
| 8 |
+
LOCATIONS = {
|
| 9 |
+
"1": {
|
| 10 |
+
"name": "日本の地下鉄",
|
| 11 |
+
"scene": "車子裡面空無一人",
|
| 12 |
+
"evidence": "時間一直停在11:59",
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "座位隔壁",
|
| 16 |
+
"scene": "有一張照片",
|
| 17 |
+
"evidence": "是自己和過世的母親的照片",
|
| 18 |
+
},
|
| 19 |
+
"3": {
|
| 20 |
+
"name": "駕駛員座椅",
|
| 21 |
+
"scene": "地鐵一直行駛",
|
| 22 |
+
"evidence": "駕駛座沒有人",
|
| 23 |
+
},
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
evidence_bag = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def investigate(location_id):
|
| 30 |
+
"""調查地點並將新線索放入證物袋。"""
|
| 31 |
+
|
| 32 |
+
if location_id not in LOCATIONS:
|
| 33 |
+
print("找不到地點 請重找")
|
| 34 |
+
return
|
| 35 |
+
loc = LOCATIONS[location_id]
|
| 36 |
+
# TODO 2:顯示地點名稱與現場描述。
|
| 37 |
+
print(f"地點:{loc['name']}")
|
| 38 |
+
print(f"現場描述:{loc['scene']}")
|
| 39 |
+
# TODO 3:線索尚未取得時才 append 到 evidence_bag。
|
| 40 |
+
evidence = loc["evidence"]
|
| 41 |
+
if evidence not in evidence_bag:
|
| 42 |
+
evidence_bag.append(evidence)
|
| 43 |
+
print(f"取得新線索:{evidence}")
|
| 44 |
+
else:
|
| 45 |
+
print("找不到地點 請重找")
|
| 46 |
+
|
| 47 |
+
def show_evidence():
|
| 48 |
+
"""列出目前取得的所有證物。"""
|
| 49 |
+
# TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
|
| 50 |
+
print("證物袋功能還沒完成。")
|
| 51 |
+
|
| 52 |
+
|
| 53 |
+
def make_deduction():
|
| 54 |
+
"""取得足夠證物後,讓玩家選擇真相。"""
|
| 55 |
+
if len(evidence_bag) < 3:
|
| 56 |
+
print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
|
| 57 |
+
return False
|
| 58 |
+
|
| 59 |
+
print("\n哪一個說法最符合所有證物?")
|
| 60 |
+
print("1. 有同學故意把校徽藏在圖書館")
|
| 61 |
+
print("2. 風吹起校徽,清潔推車不小心把它帶到圖書館")
|
| 62 |
+
print("3. 校徽從一開始就放在圖書館")
|
| 63 |
+
answer = input("你的推理:").strip()
|
| 64 |
+
|
| 65 |
+
# TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
|
| 66 |
+
print("推理判定還沒完成。")
|
| 67 |
+
return False
|
| 68 |
+
|
| 69 |
+
|
| 70 |
+
def show_menu():
|
| 71 |
+
print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
|
| 72 |
+
print("1. 調查六年一班教室")
|
| 73 |
+
print("2. 調查操場司令台")
|
| 74 |
+
print("3. 調查圖書館")
|
| 75 |
+
print("4. 查看證物袋")
|
| 76 |
+
print("5. 提出推理")
|
| 77 |
+
print("6. 離開")
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
def main():
|
| 81 |
+
print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
|
| 82 |
+
|
| 83 |
+
while True:
|
| 84 |
+
show_menu()
|
| 85 |
+
choice = input("請選擇:").strip()
|
| 86 |
+
|
| 87 |
+
if choice in LOCATIONS:
|
| 88 |
+
investigate(choice)
|
| 89 |
+
elif choice == "4":
|
| 90 |
+
show_evidence()
|
| 91 |
+
elif choice == "5":
|
| 92 |
+
if make_deduction():
|
| 93 |
+
break
|
| 94 |
+
elif choice == "6":
|
| 95 |
+
print("案件暫停。證物袋已交回調查局。")
|
| 96 |
+
break
|
| 97 |
+
else:
|
| 98 |
+
print("請輸入 1~6。")
|
| 99 |
+
|
| 100 |
+
|
| 101 |
+
if __name__ == "__main__":
|
| 102 |
+
main()
|
projects/2026Fall進階專題六午/蔡昊儒/week02_校園謎案調查局/case_data.json
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"title": "消失的校徽",
|
| 3 |
+
"intro": "午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?",
|
| 4 |
+
"locations": {
|
| 5 |
+
"1": {
|
| 6 |
+
"name": "六年一班教室",
|
| 7 |
+
"scene": "展示櫃半開,窗戶也沒有關好。",
|
| 8 |
+
"evidence": {
|
| 9 |
+
"id": "blue_fiber",
|
| 10 |
+
"name": "窗框上的藍色纖維",
|
| 11 |
+
"detail": "纖維顏色和清潔推車的布套相同。"
|
| 12 |
+
}
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "操場司令台",
|
| 16 |
+
"scene": "地面剛拖過,留下一道彎向圖書館的輪痕。",
|
| 17 |
+
"evidence": {
|
| 18 |
+
"id": "wheel_track",
|
| 19 |
+
"name": "沾著亮粉的推車輪痕",
|
| 20 |
+
"detail": "亮粉和展示櫃內的裝飾相同。"
|
| 21 |
+
}
|
| 22 |
+
},
|
| 23 |
+
"3": {
|
| 24 |
+
"name": "圖書館",
|
| 25 |
+
"scene": "清潔推車停在書架旁,後方似乎有東西反光。",
|
| 26 |
+
"requires": ["blue_fiber", "wheel_track"],
|
| 27 |
+
"locked_text": "你看見推車,卻還不知道該檢查哪裡。也許要先找出它的移動路線。",
|
| 28 |
+
"evidence": {
|
| 29 |
+
"id": "badge",
|
| 30 |
+
"name": "卡在推車後方的校徽",
|
| 31 |
+
"detail": "校徽沒有損壞,背面黏著一小段藍色纖維。"
|
| 32 |
+
}
|
| 33 |
+
}
|
| 34 |
+
},
|
| 35 |
+
"conclusions": {
|
| 36 |
+
"1": "有同學故意把校徽藏在圖書館",
|
| 37 |
+
"2": "風吹起校徽,清潔推車不小心把它帶到圖書館",
|
| 38 |
+
"3": "校徽從一開始就放在圖書館"
|
| 39 |
+
},
|
| 40 |
+
"correct_answer": "2",
|
| 41 |
+
"success": "推理正確!風把校徽吹到布套上,推車經過教室後又將它帶到圖書館。這是一場意外。"
|
| 42 |
+
}
|
projects/2026Fall進階專題六午/蔡昊儒/week02_校園謎案調查局/main.py
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Week 2:校園謎案調查局 Starter。
|
| 2 |
+
|
| 3 |
+
先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
|
| 4 |
+
"""
|
| 5 |
+
|
| 6 |
+
CASE_TITLE = "失火的房子"
|
| 7 |
+
|
| 8 |
+
LOCATIONS = {
|
| 9 |
+
"1": {
|
| 10 |
+
"name": "廚房",
|
| 11 |
+
"scene": "烏漆嗎黑",
|
| 12 |
+
"evidence": "有電磁爐爆炸的痕跡",
|
| 13 |
+
},
|
| 14 |
+
"2": {
|
| 15 |
+
"name": "客廳",
|
| 16 |
+
"scene": "物品東倒西歪,有些物品燒焦",
|
| 17 |
+
"evidence": "打火機在地上",
|
| 18 |
+
},
|
| 19 |
+
"3": {
|
| 20 |
+
"name": "書房",
|
| 21 |
+
"scene": "棉被蓋住一個屍體",
|
| 22 |
+
"evidence": "屍體是房子主人的弟弟",
|
| 23 |
+
},
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
evidence_bag = []
|
| 27 |
+
|
| 28 |
+
|
| 29 |
+
def investigate(location_id):
|
| 30 |
+
"""調查地點並將新線索放入證物袋。"""
|
| 31 |
+
# TODO 1:確認 location_id 是否存在於 LOCATIONS。
|
| 32 |
+
str_id = str(location_id)
|
| 33 |
+
is_in_locations = False
|
| 34 |
+
for i in LOCATIONS:
|
| 35 |
+
if str_id == i:
|
| 36 |
+
is_in_locations = True
|
| 37 |
+
break
|
| 38 |
+
if is_in_locations == False:
|
| 39 |
+
return 0
|
| 40 |
+
# TODO 2:顯示地點名稱與現場描述。
|
| 41 |
+
print(LOCATIONS[str_id]["name"])
|
| 42 |
+
print(LOCATIONS[str_id]["scene"])
|
| 43 |
+
# TODO 3:線索尚未取得時才 append 到 evidence_bag。
|
| 44 |
+
if LOCATIONS[str_id]["evidence"] not in evidence_bag:
|
| 45 |
+
evidence_bag.append(LOCATIONS[str_id]["evidence"])
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
def show_evidence():
|
| 49 |
+
"""列出目前取得的所有證物。"""
|
| 50 |
+
# TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
|
| 51 |
+
if evidence_bag == []:
|
| 52 |
+
print("there is nothing in the bag bro")
|
| 53 |
+
else:
|
| 54 |
+
for index, evidence in enumerate(evidence_bag, 0):
|
| 55 |
+
print(f"Clue {index+1}: {evidence}")
|
| 56 |
+
|
| 57 |
+
print("證物袋功能還沒完成。")
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
def make_deduction():
|
| 61 |
+
"""取得足夠證物後,讓玩家選擇真相。"""
|
| 62 |
+
if len(evidence_bag) < 3:
|
| 63 |
+
print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
|
| 64 |
+
return False
|
| 65 |
+
|
| 66 |
+
print("\n哪一個說法最符合所有證物?")
|
| 67 |
+
print("1. 主人煮飯搞砸了")
|
| 68 |
+
print("2. 弟弟煮飯時去睡覺")
|
| 69 |
+
print("3. 主人用打火機點燃廚房,害死弟弟")
|
| 70 |
+
answer = input("你的推理:").strip()
|
| 71 |
+
|
| 72 |
+
# TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
|
| 73 |
+
if answer == "2":
|
| 74 |
+
print("success")
|
| 75 |
+
return True
|
| 76 |
+
print("推理判定還沒完成。")
|
| 77 |
+
return False
|
| 78 |
+
|
| 79 |
+
|
| 80 |
+
def show_menu():
|
| 81 |
+
print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
|
| 82 |
+
print("1. 調查六年一班教室")
|
| 83 |
+
print("2. 調查操場司令台")
|
| 84 |
+
print("3. 調查圖書館")
|
| 85 |
+
print("4. 查看證物袋")
|
| 86 |
+
print("5. 提出推理")
|
| 87 |
+
print("6. 離開")
|
| 88 |
+
|
| 89 |
+
|
| 90 |
+
def main():
|
| 91 |
+
print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
|
| 92 |
+
|
| 93 |
+
while True:
|
| 94 |
+
show_menu()
|
| 95 |
+
choice = input("請選擇:").strip()
|
| 96 |
+
|
| 97 |
+
if choice in LOCATIONS:
|
| 98 |
+
investigate(choice)
|
| 99 |
+
elif choice == "4":
|
| 100 |
+
show_evidence()
|
| 101 |
+
elif choice == "5":
|
| 102 |
+
if make_deduction():
|
| 103 |
+
break
|
| 104 |
+
elif choice == "6":
|
| 105 |
+
print("案件暫停。證物袋已交回調查局。")
|
| 106 |
+
break
|
| 107 |
+
else:
|
| 108 |
+
print("請輸入 1~6。")
|
| 109 |
+
|
| 110 |
+
|
| 111 |
+
if __name__ == "__main__":
|
| 112 |
+
main()
|