Snake Battle 指導教授: 曾學文 組員: 4102056035 鄭涵德 4102053027 趙一驎 Python期末專題 Snake Battle 指導教授: 曾學文 組員: 4102056035 鄭涵德 4102053027 趙一驎
Outline 專題目標 遊戲操作 遊戲規則 實作方法 細部解說 遊戲畫面
專題目標 實作經典貪食蛇遊戲 雙人對戰遊戲 簡單好玩
遊戲操作 玩家1 : 鍵盤 上下左右+右邊的 shift 鍵 玩家2 : 鍵盤 w s a d + 左邊的 shift 鍵
遊戲規則 速度等級 速度等級隨時間每30秒提升一階 按住 shift 按鍵可以加速,但會消耗分數 四種飼料 綠色(+10)、黃色(+15)、紅色(+20) 飼料,維持畫面上各一顆 紫色飼料,每次速度等級提升畫面上出現一顆 若身體長度 > 6,減短身長5,不獲得分數 若身體長度 < 6,獲得分數(+40) 每種飼料都還是會造成身體長度 + 1 勝負 最先達到目標分數者 另一方撞到牆壁或身體
實作方法 資料結構 方格背景 => 二維陣列,存放顏色 蛇的身體 => 一維陣列,存放座標 蛇頭、蛇尾=> 索引變數 方格背景 => 二維陣列,存放顏色 蛇的身體 => 一維陣列,存放座標 蛇頭、蛇尾=> 索引變數 移動輸入 => 長度為3的佇列 工具 thread => 更新二維陣列 pygame => 繪圖、接收輸入 lock => 更新陣列時的衝突避免 time => 計時
視窗架構 視窗 : Window = pygame.display.set_mode(( 視窗寬 ,視窗高 )) 幀數 : pygame.time.Clock().tick( 幀數 ) 底色 : Window.fill(背景色) 格線 : pygame.draw.line(視窗, 顏色 , 起點座標 , 終點座標 ) 標籤 : Label = font.render( 字串 , 1, 顏色 ) Window.blit( Label , 座標 ) 圖案 : 方 : pygame.draw.rect( Window , 顏色 , 座標) <用於蛇體> 圓 : pygame.draw.circle( Window , 顏色 , 座標) <用於飼料>
GRID 二維陣列承現蛇身與飼料
飼料機制 維持畫面上各一顆 隨機出現 綠色(+10)、黃色(+15)、紅色(+20) 紫色飼料 每次速度等級提升畫面上出現一顆 若身體長度 > 6,減短身長5,不加分 若身體長度 < 6,獲得分數(+40) 每種飼料都還是會造成身體長度 + 1
按鍵handlerEvent架構 pygame.event.get() pygame.key.get_pressed() 蛇速加速 event.type KEYDOWN pygame.K_RSHIFT 蛇身控制 Player1 : ↑ ↓ ← → Player2 : W A S D pygame.K_RSHIFT
加速
判定勝負 最先達到目標分數者 另一方撞到牆壁或身體
遊戲畫面