
前言:你好,欢迎来到我的博客。我是一个热爱编程的人,特别喜欢用Python这门语言来创造一些有趣的图形项目。在这篇博客中,我将和你分享一些我用Python写的小的图形项目,包括它们的原理,代码和效果。我希望你能从中学到一些有用的知识,也能感受到编程的乐趣。如果你对我的项目有任何问题或建议,欢迎在评论区留言,我会尽快回复你。让我们开始吧!

贪吃蛇游戏是一款经典的电子游戏,通过控制一个蛇在游戏界面上移动,吃掉食物来增长身体长度,并避免蛇头碰到游戏界面边界或蛇身的其他部分。本项目是一个用Python编写的简单贪吃蛇游戏。
该项目使用了Python编程语言和Pygame库来实现贪吃蛇游戏的逻辑和图形界面的展示。通过捕获键盘事件来改变贪吃蛇的移动方向,并利用碰撞检测来判断游戏是否结束。游戏界面使用矩形方块来表示贪吃蛇的身体和食物,使用Pygame提供的绘制函数进行图形渲染。
贪吃蛇游戏是一个简单而经典的游戏项目,适合初学者学习Python编程和游戏开发的基础知识。通过实现贪吃蛇游戏,可以加深对于控制流程、碰撞检测、图形绘制等概念的理解,并锻炼编程逻辑和问题解决能力。此外,该项目也可以作为一个娱乐项目,供玩家们在闲暇时间享受游戏乐趣。
经典的贪吃蛇界面

游戏结束
按大写R重新开始,按大写Q结束游戏

import pygame
import random
# 游戏界面尺寸
WIDTH = 800
HEIGHT = 600
# 蛇身和食物大小
SEGMENT_SIZE = 20
# 定义颜色
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
# 初始化pygame模块
pygame.init()
# 创建游戏界面
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("贪吃蛇游戏")
# 定义蛇类
class Snake:
    def __init__(self):
        self.segments = [(WIDTH / 2, HEIGHT / 2)]
        self.dx = SEGMENT_SIZE
        self.dy = 0
    def move(self):
        x, y = self.segments[0]
        x += self.dx
        y += self.dy
        self.segments.insert(0, (x, y))
        self.segments.pop()
    def change_direction(self, dx, dy):
        self.dx = dx
        self.dy = dy
    def draw(self):
        for segment in self.segments:
            pygame.draw.rect(screen, WHITE, (segment[0], segment[1], SEGMENT_SIZE, SEGMENT_SIZE))
    def check_collision(self):
        head = self.segments[0]
        for segment in self.segments[1:]:
            if head[0] == segment[0] and head[1] == segment[1]:
                return True
        if head[0] < 0 or head[0] >= WIDTH or head[1] < 0 or head[1] >= HEIGHT:
            return True
        return False
    def eat_food(self, food):
        if self.segments[0][0] == food.x and self.segments[0][1] == food.y:
            self.segments.append((food.x, food.y))
            food.generate_position()
            return True  # 返回True表示蛇吃到了食物
        return False
# 定义食物类
class Food:
    def __init__(self):
        self.x = 0
        self.y = 0
        self.generate_position()
    def generate_position(self):
        self.x = random.randint(0, (WIDTH - SEGMENT_SIZE) // SEGMENT_SIZE) * SEGMENT_SIZE
        self.y = random.randint(0, (HEIGHT - SEGMENT_SIZE) // SEGMENT_SIZE) * SEGMENT_SIZE
    def draw(self):
        pygame.draw.rect(screen, RED, (self.x, self.y, SEGMENT_SIZE, SEGMENT_SIZE))
# 创建蛇和食物对象
snake = Snake()
food = Food()
# 计分变量
score = 0
# 游戏状态变量
game_over = False
# 游戏主循环
running = True
clock = pygame.time.Clock()
while running:
    while game_over:
        screen.fill(BLACK)
        font = pygame.font.Font(None, 36)
        text = font.render("Game Over! Score: " + str(score), True, WHITE)
        screen.blit(text, (WIDTH / 2 - text.get_width() / 2, HEIGHT / 2 - text.get_height() / 2))
        restart_text = font.render("Press R to restart or Q to quit", True, WHITE)
        screen.blit(restart_text, (WIDTH / 2 - restart_text.get_width() / 2, HEIGHT / 2 + text.get_height()))
        pygame.display.flip()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                running = False
                game_over = False
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_r:
                    game_over = False
                    snake = Snake()
                    food = Food()
                    score = 0
                elif event.key == pygame.K_q:
                    running = False
                    game_over = False
    if not running:
        break
    clock.tick(10)  # 控制游戏速度
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP and snake.dy != SEGMENT_SIZE:  # 防止向下移动时按上键
                snake.change_direction(0, -SEGMENT_SIZE)
            elif event.key == pygame.K_DOWN and snake.dy != -SEGMENT_SIZE:  # 防止向上移动时按下键
                snake.change_direction(0, SEGMENT_SIZE)
            elif event.key == pygame.K_LEFT and snake.dx != SEGMENT_SIZE:  # 防止向右移动时按左键
                snake.change_direction(-SEGMENT_SIZE, 0)
            elif event.key == pygame.K_RIGHT and snake.dx != -SEGMENT_SIZE:  # 防止向左移动时按右键
                snake.change_direction(SEGMENT_SIZE, 0)
    snake.move()
    if snake.check_collision():
        game_over = True
    if snake.eat_food(food):
        score += 1
    screen.fill(BLACK)
    snake.draw()
    food.draw()
    # 显示得分
    font = pygame.font.Font(None, 36)
    text = font.render("Score: " + str(score), True, WHITE)
    screen.blit(text, (10, 10))
    pygame.display.flip()
# 退出游戏
pygame.quit()在运行上述代码之前,你需要确保你的环境中已经安装了Pygame依赖项:
Pygame:一个用于开发游戏的Python库。你可以使用以下命令通过pip安装Pygame
如果没有安装用以下方法进行安装

使用国内的镜像源:将pip的默认源替换为国内的镜像源可以加快下载速度。你可以使用以下命令来更换pip的源:
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple



贪吃蛇游戏项目是一个简单而有趣的Python编程练习,通过实现游戏的各个功能,可以提升对于Python编程语言和游戏开发的理解和熟练程度。同时,贪吃蛇游戏也是一个经典的娱乐项目,能够为玩家带来乐趣和挑战。