怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)
原標題:少兒編程分享:手把手教你用PYTHON編寫貪吃蛇(二)
檢測和判斷
無論我們制作的簡單或者復雜的游戲
這都是最關鍵的兩個部分
事件處理循環
61. while True: # 游戲主循環
62. for event in pygame.event.get(): # 事件處理循環
63. if event.type == QUIT:
64. terminate()
65. elif event.type == KEYDOWN:
66. if (event.key == K_LEFT or event.key == K_a) and direction != RIGHT:
67. direction = LEFT
68. elif (event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
69. direction = RIGHT
70. elif (event.key == K_UP or event.key == K_w) and direction != DOWN:
71. direction = UP
72. elif (event.key == K_DOWN or event.key == K_s) and direction != UP:
73. direction = DOWN
74. elif event.key == K_ESCAPE:
75. terminate()
從第61行開始,我們進入了游戲的主循環。第62行的for循環用于進行事件(event)處理。如果事件(event)是QUIT事件,我們將調用terminate()函數 。
如果時間不是QUIT,而是按下鍵盤(KEYDOWN)的話,我們就檢測按下的的鍵是不是WASD中的某一個。除此之外,我們還需要一個額外的檢測, 確保小蛇不會轉到和當前行進方向相反的方向,因為這樣它就會立馬撞到自己啦!例如,如果小蛇在向左行進,而玩家按到了向右的按鍵,在我們代碼的控制下,小蛇是不會做出反應的!
撞擊檢測
77. # 檢測小蛇是否撞到自己或者超出窗口邊緣
78. if wormCoords[HEAD]['x'] == -1 or wormCoords[HEAD]['x'] == CELLWIDTH or wormCoords[HEAD]['y'] == -1 or wormCoords[HEAD]['y'] == CELLHEIGHT:
79. return # 游戲結束
80. for wormBody in wormCoords[1:]:
81. if wormBody['x'] == wormCoords[HEAD]['x'] and wormBody['y'] == wormCoords[HEAD]['y']:
82. return # 游戲結束
這段代碼中,我們檢測小蛇的頭是否超出了游戲窗口的邊緣,或者撞到了一個被自己的另一段身體占據的小方格。
那么應該如何檢測小蛇的頭是否超出窗口邊緣呢?由于窗口內所有小方格的坐標有一定范圍,我們只需要檢測小蛇是否超出這個范圍就可以了。網格橫坐標的范圍是0到CEELWIDTH-1,縱坐標的范圍是0到CELLHEIGHT-1。因而如果小蛇頭部的橫坐標為-1(超出窗口左側)或CELLWIDTH(超出窗口右側),或者縱坐標為-1(超出窗口上沿)或CELLHEIGHT(超出窗口下沿),小蛇就超出了窗口的范圍。
這時,我們的代碼會讓游戲結束,第79行的return讓runGame函數停止并返回到第46行該函數被調用的地方。接著,showGameOverScreen函數被調用,游戲界面上出現了“Game Over”的字樣。
第80行到82行對儲存在wormCoords中小蛇身體進行循環。wormCoords的索引從0開始,而0儲存的是小蛇的頭部,小蛇的身體部分從索引1開始,所以我們使用wormCoords[1:]從索引1開始循環。如果小蛇頭部的橫縱坐標x、y和身體的橫縱坐標x、y相等,我們的代碼就將結束游戲并退出runGame函數,返回到第46行函數被調用的地方,顯示游戲結束頁面(和上面相似)。
吃到蘋果啦!
?
84. # 檢測小蛇是否吃到蘋果
85. if wormCoords[HEAD]['x'] == apple['x'] and wormCoords[HEAD]['y'] == apple['y']:
86. # 暫時不要移除小蛇的尾部
87. apple = getRandomLocation() # 在某處放一個新蘋果
88. else:
89. del wormCoords[-1] # 移除小蛇的尾部
這段代碼用于檢測小蛇是否吃到了蘋果,檢測方法和上面一段檢測小蛇是否撞到了自身相似:如果小蛇頭部的橫縱坐標x、y和蘋果的橫縱坐標x、y相同的話,小蛇就吃到了蘋果。如果小蛇吃掉了蘋果,我們就在一個新的位置放一個新蘋果,這個新位置將由getRandomLocation函數隨機產生。
如果小蛇沒有吃到蘋果,我們將小蛇的尾部,即身體的最后一段從wormCoords列表中刪去。注意,負數索引值代表從列表的末尾開始數,-1代表列表的最后一項,-2代表倒數第二項。
為了不斷更新小蛇的位置,我們需要刪除小蛇的尾部并在小蛇移動的方向上畫一個新的頭部,這樣小蛇才能不斷行進并且在沒吃到蘋果的時候保持身體長度不變。代碼的第89行移除了小蛇的尾部。在下面的“移動小蛇”模塊,即代碼的91到100行,我們將會在小蛇移動的方向上添加一段身體作為小蛇移動后的頭部。
責任編輯:
總結
以上是生活随笔為你收集整理的怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 小芋头的功效与作用、禁忌和食用方法
- 下一篇: 桑葚叶的功效与作用、禁忌和食用方法