Python使用海龜繪圖實(shí)現(xiàn)貪吃蛇游戲
在實(shí)現(xiàn)貪吃蛇游戲時(shí),首先需要使用python內(nèi)置的turtle模塊來(lái)實(shí)現(xiàn)創(chuàng)建游戲窗體與鍵盤(pán)按鍵的監(jiān)聽(tīng)工作,然后使用freegames模塊進(jìn)行貪吃蛇的繪制工作。
1、turtle模塊
turtle模塊是python的內(nèi)置模塊,所以在使用前需要使用import導(dǎo)入該模塊。代碼如下:
import turtle
(1) 創(chuàng)建游戲窗體可以使用turtle模塊中的setup()方法來(lái)實(shí)現(xiàn)。語(yǔ)法格式如下:
turtle.setup(width=_CFG["width"],height=_CFG["height"],startx=_CFG["leftright"],starty=_CFG["topbottom"])
參數(shù)說(shuō)明如下:
- width:表示窗體的寬度,如果是整數(shù),大小以像素為單位,如果是浮動(dòng),則為屏幕的一小部分;默認(rèn)值為屏幕的50%。
- height:表示窗體的高度,如果是整數(shù),高度以像素為單位,如果是浮動(dòng),則為屏幕的一小部分;默認(rèn)值為屏幕的75%。
- startx:表示窗體顯示在屏幕的橫向位置,如果為正,則以像素為單位從屏幕左邊緣開(kāi)始,如果為負(fù),則從右邊緣開(kāi)始,如果沒(méi)有,則水平居中窗口。
- starty:表示窗體顯示在屏幕的縱向位置,如果為正,則以像素為單位從屏幕上邊緣開(kāi)始,如果為負(fù),則從下邊緣開(kāi)始,如果沒(méi)有,則垂直居中窗口。
創(chuàng)建游戲窗體的關(guān)鍵代碼如下:
import turtle # 導(dǎo)入繪圖海龜模塊 turtle.setup(420, 420) # 創(chuàng)建窗體大小 turtle.done() # 停止畫(huà)筆繪制,但繪圖窗體不關(guān)閉
(2)通過(guò)turtle模塊中的onkey()方法可以實(shí)現(xiàn)對(duì)應(yīng)鍵盤(pán)中按鍵的監(jiān)聽(tīng)工作。語(yǔ)法格式如下:
turtle.onkey(fun,key)
參數(shù)說(shuō)明如下:
- fun:表示需要執(zhí)行的方法。
- key:該參數(shù)為字符串,表示鍵盤(pán)中對(duì)應(yīng)的按鍵,例如“a”或“space”。
注意:在使用onkey()方法實(shí)現(xiàn)鍵盤(pán)的監(jiān)聽(tīng)時(shí),還需要調(diào)用turtle.listen()方法即可實(shí)現(xiàn)鍵盤(pán)按鍵的監(jiān)聽(tīng)。
實(shí)現(xiàn)鍵盤(pán)中上、下、左、右按鍵監(jiān)聽(tīng)工作的關(guān)鍵代碼如下:
turtle.listen() # 事件監(jiān)聽(tīng)器 turtle.onkey(lambda: change(10, 0), 'Right') # 按鍵盤(pán)右鍵,蛇向右走 turtle.onkey(lambda: change(-10, 0), 'Left') # 按鍵盤(pán)左鍵,蛇向左走 turtle.onkey(lambda: change(0, 10), 'Up') # 按鍵盤(pán)上鍵,蛇向上走 turtle.onkey(lambda: change(0, -10), 'Down') # 按鍵盤(pán)下鍵,蛇向下走
2、freegames模塊
freegames模塊是第三方模塊,所以在使用前需要先通過(guò)以下命令進(jìn)行模塊的安裝:
pip install freegames
模塊安裝完成以后,首先需要導(dǎo)入freegames模塊中的vector與square函數(shù)。代碼如下:
from freegames import vector,square # 導(dǎo)入向量類與繪圖函數(shù)
(1)通過(guò)freegames模塊中的vector()類可以根據(jù)指定的x、y坐標(biāo)創(chuàng)建一個(gè)二維向量對(duì)象。vector()類的語(yǔ)法格式如下:
class freegames.vector(x,y)
參數(shù)說(shuō)明如下:
- x:表示橫向坐標(biāo)。
- y:表示縱向坐標(biāo)。
實(shí)現(xiàn)定義游戲中的食物位置、蛇位置以及蛇移動(dòng)的位置與距離。關(guān)鍵代碼如下:
food = vector(0,0) # 食物 snake = [vector(10, 0)] # 蛇 position = vector(0, -10) # 移動(dòng)位置,一步的距離為10
(2)通過(guò)freegames模塊中square函數(shù)可以實(shí)現(xiàn)在(x,y)處繪制指定邊長(zhǎng)大小的正方形,并填充指定顏色。square()函數(shù)的語(yǔ)法格式如下:
freegames.square(x,y,size,name)
參數(shù)說(shuō)明如下:
- x:表示橫向坐標(biāo)。
- y:表示縱向坐標(biāo)。
- size:表示繪制正方形的邊長(zhǎng)。
- name:表示填充顏色的名稱。
實(shí)現(xiàn)繪制游戲中食物、蛇。關(guān)鍵代碼如下:
square(body.x, body.y, 9, 'black') # 繪制黑色蛇 square(food.x, food.y, 9, 'green') # 繪制綠色食物
實(shí)例
from random import randrange # 導(dǎo)入隨機(jī)函數(shù)
from freegames import vector,square # 導(dǎo)入向量函數(shù)與繪圖函數(shù)
import turtle # 導(dǎo)入繪圖海龜模塊
food = vector(0,0) # 食物
snake = [vector(10, 0)] # 蛇
position = vector(0, -10) # 移動(dòng)位置,一步的距離為10
def change(x, y): # 改變蛇的移動(dòng)方向
position.x = x
position.y = y
def is_inside(head): # 判斷蛇頭是否在窗體內(nèi)
return -200 < head.x < 190 and -200 < head.y < 190
def move(): # 可以讓蛇移動(dòng)的方法
head = snake[-1].copy() # 確定蛇頭的位置
head.move(position) # 移動(dòng)一步
if not is_inside(head) or head in snake: # 如果蛇的頭部位于邊界外或者蛇頭在蛇的身體中
square(head.x, head.y, 9, 'red') # 繪制紅色蛇頭,說(shuō)明游戲結(jié)束
turtle.update() # 更新
return
snake.append(head) # 更新蛇的位置
if head == food: # 如果蛇吃到食物
print('Snake:', len(snake)) # 根據(jù)蛇的長(zhǎng)度進(jìn)行加分
food.x = randrange(-15, 15) * 10 # 隨機(jī)生成食物x坐標(biāo)
food.y = randrange(-15, 15) * 10 # 隨機(jī)生成食物y坐標(biāo)
else:
snake.pop(0) # 移除蛇走過(guò)的坐標(biāo)
turtle.clear() # 清空蛇走過(guò)的位置
for body in snake: # 循環(huán)遍歷蛇的坐標(biāo)
square(body.x, body.y, 9, 'black') # 繪制黑色蛇
square(food.x, food.y, 9, 'green') # 繪制綠色食物
turtle.update()
turtle.ontimer(move, 100) # 定時(shí)執(zhí)行move函數(shù)
if __name__ == '__main__': # 程序入口
turtle.setup(420, 420, 370, 0) # 創(chuàng)建窗體大小
turtle.hideturtle() # 隱藏箭頭顯示
turtle.tracer(False) # 關(guān)閉繪畫(huà)效果
move() # 調(diào)用讓蛇移動(dòng)的方法
turtle.listen() # 事件監(jiān)聽(tīng)器
turtle.onkey(lambda: change(10, 0), 'Right') # 按鍵盤(pán)右鍵,蛇向右走
turtle.onkey(lambda: change(-10, 0), 'Left') # 按鍵盤(pán)左鍵,蛇向左走
turtle.onkey(lambda: change(0, 10), 'Up') # 按鍵盤(pán)上鍵,蛇向上走
turtle.onkey(lambda: change(0, -10), 'Down') # 按鍵盤(pán)下鍵,蛇向下走
turtle.done() # 停止畫(huà)筆繪制,但繪圖窗體不關(guān)閉
更多關(guān)于python游戲的精彩文章請(qǐng)點(diǎn)擊查看以下專題:
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 教你一步步利用python實(shí)現(xiàn)貪吃蛇游戲
- python實(shí)現(xiàn)貪吃蛇游戲源碼
- 200行python代碼實(shí)現(xiàn)貪吃蛇游戲
- python實(shí)戰(zhàn)之利用pygame實(shí)現(xiàn)貪吃蛇游戲(一)
- python實(shí)戰(zhàn)之利用pygame實(shí)現(xiàn)貪吃蛇游戲(二)
- Python turtle實(shí)現(xiàn)貪吃蛇游戲
- Python實(shí)現(xiàn)貪吃蛇小游戲(單人模式)
- Python實(shí)現(xiàn)貪吃蛇小游戲(雙人模式)
- Python利用手勢(shì)識(shí)別實(shí)現(xiàn)貪吃蛇游戲
- python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的貪吃蛇游戲附代碼
相關(guān)文章
詳解python模塊pychartdir安裝及導(dǎo)入問(wèn)題
這篇文章主要介紹了python模塊pychartdir導(dǎo)入問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
淺談Python3.10 和 Python3.9 之間的差異
多年來(lái),Python 進(jìn)行了大量升級(jí),并且在新版本中添加了許多功能。本文就詳細(xì)的介紹 一下Python3.10 和 Python3.9差異,感興趣的朋友可以了解一下2021-09-09
Python 中Django驗(yàn)證碼功能的實(shí)現(xiàn)代碼
驗(yàn)證碼是一種區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序,很多用戶登錄和注冊(cè)系統(tǒng)都提供了圖形驗(yàn)證碼功能。這篇文章主要介紹了Python 中Django驗(yàn)證碼功能的實(shí)現(xiàn)代碼,需要的朋友可以參考下2019-06-06
matplotlib繪制折線圖的基本配置(萬(wàn)能模板案例)
折線圖可以很方便的看出數(shù)據(jù)的對(duì)比,本文主要介紹了matplotlib繪制折線圖的基本配置(萬(wàn)能模板案例),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04
Python實(shí)現(xiàn)partial改變方法默認(rèn)參數(shù)
這篇文章主要介紹了Python實(shí)現(xiàn)partial改變方法默認(rèn)參數(shù),需要的朋友可以參考下2014-08-08
圖文詳解Python中最神秘的一個(gè)魔法函數(shù)
Python進(jìn)階之路我覺(jué)得有兩個(gè)東西一定要了解,一個(gè)是魔法函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中最神秘的一個(gè)魔法函數(shù)的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12
python構(gòu)建自定義回調(diào)函數(shù)詳解
在工作中,回調(diào)函數(shù)使用的場(chǎng)景是非常多的,下面我們就來(lái)通過(guò)例子程序來(lái)詳細(xì)了解利用了Python的屬性機(jī)制構(gòu)建了一個(gè)自定義回調(diào)函數(shù)的使用2017-06-06

