Python貪吃蛇小游戲?qū)嵗窒?/h1>
更新時間:2021年09月06日 10:55:57 作者:Maggie晨曦
這篇文章主要為大家詳細介紹了Python貪吃蛇小游戲?qū)嵗闹惺纠a介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了Python實現(xiàn)貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下
使用的庫
pygame 、random 、pyautogui
流程簡述
1.設置初始參數(shù)
設置每個網(wǎng)格大小為 20 px ,size可以隨意修改但最好為20的倍數(shù),設置初始方向向右,初始蛇長為 3 。
# 初始化參數(shù)
size = 320
screen = pygame.display.set_mode([size,size],0 , 32)
pygame.display.set_caption("貪吃蛇")
cell_size = 20
cell_num = int(size/20)
x , y = [60,0]
# 初始方向向右
dir_snake = 'R'
body_snake = [[0,0],[20,0],[40,0],[60,0]]
# 初始蛇長為3
len_snake = 3
# 初始食物坐標
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
# 蛇移動速度
clock = pygame.time.Clock()
2.鍵盤控制
鍵盤上下左右控制蛇方向,禁止反向。
3.食物
蛇頭吃到食物后,蛇長加一 ,random 一個隨機坐標,如果坐標再蛇身上則繼續(xù) random。
if [x,y] == food_coor[:2]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
if food_coor[:2] in body_snake[-2:-len_snake -1 :-1]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
len_snake +=1
4. 勝負判斷
蛇頭與蛇身碰撞判輸,彈出游戲結(jié)束窗口,說明最終蛇長為多長。
if body_snake[-1] in body_snake[-2:-len_snake -1 :-1]:
pyautogui.alert(text='游戲結(jié)束,最終蛇長為{}'.format(len_snake))
exit()
代碼及結(jié)果
代碼
import pygame , random ,pyautogui
from pygame.locals import *
# 初始化參數(shù)
size = 500
screen = pygame.display.set_mode([size,size],0 , 32)
pygame.display.set_caption("貪吃蛇")
cell_size = 20
cell_num = int(size/20)
x , y = [60,0]
# 初始方向向右
dir_snake = 'R'
body_snake = [[0,0],[20,0],[40,0],[60,0]]
# 初始蛇長為3
len_snake = 3
# 初始食物坐標
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
# 蛇移動速度
clock = pygame.time.Clock()
# bg
def bg():
for i in range(0, size , int(cell_size)):
pygame.draw.line(screen,[72,72,72],[i,0],[i,size])
for i in range(0, size, int(cell_size)):
pygame.draw.line(screen, [72, 72, 72], [0, i], [size,i])
# 蛇
def snake(K):
for x,y in K[:-len_snake - 1:-1]:
pygame.draw.rect(screen,[255,255,255],[x,y,20,20],0)
# 食物
def food():
pygame.draw.rect(screen,[255,0,0],food_coor,0)
# 主循環(huán)
def running():
global x ,y , dir_snake ,food_coor , len_snake
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
screen.fill((40, 43, 46))
# 方向規(guī)則
if dir_snake == 'U':
y -= 20
elif dir_snake == 'R':
x += 20
elif dir_snake == 'D':
y += 20
elif dir_snake == 'L':
x -= 20
# 鍵盤方向控制
if event.type == KEYDOWN:
if event.key == K_LEFT and dir_snake != 'R':
dir_snake = 'L'
elif event.key == K_DOWN and dir_snake != 'U':
dir_snake = 'D'
elif event.key == K_RIGHT and dir_snake != 'L':
dir_snake = 'R'
elif event.key == K_UP and dir_snake != 'D':
dir_snake = 'U'
# 撞墻之后
if x < 0:
x += size
elif x >= size:
x -= size
elif y < 0:
y += size
elif y >= size:
y -= size
# draw蛇體
body_snake.append([x,y])
snake(body_snake)
food()
# 吃到食物后food換位置
if [x,y] == food_coor[:2]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
if food_coor[:2] in body_snake[-2:-len_snake -1 :-1]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
len_snake +=1
# 游戲結(jié)束
if body_snake[-1] in body_snake[-2:-len_snake -1 :-1]:
pyautogui.alert(text='游戲結(jié)束,最終蛇長為{}'.format(len_snake))
exit()
# 格線
bg()
# 右下角顯示蛇長
font = pygame.font.SysFont("simsunnsimsun", 40)
text_surface = font.render("{}".format(len_snake), True, (255,255, 255))
screen.blit(text_surface , (size-40,size-40))
pygame.display.update()
# 蛇的移動速度隨著蛇的長度而越來越快
clock.tick(len_snake * 2)
if __name__ == '__main__':
pygame.init()
running()
輸出結(jié)果

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
-
Python創(chuàng)建二維數(shù)組實例(關于list的一個小坑)
下面小編就為大家?guī)硪黄狿ython創(chuàng)建二維數(shù)組實例(關于list的一個小坑)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 2017-11-11
-
python 6.7 編寫printTable()函數(shù)表格打印(完整代碼)
這篇文章主要介紹了python 6.7 編寫一個名為printTable()的函數(shù) 表格打印,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下 2020-03-03
-
跟老齊學Python之使用Python查詢更新數(shù)據(jù)庫
前面我們講述了使用python操作數(shù)據(jù)庫,今天我們來更進一步,介紹下python查詢、更新數(shù)據(jù)庫的相關操作。有需要的小伙伴自己參考下吧。 2014-11-11
-
python實現(xiàn)的DES加密算法和3DES加密算法實例
這篇文章主要介紹了python實現(xiàn)的DES加密算法和3DES加密算法,以實例形式較為詳細的分析了DES加密算法和3DES加密算法的原理與實現(xiàn)技巧,需要的朋友可以參考下 2015-06-06
最新評論
本文實例為大家分享了Python實現(xiàn)貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下
使用的庫
pygame 、random 、pyautogui
流程簡述
1.設置初始參數(shù)
設置每個網(wǎng)格大小為 20 px ,size可以隨意修改但最好為20的倍數(shù),設置初始方向向右,初始蛇長為 3 。
# 初始化參數(shù)
size = 320
screen = pygame.display.set_mode([size,size],0 , 32)
pygame.display.set_caption("貪吃蛇")
cell_size = 20
cell_num = int(size/20)
x , y = [60,0]
# 初始方向向右
dir_snake = 'R'
body_snake = [[0,0],[20,0],[40,0],[60,0]]
# 初始蛇長為3
len_snake = 3
# 初始食物坐標
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
# 蛇移動速度
clock = pygame.time.Clock()
2.鍵盤控制
鍵盤上下左右控制蛇方向,禁止反向。
3.食物
蛇頭吃到食物后,蛇長加一 ,random 一個隨機坐標,如果坐標再蛇身上則繼續(xù) random。
if [x,y] == food_coor[:2]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
if food_coor[:2] in body_snake[-2:-len_snake -1 :-1]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
len_snake +=1
4. 勝負判斷
蛇頭與蛇身碰撞判輸,彈出游戲結(jié)束窗口,說明最終蛇長為多長。
if body_snake[-1] in body_snake[-2:-len_snake -1 :-1]:
pyautogui.alert(text='游戲結(jié)束,最終蛇長為{}'.format(len_snake))
exit()
代碼及結(jié)果
代碼
import pygame , random ,pyautogui
from pygame.locals import *
# 初始化參數(shù)
size = 500
screen = pygame.display.set_mode([size,size],0 , 32)
pygame.display.set_caption("貪吃蛇")
cell_size = 20
cell_num = int(size/20)
x , y = [60,0]
# 初始方向向右
dir_snake = 'R'
body_snake = [[0,0],[20,0],[40,0],[60,0]]
# 初始蛇長為3
len_snake = 3
# 初始食物坐標
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
# 蛇移動速度
clock = pygame.time.Clock()
# bg
def bg():
for i in range(0, size , int(cell_size)):
pygame.draw.line(screen,[72,72,72],[i,0],[i,size])
for i in range(0, size, int(cell_size)):
pygame.draw.line(screen, [72, 72, 72], [0, i], [size,i])
# 蛇
def snake(K):
for x,y in K[:-len_snake - 1:-1]:
pygame.draw.rect(screen,[255,255,255],[x,y,20,20],0)
# 食物
def food():
pygame.draw.rect(screen,[255,0,0],food_coor,0)
# 主循環(huán)
def running():
global x ,y , dir_snake ,food_coor , len_snake
while True:
for event in pygame.event.get():
if event.type == QUIT:
exit()
screen.fill((40, 43, 46))
# 方向規(guī)則
if dir_snake == 'U':
y -= 20
elif dir_snake == 'R':
x += 20
elif dir_snake == 'D':
y += 20
elif dir_snake == 'L':
x -= 20
# 鍵盤方向控制
if event.type == KEYDOWN:
if event.key == K_LEFT and dir_snake != 'R':
dir_snake = 'L'
elif event.key == K_DOWN and dir_snake != 'U':
dir_snake = 'D'
elif event.key == K_RIGHT and dir_snake != 'L':
dir_snake = 'R'
elif event.key == K_UP and dir_snake != 'D':
dir_snake = 'U'
# 撞墻之后
if x < 0:
x += size
elif x >= size:
x -= size
elif y < 0:
y += size
elif y >= size:
y -= size
# draw蛇體
body_snake.append([x,y])
snake(body_snake)
food()
# 吃到食物后food換位置
if [x,y] == food_coor[:2]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
if food_coor[:2] in body_snake[-2:-len_snake -1 :-1]:
food_coor = [random.randint(0, cell_num - 1) * 20, random.randint(0, cell_num - 1) * 20, 20, 20]
len_snake +=1
# 游戲結(jié)束
if body_snake[-1] in body_snake[-2:-len_snake -1 :-1]:
pyautogui.alert(text='游戲結(jié)束,最終蛇長為{}'.format(len_snake))
exit()
# 格線
bg()
# 右下角顯示蛇長
font = pygame.font.SysFont("simsunnsimsun", 40)
text_surface = font.render("{}".format(len_snake), True, (255,255, 255))
screen.blit(text_surface , (size-40,size-40))
pygame.display.update()
# 蛇的移動速度隨著蛇的長度而越來越快
clock.tick(len_snake * 2)
if __name__ == '__main__':
pygame.init()
running()
輸出結(jié)果

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
Python創(chuàng)建二維數(shù)組實例(關于list的一個小坑)
下面小編就為大家?guī)硪黄狿ython創(chuàng)建二維數(shù)組實例(關于list的一個小坑)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
python 6.7 編寫printTable()函數(shù)表格打印(完整代碼)
這篇文章主要介紹了python 6.7 編寫一個名為printTable()的函數(shù) 表格打印,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03
跟老齊學Python之使用Python查詢更新數(shù)據(jù)庫
前面我們講述了使用python操作數(shù)據(jù)庫,今天我們來更進一步,介紹下python查詢、更新數(shù)據(jù)庫的相關操作。有需要的小伙伴自己參考下吧。2014-11-11
python實現(xiàn)的DES加密算法和3DES加密算法實例
這篇文章主要介紹了python實現(xiàn)的DES加密算法和3DES加密算法,以實例形式較為詳細的分析了DES加密算法和3DES加密算法的原理與實現(xiàn)技巧,需要的朋友可以參考下2015-06-06

