python實(shí)現(xiàn)簡(jiǎn)單貪吃蛇小游戲
本文實(shí)例為大家分享了python實(shí)現(xiàn)簡(jiǎn)單貪吃蛇的具體代碼,供大家參考,具體內(nèi)容如下
1. 導(dǎo)入游戲庫(kù)
import pgzrun import random
2.游戲初始化
# 窗口大小 WIDTH = 600 HEIGHT = 480 # 貪吃蛇 bodys = [ [100,100],[80,100], [60,100], [40,100], [20,100]] head = [100,100] d = 'right' # 食物 food = [290,290] # 得分 score=0
3.游戲窗口繪制
def draw(): #清空屏幕 screen.clear() # 繪制網(wǎng)格 for i in range(1,24): screen.draw.line((0,i*20),(600,i*20),'gray') for i in range(1,30): screen.draw.line((i*20,0),(i*20,480),'gray') #繪制蛇 for body in bodys: rect = Rect(body,(20,20)) screen.draw.filled_rect(rect,(0,0,255)) inner = [body[0]+2,body[1]+2] rect = Rect(inner, (15, 15),center='center') screen.draw.filled_rect(rect, (0, 0, 180)) # 繪制頭 rect = Rect(head, (20, 20)) screen.draw.filled_rect(rect, (0, 200,0)) inner = [head[0] + 2, head[1] + 2] rect = Rect(inner, (15, 15)) screen.draw.filled_rect(rect, (0, 255, 12)) # 繪制食物 screen.draw.filled_circle(food,10, '#ffddee') # 繪制得分 screen.draw.text('score:'+str(score),(20, 20), color="orange",fontsize=30)
4.蛇的移動(dòng)功能
def run(): global food,d,head,bodys,score # 新增一個(gè)格子的身體 if d=='right': head[0] += 20 elif d=='left': head[0] -= 20 elif d=='up': head[1] -= 20 else: head[1] += 20 bodys.insert(0,list(head)) if head[0] == food[0]-10 and head[1] == food[1] - 10: food = [random.randint(1,30)*20-10,random.randint(1,20)*20-10] score+=1 if score>3: clock.unschedule(run) clock.schedule_interval(run, 0.1) else: bodys.pop() # 撞墻后重新開(kāi)始 if head[0]<0 or head[0]>580 or head[1]<0 or head[1]>480 or head in bodys[1:]: # 蛇回到初始位置 bodys = [[100, 100], [80, 100], [60, 100], [40, 100], [20, 100]] head = [100, 100] # 方向向右 d = 'right' # 得分清零 score=0 clock.unschedule(run) clock.schedule_interval(run, 0.3)
5.按鍵控制蛇的行走方向
# 按鍵控制蛇的行走方向 def on_key_down(key): global d # 改變方向 if key == keys.DOWN and d != 'up': d = 'down' if key == keys.UP and d != 'down': d = 'up' if key == keys.LEFT and d != 'right': d = 'left' if key == keys.RIGHT and d != 'left': d = 'right'
6.啟動(dòng)游戲
# 定時(shí)設(shè)置 clock.schedule_interval(run, 0.3) # 播放音樂(lè) music.play('music.mp3') # 啟動(dòng)游戲 pgzrun.go()
完整代碼
# 1.導(dǎo)入庫(kù) import pgzrun import random # 2.初始化 # 窗口大小 WIDTH = 600 HEIGHT = 480 # 貪吃蛇 bodys = [[100, 100], [80, 100], [60, 100], [40, 100], [20, 100]] head = [100, 100] d = 'right' # 食物 food = [290, 290] # 得分 score = 0 # 3.游戲窗口繪制 def draw(): ? ? # 清空屏幕 ? ? screen.clear() ? ? # 繪制網(wǎng)格 ? ? for i in range(1, 24): ? ? ? ? screen.draw.line((0, i * 20), (600, i * 20), 'gray') ? ? for i in range(1, 30): ? ? ? ? screen.draw.line((i * 20, 0), (i * 20, 480), 'gray') ? ? # 繪制蛇 ? ? for body in bodys: ? ? ? ? rect = Rect(body, (20, 20)) ? ? ? ? screen.draw.filled_rect(rect, (0, 0, 255)) ? ? ? ? inner = [body[0] + 2, body[1] + 2] ? ? ? ? rect = Rect(inner, (15, 15), center='center') ? ? ? ? screen.draw.filled_rect(rect, (128, 0, 128)) # 紫色 ? ? # 繪制頭 ? ? rect = Rect(head, (20, 20)) ? ? screen.draw.filled_rect(rect, (0, 200, 0)) ? ? inner = [head[0] + 2, head[1] + 2] ? ? rect = Rect(inner, (15, 15)) ? ? screen.draw.filled_rect(rect, (0, 255, 12)) ? ? # 繪制食物 顏色為紅色 ? ? screen.draw.filled_circle(food, 10, '#ff0000') ? ? # 繪制得分 ? ? screen.draw.text('score:' + str(score), (20, 20), color="red", fontsize=30) # 4.蛇的移動(dòng)功能 def run(): ? ? global food, d, head, bodys, score ? ? # 新增一個(gè)格子的身體 ? ? if d == 'right': ? ? ? ? head[0] += 20 ? ? elif d == 'left': ? ? ? ? head[0] -= 20 ? ? elif d == 'up': ? ? ? ? head[1] -= 20 ? ? else: ? ? ? ? head[1] += 20 ? ? bodys.insert(0, list(head)) ? ? if head[0] == food[0] - 10 and head[1] == food[1] - 10: ? ? ? ? food = [random.randint(1, 30) * 20 - 10, random.randint(1, 20) * 20 - 10] ? ? ? ? score += 1 ? ? ? ? if score > 10: ? ? ? ? ? ? clock.unschedule(run) ? ? ? ? ? ? clock.schedule_interval(run, 0.1) ? ? else: ? ? ? ? bodys.pop() ? ? # 撞墻后重新開(kāi)始 ? ? if head[0] < 0 or head[0] > 580 or head[1] < 0 or head[1] > 480 or head in bodys[1:]: ? ? ? ? # 蛇回到初始位置 ? ? ? ? bodys = [[100, 100], [80, 100], [60, 100], [40, 100], [20, 100]] ? ? ? ? head = [100, 100] ? ? ? ? # 方向向右 ? ? ? ? d = 'right' ? ? ? ? # 得分清零 ? ? ? ? score = 0 ? ? ? ? clock.unschedule(run) ? ? ? ? clock.schedule_interval(run, 0.3) # 按鍵控制蛇的行走方向 def on_key_down(key): ? ? global d ? ? # 改變方向 ? ? if key == keys.DOWN and d != 'up': ? ? ? ? d = 'down' ? ? if key == keys.UP and d != 'down': ? ? ? ? d = 'up' ? ? if key == keys.LEFT and d != 'right': ? ? ? ? d = 'left' ? ? if key == keys.RIGHT and d != 'left': ? ? ? ? d = 'right' # 6.啟動(dòng)游戲 # 定時(shí)設(shè)置 clock.schedule_interval(run, 0.3) # 播放音樂(lè) music.play('music.mp3') # 啟動(dòng)游戲 pgzrun.go()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python保留小數(shù)位的三種實(shí)現(xiàn)方法
本文給大家分享python保留小數(shù)位的三種方法,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01Python中類(lèi)似于jquery的pyquery庫(kù)用法分析
這篇文章主要介紹了Python中類(lèi)似于jquery的pyquery庫(kù)用法,結(jié)合實(shí)例形式分析了pyquery庫(kù)的概念、原理、使用方法及操作技巧,需要的朋友可以參考下2019-12-12基于Python實(shí)現(xiàn)牛牛套圈小游戲的示例代碼
“幸運(yùn)牛牛套圈圈”套住歡樂(lè),圈住幸福,等你來(lái)挑戰(zhàn)!這篇文章小編主要為大家介紹一款基于Python實(shí)現(xiàn)牛牛套圈小游戲,感興趣的小伙伴可以了解一下2023-02-02520使用Python實(shí)現(xiàn)“我愛(ài)你”表白
這篇文章主要介紹了520使用Python實(shí)現(xiàn)“我愛(ài)你”表白,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05Python類(lèi)方法__init__和__del__構(gòu)造、析構(gòu)過(guò)程分析
這篇文章主要介紹了Python類(lèi)方法__init__和__del__構(gòu)造、析構(gòu)過(guò)程分析,本文分析了什么時(shí)候構(gòu)造、什么時(shí)候析構(gòu)、成員變量如何處理、Python中的共享成員函數(shù)如何訪問(wèn)等問(wèn)題,需要的朋友可以參考下2015-03-03Django1.11配合uni-app發(fā)起微信支付的實(shí)現(xiàn)
這篇文章主要介紹了Django1.11配合uni-app發(fā)起微信支付的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10Python Flask利用SocketIO庫(kù)實(shí)現(xiàn)圖表的繪制
這篇文章主要為大家詳細(xì)介紹了Python Flask框架如何利用SocketIO庫(kù)實(shí)現(xiàn)圖表的繪制,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-12-12Python+matplotlib+numpy繪制精美的條形統(tǒng)計(jì)圖
這篇文章主要介紹了Python+matplotlib+numpy繪制精美的條形統(tǒng)計(jì)圖,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01Python關(guān)于時(shí)間序列calendar模塊的深入講解
calendar,是與日歷相關(guān)的模塊。calendar模塊文件里定義了很多類(lèi)型,主要有Calendar,TextCalendar以及HTMLCalendar類(lèi)型。其中,Calendar是TextCalendar與HTMLCalendar的基類(lèi)2021-11-11