超简单!用Pygame实现贪吃蛇游戏!

项目源码可见:https://github.com/xiaozhou-alt/Gluttonous_Snake


文章目录

  • 一、项目介绍
  • 二、项目实现
    • 1.项目文件夹目录
    • 2.代码实现
      • 1. 颜色定义和初始化
      • 2.GameSet类 - 游戏全局设置
      • 3.游戏主循环
      • 4.蛇、食物和主循环类定义
  • 三、结果展示


一、项目介绍

这是一个基于Python和Pygame库开发的经典贪吃蛇游戏。游戏具有以下特点:

  • 使用方向键控制蛇的移动
  • 吃到食物后蛇身会增长并计分
  • 碰撞墙壁或自身会导致游戏结束
  • 精美的蛇身和食物贴图
  • 计分系统显示当前得分

对于 游戏贴图 和一些基本的 模块图片 下载,小周这里给大家推荐两个很不错的网站
ヾ(@^ ▽ ^@)ノ:

  1. OpenGameArt:是一个专注于免费开源游戏资源分享的平台,成立于 2009 年,主要为独立游戏开发者提供 ​​2D/3D 美术素材、音效、音乐、纹理​​ 等资源。其特色包括:

​​资源丰富​​:涵盖像素图、精灵动画、3D 模型(如太空主题模型)、纹理库(如金属、木材等 3.5 万+纹理)以及循环音乐(如菜单背景音乐)。
​​风格多样​​:既有复古像素风格,也有写实 3D 模型,适合 RPG、平台跳跃、解谜等多种游戏类型。

资源主要遵循 ​​CC0(公共领域)​​ 或 ​​CC-BY(需署名)​​ 协议,允许免费商用和二次修改。部分素材明确禁止用于 NFT 或需标注来源,下载时需留意具体协议。

网站提供 ​​多语言支持​​(需借助翻译工具),支持按类型、协议筛选资源,但界面设计较老旧,下载速度可能较慢。

  1. Iconfont:是阿里巴巴推出的 ​​矢量图标管理平台​​,主要服务于设计师和开发者,提供:

​​海量图标​​:数百万个图标覆盖 UI、品牌、社交等类别,支持 SVG、PNG、字体文件等多种格式。
​​在线编辑​​:可调整颜色、大小、形状,并生成定制化素材(如透明背景图标)。

​​免费商用​​:大部分图标可免费用于商业项目,但需注意部分资源可能需遵循特定协议(如 CC-BY 需署名)。
​​版权透明​​:图标来源包括阿里巴巴官方设计及用户上传,下载前需确认具体授权条款。

二、项目实现

1.项目文件夹目录

Snack/
├── pic/                    # 游戏图片资源
│   ├── apple.png           # 食物图片
│   ├── snake*.png          # 蛇头图片
│   ├── tail-*.png          # 蛇尾图片
│   ├── body-*.png          # 蛇身图片
│   ├── turn-*&*.png   # 蛇身转弯图片
├── snack.py                # 主游戏代码文件
└── README.md               # 项目说明文档

2.代码实现

1. 颜色定义和初始化

import pygame, sys, random
from pygame.math import Vector2 as V2

color_green = pygame.Color(187, 255, 121)
color_red = pygame.Color(255, 0, 0)
color_deep_green = pygame.Color(173, 234, 113)
color_black = pygame.Color(0, 0, 0)

导入了必要的库并定义了游戏中使用的主要颜色:

  • pygame用于游戏开发
  • sys用于系统操作
  • random用于食物随机生成
  • Vector2用于简化二维坐标操作
  • 定义了四种颜色用于游戏界面

2.GameSet类 - 游戏全局设置

class GameSet():
    # 设置主窗口
    screen = None
    cell_size = 20
    cell_number = 40
    food = pygame.image.load(r'pic/apple.png')
    snake = None
    score = 0

GameSet 类管理游戏全局设置:

  • screen :游戏主窗口
  • cell_sizecell_number :定义游戏网格大小

3.游戏主循环

def start_game(self):
    pygame.init()
    GameSet.screen = pygame.display.set_mode([GameSet.cell_size * GameSet.cell_number, GameSet.cell_size * GameSet.cell_number])
    clock = pygame.time.Clock()
    main_game = Main()
    Screen_update = pygame.USEREVENT
    pygame.time.set_timer(Screen_update, 100)
  • 初始化pygame并创建窗口
  • 设置计时器每100毫秒触发一次更新
  • 创建Main类实例处理游戏逻辑
  • 设置60FPS的帧率限制

4.蛇、食物和主循环类定义

class Snake():
    def __init__(self):
        self.head_up = pygame.image.load(r'pic/snakeU.png')
        # ...其他方向图片加载...
        self.body = [V2(5, 10), V2(4, 10), V2(3, 10)]
        self.direction = V2(0, 1)
        self.live = True

class Food():
    def __init__(self):
        self.randomize()
    
    def randomize(self):
        self.x = random.randint(0, GameSet.cell_number - 1)
        self.y = random.randint(0, GameSet.cell_number - 1)
        self.pos = V2(self.x, self.y)

class Main():
    def __init__(self):
        self.snake = Snake()
        self.food = Food()
    
    def update(self):
        self.snake.move_snake()
        self.check_collision()
        self.check_fail()
  • Snack

  • 加载所有方向的蛇头和蛇尾图片

  • 初始化蛇身位置和方向

  • live 属性控制蛇的存活状态

  • 使用 Vector2 简化位置计算

  • Food

  • 初始化时随机生成位置

  • randomize 方法在蛇吃到食物后重新生成

  • 使用 Vector2 存储位置坐标

  • Main

  • 初始化蛇和食物

  • update 方法处理每帧更新

  • check_collision 检测蛇是否吃到食物

  • check_fail 检测游戏结束条件

三、结果展示

基于pygame的贪吃蛇游戏

如果你喜欢我的文章,不妨给小周一个免费的点赞和关注吧!

你可能感兴趣的:(项目实操,游戏,pygame,游戏,python)