# Homework 1 **siriuskoan & yjrubixcube** --- ## Outline - 相關資訊 - 事前準備 - 作業內容 - 相關教學 --- ## 相關資訊 - 截止日期為 4/30 - 請用 Python3 (最好是用 3.11 但應該差別不大) 寫作業 - [作業資訊](https://hackmd.io/yichzSHkRRinQDgxykF4VQ) - [繳交表單](https://forms.gle/FYbjVT5ThfmQNX4a6) --- ## 事前準備 ---- ### 安裝 Python3 但大家應該都裝好了 ---- ### 安裝 pygame ``` $ python3 -m pip install pygame --user ``` ---- ### 下載作業 [連結](https://drive.google.com/file/d/1YrwB7ykygJAjRtRGN6UvgBSgt__f2TPa/view?usp=sharing) 載下來之後解壓縮會看到 - `main.py` - `Models.py` - `Controllers.py` - `Config.py` ---- ### 嘗試跑跑看 ``` $ python main.py ``` ---- ### 嘗試跑跑看 成功的話會跳出一個視窗然後馬上消失,同時 terminal 會出現 ![](https://i.imgur.com/XZLbdDs.png) --- ## 作業內容 反正就是寫個貪吃蛇 但沒那麼狠,有模板 ![](https://i.imgur.com/YLtHfkd.png) ---- ### 遊戲規則 - 透過方向鍵控制貪吃蛇移動,並且 - 吃到食物長度會變長 - 吃到毒藥長度會變短 - 碰到邊界、牆壁、自己就遊戲結束 - 碰到食物或毒藥後要生出新的對應物件 - 移動的時間間隔會隨著蛇的長度而變短 ---- ### 你們要做的事 詳細內容及配分請見上述的文件,總分 125 分 - 移動 - 生成物件 - 碰撞 - 遊戲機制 - 其他 ---- ### 繳交 交作業的時候請繳交全部的 `.py` 檔案,以及介紹你的創意部分的 `README.md` 但如果沒有做創意部份的話,只需要你們修改 `Model.py` 和 `Controller.py` --- ## 相關教學 ---- ### `class` ```python= class Food: def __init__(self, pos): self.surf = pg.surface.Surface(size=(SNAKE_SIZE, SNAKE_SIZE)) self.surf.fill(FOOD_COLOR) self.rect = self.surf.get_rect(topleft=pos) @property def pos_x(self): return self.rect.topleft[0] @property def pos_y(self): return self.rect.topleft[1] ``` ---- ### `class` `class` 裡面的 `self` 會代指物件本身,像這個例子就是代指蛇本身 ---- ### Coding Style Python 語言本身很自由,但有推薦一些程式碼風格,這些規則都定義在 PEP8 裡面 我們可以用 `black` 來快速幫你 reformat ---- ### Coding Style 下載 `black` ``` $ python3 -m pip install black --user ``` reformat 全部的檔案 ``` $ python3 -m black . ``` --- ### pygame 座標 ![](https://i.imgur.com/Re4yjP0.png) ---- ### 貼心提醒 - 基本架構已經寫好了,也不需要理解每一行程式的意思 - debug 時可以用 `print` 幫助你 - 遇到不知道甚麼東西的時候先 `print` 就對了 - 不懂就問 --- ## Live Demo --- ## Q & A --- ## 課堂練習 實作 `draw_snake` 的一部分
{"metaMigratedAt":"2023-06-18T01:01:16.134Z","metaMigratedFrom":"YAML","title":"Homework 1","breaks":true,"contributors":"[{\"id\":\"a2dd0460-a150-40b3-8024-44d3b3f2e06b\",\"add\":2049,\"del\":50}]"}
    407 views