别玩手机了!用 Python 写个贪吃蛇小游戏吧!
大家好呀!今天给大家带来一个经典又有趣的Python小项目——贪吃蛇游戏!这可是小时候必备的街机游戏之一,现在我们用Python完全可以自己做出来!通过键盘控制方向,让小蛇吃到食物变长,看看你能达到什么分数~
运行效果图
游戏规则简述:
- 使用键盘上的 上下左右箭头键 控制蛇的方向。
- 绿色的圆形是食物,蛇吃到食物后会变长,并且得分增加。
- 蓝色的是小蛇的身体,注意不要撞墙或者碰到自己哦!
- 游戏结束时会显示你的总分和最高分!
动手开始吧!
代码实现思路:
- 使用 pygame 库来绘制游戏界面。
- 定义小蛇、食物以及它们的属性。
- 通过事件监听捕捉键盘的输入,改变方向。
- 绘制游戏主循环,实时更新画面。
完整代码:
import pygame
import random
# 初始化pygame
pygame.init()
# 设置窗口大小和标题
window = pygame.display.set_mode((600, 400))
pygame.display.set_caption("贪吃蛇游戏")
# 颜色定义
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
# 游戏参数初始化
snake_block = 10
snake_speed = 15
font = pygame.font.SysFont(None, 30)
def our_snake(snake_block, snake_list):
for x in snake_list:
pygame.draw.rect(window, BLUE, [x[0], x[1], snake_block, snake_block])
def message(msg, color):
mesg = font.render(msg, True, color)
window.blit(mesg, [600/3, 400/3])
# 游戏主循环
def gameLoop():
game_over = False
score = 0
# 记录最高分
high_score_file = "high_score.txt"
try:
with open(high_score_file, "r") as f:
high_score = int(f.read())
except FileNotFoundError:
high_score = 0
x1 = 300
y1 = 200
x1_change = 0
y1_change = 0
snake_List = []
Length_of_snake = 1
foodx = round(random.randrange(0, 600 - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, 400 - snake_block) / 10.0) * 10.0
clock = pygame.time.Clock()
while True:
if game_over:
message("游戏结束!按Q退出,R重新开始", RED)
pygame.display.update()
# 记录最高分
with open(high_score_file, "w") as f:
f.write(str(high_score))
# 等待重新开始或退出
while game_over:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_q:
pygame.quit()
quit()
if event.key == pygame.K_r:
gameLoop()
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
quit()
if event.type == pygame.KEYDOWN:
if (event.key == pygame.K_LEFT) and x1_change != snake_block:
x1_change = -snake_block
y1_change = 0
elif (event.key == pygame.K_RIGHT) and x1_change != -snake_block:
x1_change = snake_block
y1_change = 0
elif (event.key == pygame.K_UP) and y1_change != snake_block:
x1_change = 0
y1_change = -snake_block
elif (event.key == pygame.K_DOWN) and y1_change != -snake_block:
x1_change = 0
y1_change = snake_block
# 更新小蛇的位置
x1 += x1_change
y1 += y1_change
# 判断是否撞墙或碰自己
if (x1 >= 600 or x1 < 0 or y1>= 400 or y1 < 0: game_over='True' for x in snake_list:-1: if x='= [x1,' y1: game_over='True' window.fillblack pygame.draw.rectwindow green foodx foody snake_block snake_block snake_head='[]' snake_head.appendx1 snake_head.appendy1 snake_list.appendsnake_head if lensnake_list> Length_of_snake:
del snake_List[0]
# 判断是否吃了食物
if x1 == foodx and y1 == foody:
foodx = round(random.randrange(0, 600 - snake_block) / 10.0) * 10.0
foody = round(random.randrange(0, 400 - snake_block) / 10.0) * 10.0
Length_of_snake += 1
score += 10
if score > high_score:
high_score = score
# 显示得分和最高分
score_text = font.render(f"得分: {score}", True, WHITE)
window.blit(score_text, (500, 20))
high_score_text = font.render(f"最高分: {high_score}", True, WHITE)
window.blit(high_score_text, (500, 40))
our_snake(snake_block, snake_List)
pygame.display.update()
clock.tick(snake_speed)
# 启动游戏
gameLoop()
pygame.quit()
quit()
游戏特色:
- 界面简洁,操作简单。
- 支持高分记录,保存到 .txt 文件中。
- 小蛇和食物颜色分明。
- 分数实时更新,最高分长期保留。
如何运行代码?
- 如果没有安装 pygame 库,先运行命令:
pip install pygame
- 将以上代码保存为 .py 文件,比如 snake_game.py。
- 在终端中执行:
python snake_game.py
游戏玩法:
- 用键盘上的 方向键 控制小蛇的移动方向。
- 每吃到一个食物,得分 +10 分,同时小蛇变长一格。
- 在游戏结束时会保存最高分,并且可以通过按 R 键重新开始。
小贴士:
- 初学的同学可以先理解主要的逻辑结构。
- 想要修改颜色、大小或者速度的参数,只需要调整代码中的对应值即可!
- 提高游戏难度:可以把 snake_speed 设置得更大,比如 20 或 25。
如果觉得这篇文章对你有帮助,记得点赞和收藏哦!有什么问题也可以在评论区留言,我会尽力解答!