在實現(xiàn)貪吃蛇游戲時,首先需要使用python內置的turtle模塊來實現(xiàn)創(chuàng)建游戲窗體與鍵盤按鍵的監(jiān)聽工作,然后使用freegames模塊進行貪吃蛇的繪制工作。
1、turtle模塊
turtle模塊是python的內置模塊,所以在使用前需要使用import導入該模塊。代碼如下:
(1) 創(chuàng)建游戲窗體可以使用turtle模塊中的setup()方法來實現(xiàn)。語法格式如下:
turtle.setup(width=_CFG["width"],height=_CFG["height"],startx=_CFG["leftright"],starty=_CFG["topbottom"])
參數說明如下:
- width:表示窗體的寬度,如果是整數,大小以像素為單位,如果是浮動,則為屏幕的一小部分;默認值為屏幕的50%。
- height:表示窗體的高度,如果是整數,高度以像素為單位,如果是浮動,則為屏幕的一小部分;默認值為屏幕的75%。
- startx:表示窗體顯示在屏幕的橫向位置,如果為正,則以像素為單位從屏幕左邊緣開始,如果為負,則從右邊緣開始,如果沒有,則水平居中窗口。
- starty:表示窗體顯示在屏幕的縱向位置,如果為正,則以像素為單位從屏幕上邊緣開始,如果為負,則從下邊緣開始,如果沒有,則垂直居中窗口。
創(chuàng)建游戲窗體的關鍵代碼如下:
import turtle # 導入繪圖海龜模塊
turtle.setup(420, 420) # 創(chuàng)建窗體大小
turtle.done() # 停止畫筆繪制,但繪圖窗體不關閉
(2)通過turtle模塊中的onkey()方法可以實現(xiàn)對應鍵盤中按鍵的監(jiān)聽工作。語法格式如下:
參數說明如下:
- fun:表示需要執(zhí)行的方法。
- key:該參數為字符串,表示鍵盤中對應的按鍵,例如“a”或“space”。
注意:在使用onkey()方法實現(xiàn)鍵盤的監(jiān)聽時,還需要調用turtle.listen()方法即可實現(xiàn)鍵盤按鍵的監(jiān)聽。
實現(xiàn)鍵盤中上、下、左、右按鍵監(jiān)聽工作的關鍵代碼如下:
turtle.listen() # 事件監(jiān)聽器
turtle.onkey(lambda: change(10, 0), 'Right') # 按鍵盤右鍵,蛇向右走
turtle.onkey(lambda: change(-10, 0), 'Left') # 按鍵盤左鍵,蛇向左走
turtle.onkey(lambda: change(0, 10), 'Up') # 按鍵盤上鍵,蛇向上走
turtle.onkey(lambda: change(0, -10), 'Down') # 按鍵盤下鍵,蛇向下走
2、freegames模塊
freegames模塊是第三方模塊,所以在使用前需要先通過以下命令進行模塊的安裝:
模塊安裝完成以后,首先需要導入freegames模塊中的vector與square函數。代碼如下:
from freegames import vector,square # 導入向量類與繪圖函數
(1)通過freegames模塊中的vector()類可以根據指定的x、y坐標創(chuàng)建一個二維向量對象。vector()類的語法格式如下:
class freegames.vector(x,y)
參數說明如下:
實現(xiàn)定義游戲中的食物位置、蛇位置以及蛇移動的位置與距離。關鍵代碼如下:
food = vector(0,0) # 食物
snake = [vector(10, 0)] # 蛇
position = vector(0, -10) # 移動位置,一步的距離為10
(2)通過freegames模塊中square函數可以實現(xiàn)在(x,y)處繪制指定邊長大小的正方形,并填充指定顏色。square()函數的語法格式如下:
freegames.square(x,y,size,name)
參數說明如下:
- x:表示橫向坐標。
- y:表示縱向坐標。
- size:表示繪制正方形的邊長。
- name:表示填充顏色的名稱。
實現(xiàn)繪制游戲中食物、蛇。關鍵代碼如下:
square(body.x, body.y, 9, 'black') # 繪制黑色蛇
square(food.x, food.y, 9, 'green') # 繪制綠色食物
實例
from random import randrange # 導入隨機函數
from freegames import vector,square # 導入向量函數與繪圖函數
import turtle # 導入繪圖海龜模塊
food = vector(0,0) # 食物
snake = [vector(10, 0)] # 蛇
position = vector(0, -10) # 移動位置,一步的距離為10
def change(x, y): # 改變蛇的移動方向
position.x = x
position.y = y
def is_inside(head): # 判斷蛇頭是否在窗體內
return -200 head.x 190 and -200 head.y 190
def move(): # 可以讓蛇移動的方法
head = snake[-1].copy() # 確定蛇頭的位置
head.move(position) # 移動一步
if not is_inside(head) or head in snake: # 如果蛇的頭部位于邊界外或者蛇頭在蛇的身體中
square(head.x, head.y, 9, 'red') # 繪制紅色蛇頭,說明游戲結束
turtle.update() # 更新
return
snake.append(head) # 更新蛇的位置
if head == food: # 如果蛇吃到食物
print('Snake:', len(snake)) # 根據蛇的長度進行加分
food.x = randrange(-15, 15) * 10 # 隨機生成食物x坐標
food.y = randrange(-15, 15) * 10 # 隨機生成食物y坐標
else:
snake.pop(0) # 移除蛇走過的坐標
turtle.clear() # 清空蛇走過的位置
for body in snake: # 循環(huán)遍歷蛇的坐標
square(body.x, body.y, 9, 'black') # 繪制黑色蛇
square(food.x, food.y, 9, 'green') # 繪制綠色食物
turtle.update()
turtle.ontimer(move, 100) # 定時執(zhí)行move函數
if __name__ == '__main__': # 程序入口
turtle.setup(420, 420, 370, 0) # 創(chuàng)建窗體大小
turtle.hideturtle() # 隱藏箭頭顯示
turtle.tracer(False) # 關閉繪畫效果
move() # 調用讓蛇移動的方法
turtle.listen() # 事件監(jiān)聽器
turtle.onkey(lambda: change(10, 0), 'Right') # 按鍵盤右鍵,蛇向右走
turtle.onkey(lambda: change(-10, 0), 'Left') # 按鍵盤左鍵,蛇向左走
turtle.onkey(lambda: change(0, 10), 'Up') # 按鍵盤上鍵,蛇向上走
turtle.onkey(lambda: change(0, -10), 'Down') # 按鍵盤下鍵,蛇向下走
turtle.done() # 停止畫筆繪制,但繪圖窗體不關閉
更多關于python游戲的精彩文章請點擊查看以下專題:
python俄羅斯方塊游戲集合
python經典小游戲匯總
python微信跳一跳游戲集合
更多有趣的經典小游戲實現(xiàn)專題,分享給大家:
C++經典小游戲匯總
JavaScript經典游戲 玩不停
java經典小游戲匯總
javascript經典小游戲匯總
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:- 中秋快到了利用python畫個月亮和月餅
- 使用Python為中秋節(jié)繪制一塊美味的月餅
- python用海龜繪圖寫貪吃蛇游戲
- 中秋快到了利用 python 繪制中秋禮物