# 2023 python 語法班 一階大作業 siriuskoan & yjrubixcube --- ## 作業簡介 [spec連結](/yichzSHkRRinQDgxykF4VQ) - 用python跟pygame寫貪吃蛇 - 基本的架構已經寫好了 - 實作一些function/method ---- ## 作業目標 - 熟悉之前學過的python語法 - 學習寫稍微長一點的程式 - 體驗python的應用(Pygame) ---- ## 貼心提醒 - 4/30 截止 - 不需要知道程式碼每一行在幹嘛 - 除蟲的時候可以使用print大法 - 也可以用break/return - 善用註解 - 不懂就問 --- ## 前置作業 ---- ### pygame `$ python -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/j61lWfS.png) --- ## 程式碼 ---- ### Class - 自定義變數型態 - 用某個模板做出一個變數 - 有屬性(attribute)跟方法(method) - 用`物件.attribute`或是`物件.method(參數)` ---- ```python= class Food: # 有關Food的初始化、method、attribute等 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] # 用Food生成一個物件food1 food1 = Food((100, 200)) print(food1.pos_x) # 100 ``` ---- ### 遊戲物件 - Player ```python= player = Player() player.head_x player.head_y player.length player.snake_list # 一個list[list] player.snake_list[3] # [x, y, SNAKE_SIZE, SNAKE_SIZE] ``` 遊戲裡面所有的座標都是記左上角! 遊戲裡面所有的座標都是記左上角!! 遊戲裡面所有的座標都是記左上角!!! ---- ### 遊戲物件 - 其他 `Food, Poison, Wall` `foods, walls, next_walls (list)` ```python= p = Poison((89, 64)) x = foods[3].pos_x y = walls[2].pox_y ``` 遊戲裡面所有的座標都是記左上角! 遊戲裡面所有的座標都是記左上角!! 遊戲裡面所有的座標都是記左上角!!! ---- ### 座標 - pygame的`(0, 0)`在畫面左上角 - x 向右為正 - y 向下為正 ![](https://i.imgur.com/5rPFbyR.png) --- ## 遊戲簡介 ---- ![](https://i.imgur.com/TZTWyPh.png) ---- ### 規則 - 碰到食物(紅色) - 碰到毒藥(綠色)變短 - 碰到牆壁(白色)遊戲結束 - 碰到自己遊戲結束 - 超出邊界遊戲結束 ---- ### 物件 - 蛇 用方向鍵控制蛇(黃藍)的移動 ![](https://i.imgur.com/YLtHfkd.png) ---- ### 物件 - 食物 蛇碰到食物(紅色)會變長 吃完後要生新的食物 ---- ### 物件 - 食物 ![](https://i.imgur.com/ao0WIfO.png) ---- ### 物件 - 食物 ![](https://i.imgur.com/YLtHfkd.png) ---- ### 物件 - 牆壁 蛇吃到食物的時候後生新的牆壁(白色) 新的牆壁要在現有牆壁周圍 ---- ### 物件 - 牆壁 ![](https://i.imgur.com/ZiiySXF.png) ---- ### 物件 - 牆壁 ![](https://i.imgur.com/YLtHfkd.png) ---- ### 物件 - 毒藥 蛇吃到毒藥長度變短 吃到毒藥或食物後生成新的毒藥 ---- ### 物件 - 毒藥 ![](https://i.imgur.com/dXNcNf0.png) ---- ### 物件 - 毒藥 ![](https://i.imgur.com/2VlW5TV.png) --- ## Coding style ---- 增加程式的可讀性 推薦風格: [PEP8](https://peps.python.org/pep-0008/) 我們可以用`black`來快速reformat ---- ### `black` 下載 `$ python -m pip install black` reformat `main.py` `$ black main.py` reformat 所有檔案 `$ black .` --- ## 作業繳交 交作業的時候請繳交一個zip檔(`王小明_北區.zip`) 解壓縮 `王小明_北區.zip`後,資料夾的內容應該要長這樣 ![](https://i.imgur.com/17FvxmO.png) ---- ### 如何zip 先把檔案放到資料夾`王小明_北區`內,然後在終端機/cmd裡面打 `zip -r 王小明_北區.zip 王小明_北區` --- # Q & A
{"metaMigratedAt":"2023-06-18T00:24:12.694Z","metaMigratedFrom":"YAML","title":"2023 python 語法班 一階大作業","breaks":true,"contributors":"[{\"id\":\"54bbdba3-ffbf-423a-b026-751cb8a77149\",\"add\":4371,\"del\":1485}]"}
    440 views