steveyehtw commited on
Commit
e2da85d
·
verified ·
1 Parent(s): 33f478a

Publish 26FSunAft week02 final projects

Browse files
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,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Week 2:校園謎案調查局 Starter。
2
+
3
+ 先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
4
+ """
5
+
6
+ CASE_TITLE = "消失的dinner"
7
+
8
+ LOCATIONS = {
9
+ "1": {
10
+ "name": "客廳",
11
+ "scene": "家裡的dinner不見了",
12
+ "evidence": "地上飯粒",
13
+ },
14
+ "2": {
15
+ "name": "房間",
16
+ "scene": "房間裡有一股dinner味",
17
+ "evidence": "很臭",
18
+ },
19
+ "3": {
20
+ "name": "廁所",
21
+ "scene": "廁所裡有dinner痕跡",
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("location not found")
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 LOCATIONS[location_id]["evidence"] not in evidence_bag:
40
+ evidence_bag.append(location_id)
41
+ print(f" {LOCATIONS[location_id]["evidence"]}")
42
+ #print("這個調查功能還沒完成。")
43
+
44
+
45
+ def show_evidence():
46
+ """列出目前取得的所有證物。"""
47
+ # TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
48
+ print("證物袋功能還沒完成。")
49
+
50
+
51
+ def make_deduction():
52
+ """取得足夠證物後,讓玩家選擇真相。"""
53
+ if len(evidence_bag) < 3:
54
+ print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
55
+ return False
56
+
57
+ print("\n哪一個說法最符合所有證物?")
58
+ print("1. 晚餐很臭,到進馬桶裡")
59
+ print("2. 晚餐太好吃,吃到馬桶的屎")
60
+ print("3. 弟弟吃到睡著變成dinner")
61
+ answer = input("你的推理:").strip()
62
+
63
+ # TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
64
+ print("推理判定還沒完成。")
65
+ return False
66
+
67
+
68
+ def show_menu():
69
+ print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
70
+ print(f"1. {LOCATIONS["1"]["name"]}")
71
+ print(f"2. {LOCATIONS["2"]["name"]}")
72
+ print(f"3. {LOCATIONS["3"]["name"]}")
73
+ print("4. 查看證物袋")
74
+ print("5. 提出推理")
75
+ print("6. 離開")
76
+
77
+
78
+ def main():
79
+ print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
80
+
81
+ while True:
82
+ show_menu()
83
+ choice = input("請選擇:").strip()
84
+
85
+ if choice in LOCATIONS:
86
+ investigate(choice)
87
+ elif choice == "4":
88
+ show_evidence()
89
+ elif choice == "5":
90
+ if make_deduction():
91
+ break
92
+ elif choice == "6":
93
+ print("案件暫停。證物袋已交回調查局。")
94
+ break
95
+ else:
96
+ print("請輸入 1~6。")
97
+
98
+
99
+ if __name__ == "__main__":
100
+ 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 = "18:35的約定"
7
+
8
+ LOCATIONS = {
9
+ "1": {
10
+ "name": "雨夜咖啡館",
11
+ "scene": "靠窗的07號桌上放著一個沒有署名的牛皮紙袋,店內已經準備打烊。",
12
+ "evidence": "紙袋裡的小紙條寫著「不要找我,去找星期三」,旁邊還有一把刻著B-03的舊鑰匙,咖啡收據顯示18:35,但監視器紀錄中18:35沒有任何人坐在07號桌。"
13
+ },
14
+
15
+ "2":{
16
+ "name": "舊圖書館",
17
+ "scene": "07號書架上的《消失的房間》沒有借閱紀錄,書頁中夾著一張泛黃的車票。",
18
+ "evidence": "書中被鉛筆圈起「鐘、北、三」三個字,車票日期正好是星期三,圖書館的舊平面圖上,北側曾經存在一個B-03區域,而鑰匙上的編號也正是B-03。"
19
+ },
20
+
21
+
22
+ "3": {
23
+ "name": "老鐘樓",
24
+ "scene": "鐘樓的大鐘停在18:35,地下室的現有地圖只有B-01和B-02,卻找不到B-03。",
25
+ "evidence": "根據舊平面圖,B-03其實代表地下第三層,而牆後藏著一個沒有標記的暗門,暗門後找到三封不同日期的信,三封信分別對應咖啡館、圖書館與鐘樓,最後一封揭露三個地方其實是一個人留下的三段記憶。"
26
+ }
27
+ }
28
+
29
+ evidence_bag = []
30
+
31
+
32
+ def investigate(location_id):
33
+ """調查地點並將新線索放入證物袋。"""
34
+ # TODO 1:確認 location_id 是否存在於 LOCATIONS。
35
+ if location_id not in LOCATIONS:
36
+ print("錯誤編號,沒這個地點")
37
+ return
38
+ # TODO 2:顯示地點名稱與現場描述。
39
+ print(f"你來到了{LOCATIONS[location_id]['name']}")
40
+ print(f"現場描述:{LOCATIONS[location_id]['scene']}")
41
+ # TODO 3:線索尚未取得時才 append 到 evidence_bag。
42
+ if LOCATIONS[location_id]["evidence"] not in evidence_bag:
43
+ evidence_bag.append(location_id)
44
+ print(f"獲得了{LOCATIONS[location_id]["evidence"]}")
45
+ #print("這個調查功能還沒完成。")
46
+
47
+
48
+ def show_evidence():
49
+ """列出目前取得的所有證物。"""
50
+ # TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
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(f"1. 調查{LOCATIONS["1"]["name"]}")
74
+ print(f"2. 調查{LOCATIONS["2"]["name"]}")
75
+ print(f"3. 調查{LOCATIONS["3"]["name"]}")
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,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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": "米0死亡原因:心臟驟停。",
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(f"錯誤編號,沒這個地點")
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 LOCATIONS[location_id]["evidence"] not in evidence_bag:
40
+ evidence_bag.append(location_id)
41
+ print(f'取得了{LOCATIONS[location_id]['evidence']}')
42
+
43
+ print("這個調查功能還沒完成。")
44
+
45
+
46
+ def show_evidence():
47
+ """列出目前取得的所有證物。"""
48
+ # TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
49
+ print("證物袋功能還沒完成。")
50
+
51
+
52
+ def make_deduction():
53
+ """取得足夠證物後,讓玩家選擇真相。"""
54
+ if len(evidence_bag) < 3:
55
+ print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
56
+ return False
57
+
58
+ print("\n哪一個說法最符合所有證物?")
59
+ print("1. 有人把米0殺了")
60
+ print("2. 米0自殺了")
61
+ print("3. 他被鬼帶走了")
62
+ answer = input("你的推理:").strip()
63
+
64
+ # TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
65
+ print("推理判定還沒完成。")
66
+ return False
67
+
68
+
69
+ def show_menu():# 凌晨三點的病房
70
+ print(f"\n=== :{CASE_TITLE} ===")
71
+ print(f"1. 調查{LOCATIONS["1"]["name"]}")
72
+ print(f"2. 調查{LOCATIONS["2"]["name"]}")
73
+ print(f"3. 調查{LOCATIONS["3"]["name"]}")
74
+ print("4. 查看證物袋")
75
+ print("5. 提出推理")
76
+ print("6. 離開")
77
+
78
+ print(f"\n=== :{CASE_TITLE} ===")
79
+ print("1. 有人把米0殺了")
80
+ print("2. 米0自殺了")
81
+ print("3. 他被鬼帶走了")
82
+
83
+ def main():
84
+ print("現在是6:07分,你能破案嗎?")
85
+
86
+ while True:
87
+ show_menu()
88
+ choice = input("請選擇:").strip()
89
+
90
+ if choice in LOCATIONS:
91
+ investigate(choice)
92
+ elif choice == "4":
93
+ show_evidence()
94
+ elif choice == "5":
95
+ if make_deduction():
96
+ break
97
+ elif choice == "6":
98
+ print("案件暫停。證物袋已交回調查局。")
99
+ break
100
+ else:
101
+ print("請輸入 1~6。")
102
+
103
+
104
+ if __name__ == "__main__":
105
+ 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,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Week 2:校園謎案調查局 Starter。
2
+
3
+ 先完成 TODO 1~4。程式必須能反覆探索、收集線索、查看證物並提出推理。
4
+ """
5
+
6
+ CASE_TITLE = "神鞋失竊案"
7
+
8
+ LOCATIONS = {
9
+ "1": {
10
+ "name": "NBA邁阿密熱火主場球員休息室",
11
+ "scene": "LeBron的球衣展示櫃半開,後方通往球員通道的通風窗也沒有關好。",
12
+ "evidence": "通風窗框上勾到了某件復古球衣的藍色纖維",
13
+ },
14
+ "2": {
15
+ "name": "NBA邁阿密熱火主場球場中央",
16
+ "scene": "木地板剛用球場洗地機拖過,卻留下一道彎向球隊戰術分析室的輪痕。",
17
+ "evidence": "沾著中場啦啦隊表演亮粉的裝備推車輪痕",
18
+ },
19
+ "3": {
20
+ "name": "NBA邁阿密熱火主場球隊戰術分析室",
21
+ "scene": "一台戰術板清潔推車停在錄影帶書架旁,後方有螢光粉紅色的東西反光。",
22
+ "evidence": "卡在推車後方的失竊 Nike 籃球鞋與 Ray Gun 的球隊胸章",
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
+ # TODO 2:顯示地點名稱與現場描述。
36
+ print(f"牛來到了{LOCATIONS[location_id]["name"]}")
37
+ print(f"現場描述{LOCATIONS[location_id]["scene"]}")
38
+ # TODO 3:線索尚未取得時才 append 到 evidence_bag。
39
+ if LOCATIONS[location_id]["evidence"] not in evidence_bag:
40
+ evidence_bag.append(location_id)
41
+ print(f"取得了{LOCATIONS[location_id]["evidence"]}")
42
+ #print("這個調查功能還沒完成。")
43
+
44
+
45
+ def show_evidence():
46
+ """列出目前取得的所有證物。"""
47
+ # TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
48
+ print("證物袋功能還沒完成。")
49
+
50
+
51
+ def make_deduction():
52
+ """取得足夠證物後,讓玩家選擇真相。"""
53
+ if len(evidence_bag) < 3:
54
+ print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
55
+ return False
56
+
57
+ print("\n哪一個說法最符合所有證物?")
58
+ print("1. 有同學故意把校徽藏在圖書館")
59
+ print("2. 風吹起校徽,清潔推車不小心把它帶到圖書館")
60
+ print("3. 校徽從一開始就放在圖書館")
61
+ answer = input("你的推理:").strip()
62
+
63
+ # TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
64
+ print("推理判定還沒完成。")
65
+ return False
66
+
67
+
68
+ def show_menu():
69
+ print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
70
+ print(f"1. 調查{LOCATIONS["1"]["name"]}")
71
+ print(f"2. 調查{LOCATIONS["2"]["name"]}")
72
+ print(f"3. 調查{LOCATIONS["3"]["name"]}")
73
+ print("4. 查看證物袋")
74
+ print("5. 提出推理")
75
+ print("6. 離開")
76
+
77
+
78
+ def main():
79
+ print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
80
+
81
+ while True:
82
+ show_menu()
83
+ choice = input("請選擇:").strip()
84
+
85
+ if choice in LOCATIONS:
86
+ investigate(choice)
87
+ elif choice == "4":
88
+ show_evidence()
89
+ elif choice == "5":
90
+ if make_deduction():
91
+ break
92
+ elif choice == "6":
93
+ print("案件暫停。證物袋已交回調查局。")
94
+ break
95
+ else:
96
+ print("請輸入 1~6。")
97
+
98
+
99
+ if __name__ == "__main__":
100
+ 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,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 not in LOCATIONS:
33
+ print("錯誤編號")
34
+ return
35
+ # TODO 2:顯示地點名稱與現場描述。
36
+ print(f"你來到了{LOCATIONS[locition_id]["name"]}")
37
+ print(f"現場描述:{LOCATIONS[locition_id]["scene"]}")
38
+ # TODO 3:線索尚未取得時才 append 到 evidence_bag。
39
+ if LOCATIONS[location_id]["evidence"] not in evidence_bag:
40
+ evidence_bag.append(location_id)
41
+ print(f"取得了{LOCATIONS[location_id]["evidence"]}")
42
+ print("這個調查功能還沒完成。")
43
+
44
+
45
+ def show_evidence():
46
+ """列出目前取得的所有證物。"""
47
+ # TODO 4:沒有證物時顯示提示;否則以 1 開始編號列出。
48
+ print("證物袋功能還沒完成。")
49
+
50
+
51
+ def make_deduction():
52
+ """取得足夠證物後,讓玩家選擇真相。"""
53
+ if len(evidence_bag) < 3:
54
+ print(f"證物不足:目前 {len(evidence_bag)}/3。再去調查吧!")
55
+ return False
56
+
57
+ print("\n哪一個說法最符合所有證物?")
58
+ print("1. 有同學故意把校徽藏在圖書館")
59
+ print("2. 風吹起校徽,清潔推車不小心把它帶到圖書館")
60
+ print("3. 校徽從一開始就放在圖書館")
61
+ answer = input("你的推理:").strip()
62
+
63
+ # TODO 5(Checkpoint C):判斷答案,正確時回傳 True。
64
+ print("推理判定還沒完成。")
65
+ return False
66
+
67
+
68
+ def show_menu():
69
+ print(f"\n=== 校園謎案調查局:{CASE_TITLE} ===")
70
+ print(f"1. 調查{LOCATONS["1"]["name"]")
71
+ print(f"2. 調查{LOCATONS["2"]["name"]")
72
+ print(f"3. 調查{LOCATONS["3"]["name"]")
73
+ print("4. 查看證物袋")
74
+ print("5. 提出推理")
75
+ print("6. 離開")
76
+
77
+
78
+ def main():
79
+ print("午休結束後,校慶展示櫃裡的校徽消失了。你能找出真相嗎?")
80
+
81
+ while True:
82
+ show_menu()
83
+ choice = input("請選擇:").strip()
84
+
85
+ if choice in LOCATIONS:
86
+ investigate(choice)
87
+ elif choice == "4":
88
+ show_evidence()
89
+ elif choice == "5":
90
+ if make_deduction():
91
+ break
92
+ elif choice == "6":
93
+ print("案件暫停。證物袋已交回調查局。")
94
+ break
95
+ else:
96
+ print("請輸入 1~6。")
97
+
98
+
99
+ if __name__ == "__main__":
100
+ main()