日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

怎么用python编贪吃蛇_少儿编程分享:手把手教你用PYTHON编写贪吃蛇(二)

發布時間:2024/9/19 python 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么用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编写贪吃蛇(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。