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

liftword2个月前 (04-10)技术文章19


大家好呀!今天给大家带来一个经典又有趣的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.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()

游戏特色:

  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。

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

相关文章

用Python做一个贪吃蛇小游戏:零基础保姆级教程(附完整代码)

导语:只要你会用电脑打字,就能跟着这篇教程做出经典贪吃蛇游戏!从安装软件到代码调试,每个步骤都有详细截图和解释,遇到问题看文末解决方案,现在就开始你的第一个游戏开发吧!一、准备开发环境(10分钟)1....

使用字节跳动的TRAE编写贪吃蛇音乐版简直太轻松了

字节跳动的国内版发行不久就开始下载来试试,还是老本行,先试试贪吃蛇游戏,当然这次改用python编写,我没编过python程序,可以说是小白,不过介于python程序功能强大,编写难度不大,因此决定...

零基础学习编程:用Python和Pygame实现贪吃蛇游戏

预计阅读时间:15分钟介绍编程是一门有趣且有用的技能,它可以帮助我们解决问题、创造新的东西,并提升我们的逻辑思维能力。本教程将带你从零开始学习编程,使用Python语言和Pygame库来实现经典的贪吃...

教你用 python 写一个小游戏

今天玩点别的吧都说 Python 除了生孩子什么都能干咱们今天就用 Python 写个小游戏贪吃蛇想必大家都玩过这玩意有没有想过你自己来实现一个这样的游戏呢那么接下来就是学习 python 的正确姿势...

一行代码可以做什么?Python给你答案

下面分享几个神奇的小游戏和一些实用的Python一行代码程序。一些小游戏贪吃蛇使用一行代码启动相关游戏,比如贪吃蛇snakepython -m freegames.snake贪吃蛇的玩法想必不用过多解...