## 資訊營 Challenge
網址:https://bit.ly/302KPeD
Note:
開好 server
開好 vmware
---
## 介紹一下我
* 蔡奇夆 <!-- .element: class="fragment" data-fragment-index="1" -->
* 大二 -> 大三 <!-- .element: class="fragment" data-fragment-index="2" -->
* 系上網管團隊 - 防火牆組<!-- .element: class="fragment" data-fragment-index="3" -->
* Python 愛好者 <!-- .element: class="fragment" data-fragment-index="4" -->
* 蛋研社<!-- .element: class="fragment" data-fragment-index="5" --> :cake:<!-- .element: class="fragment" data-fragment-index="5" -->
* :heart_eyes_cat:<!-- .element: class="fragment" data-fragment-index="6" --> 極端貓派份子<!-- .element: class="fragment" data-fragment-index="6" --> :cat:<!-- .element: class="fragment" data-fragment-index="6" -->
---
## 遊戲下載
為了分流,請大家依小隊來選擇下載網址:
* [1 小 / 6 小](http://140.112.194.51:9122)
* [2 小 / 7 小](http://140.112.194.52:9122)
* [3 小 / 8 小](http://140.112.194.53:9122)
* [4 小 / 9 小](http://140.112.194.33:9122)
* [5 小 / 10 小](http://140.112.194.35:9122)
Note:
檔案大小有大概 100 多 MB,如果網路只有 200 MB 的話就跟旁邊或隊隨借ㄘ到飽ˇ
oasis1
oasis2
oasis3
linux2
linux4
`./deploy.sh run`
`./deploy.sh clean`
`./deploy.sh upload`
---
故事是這樣的…
----
相傳德田商旅雖然是提供旅人與學生們休息的地方,但在其實世界各地許多重要的網路服務,全部都放在德田商旅一個神祕的房間。
Note:
德田商旅就是大家無緣用到的那間正在整修的資工系館。
----
這神祕的房間裡堆滿了各大服務的工作站主機。同時,有著 4 顆小電球在爭奪著工作站的使用權。因為資源有限,為了取得工作站永久的使用權,他們展開了驚心動魄的大亂鬥。
----
在這場大亂鬥中,每顆小電球都要在保護自身的情況下,嘗試將別人電飛。被電飛的小電球,將永遠消失在德田商旅,成為宇宙中的一縷塵埃……
---
## 講人話
* 這是一個 4 人遊戲
* 你是一顆帶電的小電球
* 你要一直電別人,把別人電飛場外
* 被電到的話,自己電壓就會增加,下次被電到就飛更遠
* 可以三段跳
* 有很多有趣的道具…
----
## 講人話(續)
* 這是一個 4 人遊戲
* 每個小隊要用 Python 寫一個 AI 來玩遊戲
* 最後一天會打一個積分賽,選出最強的 3 個小隊
* 最終魔王等待著最強 AI 的挑戰……
* 遊戲詳細介紹: [Document](https://hackmd.io/@puredzom/SkQ29Otkw)
----
### 具體來說,AI 要幹嘛?
* 現實生活的時間是連續的,但遊戲裡是一格一格的
* AI 要在每個時間點,決定要做什麼動作
* 總共有 8 種動作:
```python
# action
AI_DIR_LEFT = 0
AI_DIR_RIGHT = 1
AI_DIR_JUMP = 2
AI_DIR_LEFT_JUMP = 3
AI_DIR_RIGHT_JUMP = 4
AI_DIR_ATTACK = 5
AI_DIR_USE_ITEM = 6
AI_DIR_STAY = 7
```
Note:
一秒被切成 60 個時間點,每個時間點要回傳這 8 個裡面的其中一個
----
### 具體來說,AI 要幹嘛?(續)
* 你們要討論出自己 AI 的策略,然後用 Python 寫出來
* 例:`AI/team_default.py`
Note:
平常都是人在玩遊戲,我們要想看看自己會用什麼策略來玩,然後寫成一個 Python AI。
等等會看 `team_default.py` 裡面在幹嘛
---
## 執行遊戲
1. 把下載下來的 .zip 檔 **解壓縮**
2. 打開 vscode,按左上角的 File -> Open Folder... ,打開我們的 Challenge 資料夾
3. 按 ctrl + shift + \` 來開啟終端機,打 `python main.py`
Note:
要示範給他們看,用 vmware 開 Windows。
----

---
## 來看看遊戲檔案
* `AI` 資料夾用來存放 AI 的程式碼,範例 AI 跟你們的 AI 都要放在裡面
* `README.md` 裡面這個投影片的連結和遊戲的 Document
* 其他檔案都是遊戲執行會用到的,不用理會
----
## AI 的檔案格式
* 檔案必須是 `team_<name>.py` 的格式其中 `<name>` 是你幫你的 AI 取的名字,如 `team_alice.py`、`team_bob.py`
* 第五天上繳檔案時,要把檔名改成 `team_<小隊編號>.py` ,如 `team_3.py`
* 這幾天電腦都 **不要關機**,下課前會提醒大家要把程式碼備份到隊輔傳給你們的雲端空間(怕別組偷看你的 AI 的話可以刪掉 AI 的檔案)
----
## AI 的檔案格式(續)
1. 在左邊的資料夾裡面,在 AI 資料夾裡面找到 `team_default.py`
2. 新開一個檔案叫作 `team_<小隊編號>.py` 在 `team_default.py` 旁邊,把 `team_default.py` 的內容貼到 `team_<小隊編號>.py` 裡面
3. 下一頁來看裡面寫了什麼內容
Note:
示範,用 vmware 的 windows
----
## AI 的檔案格式(續)
1. 有一個 class `TeamAI`(不要改他的名字),你們要寫的是 `decide` 這個函數的內容
2. `decide` 函數要回傳的值就是上面提到的 8 種行為
3. 參考 [Document](https://hackmd.io/@puredzom/SkQ29Otkw#Helper) 裡面的 Helper,讀取遊戲的狀態,經過一些自己的判斷,決定當前時間點要幹嘛
----
## AI 的檔案格式(續)
例如 `team_default.py` 裡面的 AI
,做的事情就是…
Note:
直接開 code 來講解
```
pop(self, index=-1, /)
Remove and return item at index (default last).
```
----
## AI 的檔案格式(續)
善用 `walk_to_position(position)` 函數!
(在 [Document](https://hackmd.io/@puredzom/SkQ29Otkw#Helper) 的最下方)
---
## 執行遊戲(續)
* `python main.py $1 $2 $3 $4`
* `$1` ~ `$4` 就傳 4 個玩家的 AI 名稱
* 如果你們寫了 jason(`team_jason.py`) 跟 json(`team_json.py`) 兩個 AI,想讓他們兩個和 default AI 較量一下,就可以執行
`python main.py jason json default default`
* 建議不要改 default AI,要改的話複製到自己的檔案來改,這樣子要判斷自己 AI 的強度才有得對照
----
## 執行遊戲(續)
* `python main.py $1 $2 $3 $4`
* `$1` ~ `$4` 就傳 4 個玩家的 AI 名稱
* 如果要加入手動玩家,AI 名稱那邊就打 `m`
* 例如,`python main.py m default `
`jason m` 代表第 1 和第 4 個玩家是手動玩家,第 2 個玩家是 default AI,第 3 個玩家是 jason 這個 AI
---
## 小挑戰
1. 三個手動玩家打一個 default AI,把 default AI 的五條命都打掉
2. 兩個手動玩家打兩個 default AI,幫兩個 default AI 都各裝上所有道具卡各 3 張,其中一位手動玩家獲得第 1 名
Note:
這個等等大家可以試,現在先繼續聽我講完最後的小叮嚀
雖然這邊叫大家合作來打 default AI,但其實最後各小隊的比賽不是合作模式,是競爭模式喔
---
## 小叮嚀
* 如果遊戲執行到一半 crash 了,就表示你的程式出現 bug 了,可以自己試圖找看看問題點,找不到的話可以舉手問助教
* 如果 AI 的運算量太大,可能會影響到遊戲的進行,所以想好策略之後可以先和助教們討論看看
* 在 debug 的時候,可以把東西 print 出來,看看他的值是不是跟你想像的一樣
----
## 小叮嚀(續)
* 有想法之後,可以跟你的隊員一起討論看看,可以想想怎麼分工開發
* 如果你比較慢跟上,發現其他人都在寫了,也不用就晾在旁邊不知道要幹嘛。你可以把自己的想法寫成自己的 AI,讓你隊員寫的 AI 有個競爭對手可以檢驗!
Note:
才不會說是說不定你自己寫的 AI 還比其他人合作寫出來的東西強咧。
---
那麼,祝好運!
Note:
多問助教問題
其實 default AI 就已經夠強了,如果沒想法的話可以從撿道具開始?
給隊輔們備份/第五天上傳 AI 的雲端
下課前 10 分鐘提醒上傳
1: https://drive.google.com/drive/folders/1Cr13rT-Q93s8RWgZlsRaqTTtueyr3tYZ?usp=sharing
2: https://drive.google.com/drive/folders/1W7rdCD9iMMvRv_bY67-Bd7wfnQaBndn1?usp=sharing
3: https://drive.google.com/drive/folders/11YPab7O8E5uz7ot_GLHaXcVNvOXsiMy3?usp=sharing
4: https://drive.google.com/drive/folders/1AgpFvksSR8-awErfdgOgyg7_9qm1zWXM?usp=sharing
5: https://drive.google.com/drive/folders/1vclrfJyhFgdpzcb00P_zCXGJ4Gt1lfNK?usp=sharing
6: https://drive.google.com/drive/folders/17fr0acP3E_AqdiALwu0Zywcis1W5la0B?usp=sharing
7: https://drive.google.com/drive/folders/15HRHJ7Byj-vQe-u9O4B9d2Qq1qlhnt9X?usp=sharing
8: https://drive.google.com/drive/folders/1UU4ZX0T_ekzcPoAO6VNlD2ezX59N0sPJ?usp=sharing
9: https://drive.google.com/drive/folders/1lsEjTFcfA3OabksYCP0gFZosHkaJ33wt?usp=sharing
10: https://drive.google.com/drive/folders/17nqJ5Bkl2Qk2rKe6BFIhnAmXepESdRiL?usp=sharing
{"metaMigratedAt":"2023-06-15T10:37:11.649Z","metaMigratedFrom":"YAML","title":"資訊營 Challenge","breaks":true,"slideOptions":"{\"theme\":\"sky\",\"transition\":\"slide\"}","contributors":"[{\"id\":\"baacd64d-7cb2-4e4e-8861-307070fc27a0\",\"add\":6551,\"del\":1003}]"}