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

liftword3周前 (04-10)技术文章9


大家好呀!今天给大家带来一个经典又有趣的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 代码打造经典贪吃蛇游戏,带你回味童年的快乐记忆

贪吃蛇是一款经典的小游戏。初始是像素版本,后来又衍生出3D版本、多人对战版本等。玩家使用方向键操控一条长长的蛇不断吞下豆子,同时蛇身随着吞下的豆子不断变长,当蛇头撞到蛇身或障壁时游戏结束。本文分享在...

使用Python+OpenCV代码制作贪吃蛇小游戏,你也可以打造自己的AI

前言今天和大家分享一下如何使用 mediapipe+opencv 自制贪吃蛇小游戏。先放张图看效果。规则:食指指尖控制蛇头,指尖每接触到黄色方块,计数加一,蛇身变长,方块随机切换位置。如果指尖停止移动...

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

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

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

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

如何用Python制作贪吃蛇游戏窗口

今天搞定,手把手教你制作贪吃啥游戏,让游戏设计不再神秘。今天搞了一个游戏玩玩,不能只是玩代码经常感觉太鼓噪了,为了让我们的学习、生活增加一点乐趣,今天搞搞游戏。记得以前有那种游戏机,很小的时候,经常...

游戏代码如何应用?

游戏代码的应用涉及从开发到运行的完整流程,需要结合游戏引擎、编程语言和开发工具来实现。以下是分步骤的详细说明和示例:### 一、游戏代码应用的核心步骤1. **选择开发工具** - 游戏引擎:Unit...