柏虎资源网

专注编程学习,Python、Java、C++ 教程、案例及资源

别玩手机了!用 Python 写个贪吃蛇小游戏吧!


大家好呀!今天给大家带来一个经典又有趣的Python小项目——贪吃蛇游戏!这可是小时候必备的街机游戏之一,现在我们用Python完全可以自己做出来!通过键盘控制方向,让小蛇吃到食物变长,看看你能达到什么分数~


游戏规则简述:

  1. 使用键盘上的 上下左右箭头键 控制蛇的方向。
  2. 绿色的圆形是食物,蛇吃到食物后会变长,并且得分增加。
  3. 蓝色的是小蛇的身体,注意不要撞墙或者碰到自己哦!
  4. 游戏结束时会显示你的总分和最高分!

动手开始吧!

代码实现思路:

  • 使用 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.fill(BLACK)
        pygame.draw.rect(window, GREEN, [foodx, foody, snake_block, snake_block])
        
        # 绘制小蛇和头部
        snake_Head = []
        snake_Head.append(x1)
        snake_Head.append(y1)
        snake_List.append(snake_Head)
        
        if len(snake_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()

游戏特色:

  1. 界面简洁,操作简单。
  2. 支持高分记录,保存到 .txt 文件中。
  3. 小蛇和食物颜色分明。
  4. 分数实时更新,最高分长期保留。

如何运行代码?

  1. 如果没有安装 pygame 库,先运行命令:
pip install pygame
  1. 将以上代码保存为 .py 文件,比如 snake_game.py。
  2. 在终端中执行:
python snake_game.py

游戏玩法:

  • 用键盘上的 方向键 控制小蛇的移动方向。
  • 每吃到一个食物,得分 +10 分,同时小蛇变长一格。
  • 在游戏结束时会保存最高分,并且可以通过按 R 键重新开始。

小贴士:

  • 初学的同学可以先理解主要的逻辑结构。
  • 想要修改颜色、大小或者速度的参数,只需要调整代码中的对应值即可!
  • 提高游戏难度:可以把 snake_speed 设置得更大,比如 20 或 25。

如果觉得这篇文章对你有帮助,记得点赞和收藏哦!有什么问题也可以在评论区留言,我会尽力解答!

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言