基于pygame實(shí)現(xiàn)貪吃蛇小游戲示例
游戲截圖


引入庫(kù)
import copy import random import sys import pygame
初始化模型
# 蛇模型
snake_list = [[10, 10]]
# 食物的模型
x = random.randint(10, 490)
y = random.randint(10, 490)
food_point = [x, y]
food_r, food_g, food_b = random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
food_color = pygame.Color(food_r, food_g, food_b)
# 初始方向
move_up = False
move_down = False
move_left = False
move_right = True
# 初始分?jǐn)?shù)
score=0
pygame.init()
screen = pygame.display.set_mode((500, 500)) # 畫(huà)布大小
title = pygame.display.set_caption('貪吃蛇') # 名字
clock = pygame.time.Clock() # 游戲時(shí)鐘
獲取鍵盤(pán)事件
for event in pygame.event.get(): # 獲取鍵盤(pán)事件
if event.type == pygame.QUIT:
running=False
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN or event.key == pygame.K_s:
move_up = False
move_down = True
move_left = False
move_right = False
if event.key == pygame.K_UP or event.key == pygame.K_w:
move_up = True
move_down = False
move_left = False
move_right = False
if event.key == pygame.K_LEFT or event.key == pygame.K_a:
move_up = False
move_down = False
move_left = True
move_right = False
if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
move_up = False
move_down = False
move_left = False
move_right = True
if event.key == pygame.K_ESCAPE: # esc關(guān)閉
running=False
sys.exit()
if event.key ==pygame.K_SPACE and not running:
running=True
snake_list = [[10, 10]]
score=0
移動(dòng)貪吃蛇
# 身子移動(dòng)
snake_len = len(snake_list) - 1
while snake_len > 0:
snake_list[snake_len] = copy.deepcopy(snake_list[snake_len - 1])
snake_len -= 1
# 蛇頭移動(dòng)
if move_up:
snake_list[snake_len][1] -= 10
if snake_list[snake_len][1] < 0:
snake_list[snake_len][1] = 500
if move_down:
snake_list[snake_len][1] += 10
if snake_list[snake_len][1] > 500:
snake_list[snake_len][1] = 0
if move_left:
snake_list[snake_len][0] -= 10
if snake_list[snake_len][0] < 0:
snake_list[snake_len][0] = 500
if move_right:
snake_list[snake_len][0] += 10
if snake_list[snake_len][0] > 500:
snake_list[snake_len][0] = 0
吃食物邏輯
# 蛇與食物碰撞檢測(cè)
if food_rect.collidepoint(snake_pos):
snake_list.append(food_point)
food_point = [random.randint(10, 490), random.randint(10, 490)] # 重新生成食物
food_r, food_g, food_b = random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
food_color = pygame.Color(food_r, food_g, food_b)
score+=1
break
碰撞到自身邏輯
# 吃到自己 結(jié)束游戲 snake_head_rect = snake_rect[0] # 蛇頭 count = len(snake_rect) while count > 1: if snake_head_rect.colliderect(snake_rect[count - 1]): # 檢測(cè)蛇頭與身子的所有點(diǎn) running=False count -= 1
結(jié)束游戲
if not running:
show_text(screen, (20,200), 'GAME OVER!', (227, 29, 18), False, 100)
show_text(screen, (120,300), 'press space to try again', (223, 223, 223), False, 30)
顯示文字函數(shù)
def show_text(screen, pos, text, color, font_bold=False, font_size=60, font_italic=False):
cur_font = pygame.font.SysFont('宋體', font_size)
cur_font.set_bold(font_bold)
cur_font.set_italic(font_italic)
text_fmt = cur_font.render(text, 1, color)
screen.blit(text_fmt, pos)
完整代碼
import copy
import random
import sys
import pygame
def show_text(screen, pos, text, color, font_bold=False, font_size=60, font_italic=False):
cur_font = pygame.font.SysFont('宋體', font_size)
cur_font.set_bold(font_bold)
cur_font.set_italic(font_italic)
text_fmt = cur_font.render(text, 1, color)
screen.blit(text_fmt, pos)
# 蛇模型
snake_list = [[10, 10]]
# 食物的模型
x = random.randint(10, 490)
y = random.randint(10, 490)
food_point = [x, y]
food_r, food_g, food_b = random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
food_color = pygame.Color(food_r, food_g, food_b)
# 初始方向
move_up = False
move_down = False
move_left = False
move_right = True
pygame.init()
screen = pygame.display.set_mode((500, 500)) # 畫(huà)布大小
title = pygame.display.set_caption('貪吃蛇') # 名字
clock = pygame.time.Clock() # 游戲時(shí)鐘
running=True # 游戲運(yùn)行標(biāo)志
score=0
while True:
clock.tick(20) # 20fps
screen.fill([255, 255, 255]) # 背景填充
for event in pygame.event.get(): # 獲取鍵盤(pán)事件
if event.type == pygame.QUIT:
running=False
sys.exit()
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN or event.key == pygame.K_s:
move_up = False
move_down = True
move_left = False
move_right = False
if event.key == pygame.K_UP or event.key == pygame.K_w:
move_up = True
move_down = False
move_left = False
move_right = False
if event.key == pygame.K_LEFT or event.key == pygame.K_a:
move_up = False
move_down = False
move_left = True
move_right = False
if event.key == pygame.K_RIGHT or event.key == pygame.K_d:
move_up = False
move_down = False
move_left = False
move_right = True
if event.key == pygame.K_ESCAPE: # esc關(guān)閉
running=False
sys.exit()
if event.key ==pygame.K_SPACE and not running:
running=True
snake_list = [[10, 10]]
score=0
# 身子移動(dòng)
snake_len = len(snake_list) - 1
while snake_len > 0:
snake_list[snake_len] = copy.deepcopy(snake_list[snake_len - 1])
snake_len -= 1
# 蛇頭移動(dòng)
if move_up:
snake_list[snake_len][1] -= 10
if snake_list[snake_len][1] < 0:
snake_list[snake_len][1] = 500
if move_down:
snake_list[snake_len][1] += 10
if snake_list[snake_len][1] > 500:
snake_list[snake_len][1] = 0
if move_left:
snake_list[snake_len][0] -= 10
if snake_list[snake_len][0] < 0:
snake_list[snake_len][0] = 500
if move_right:
snake_list[snake_len][0] += 10
if snake_list[snake_len][0] > 500:
snake_list[snake_len][0] = 0
if running:
# 繪制得分
show_text(screen, (200,20), f'score: {score}', (0, 0, 0), False, 30)
# 繪制食物
food_rect = pygame.draw.circle(screen, food_color, food_point, 15)
# 繪制蛇
snake_rect = []
for snake_pos in snake_list:
snake_rect.append(pygame.draw.circle(screen, food_color, snake_pos, 5))
# 蛇與食物碰撞檢測(cè)
if food_rect.collidepoint(snake_pos):
snake_list.append(food_point)
food_point = [random.randint(10, 490), random.randint(10, 490)] # 重新生成食物
food_r, food_g, food_b = random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)
food_color = pygame.Color(food_r, food_g, food_b)
score+=1
break
# 吃到自己 結(jié)束游戲
snake_head_rect = snake_rect[0] # 蛇頭
count = len(snake_rect)
while count > 1:
if snake_head_rect.colliderect(snake_rect[count - 1]): # 檢測(cè)蛇頭與身子的所有點(diǎn)
running=False
count -= 1
if not running:
show_text(screen, (20,200), 'GAME OVER!', (227, 29, 18), False, 100)
show_text(screen, (120,300), 'press space to try again', (223, 223, 223), False, 30)
pygame.display.update() # 繪制
到此這篇關(guān)于基于pygame實(shí)現(xiàn)貪吃蛇小游戲示例的文章就介紹到這了,更多相關(guān)pygame貪吃蛇小游戲內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用Python第三方庫(kù)pygame寫(xiě)個(gè)貪吃蛇小游戲
- python 使用pygame工具包實(shí)現(xiàn)貪吃蛇游戲(多彩版)
- pygame實(shí)現(xiàn)貪吃蛇游戲(上)
- pygame實(shí)現(xiàn)貪吃蛇游戲(下)
- python實(shí)戰(zhàn)之利用pygame實(shí)現(xiàn)貪吃蛇游戲(一)
- python實(shí)戰(zhàn)之利用pygame實(shí)現(xiàn)貪吃蛇游戲(二)
- Pygame代碼?制作一個(gè)貪吃蛇小游戲
- pygame實(shí)現(xiàn)貪吃蛇游戲
- pygame實(shí)現(xiàn)貪吃蛇小游戲
- 教你用Pygame制作簡(jiǎn)單的貪吃蛇游戲
相關(guān)文章
代碼詳解django中數(shù)據(jù)庫(kù)設(shè)置
在本篇文章里小編給大家分享了關(guān)于django中數(shù)據(jù)庫(kù)設(shè)置的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。2019-01-01
Python try except異常捕獲機(jī)制原理解析
這篇文章主要介紹了Python try except異常捕獲機(jī)制原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
淺談python數(shù)據(jù)類(lèi)型及類(lèi)型轉(zhuǎn)換
這篇文章主要介紹了淺談python數(shù)據(jù)類(lèi)型及類(lèi)型轉(zhuǎn)換,介紹了python中的數(shù)據(jù)類(lèi)型,以及數(shù)據(jù)的不可變性,還有字符串,列表等相關(guān)內(nèi)容,具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
Python光學(xué)仿真學(xué)習(xí)處理高斯光束分布圖像
這篇文章主要為大家介紹了Python光學(xué)仿真學(xué)習(xí)之如何處理高斯光束的分布圖像,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步2021-10-10
python 運(yùn)用Django 開(kāi)發(fā)后臺(tái)接口的實(shí)例
今天小編就為大家分享一篇python 運(yùn)用Django 開(kāi)發(fā)后臺(tái)接口的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
tensorflow 1.X遷移至tensorflow2 的代碼寫(xiě)法
本文主要介紹了tensorflow 1.X遷移至tensorflow2 的代碼寫(xiě)法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12

