游戏开发丨基于Pygame的贪吃蛇小游戏

文章目录

  • 写在前面
  • 需求分析
  • 程序设计
  • 程序分析
  • 运行结果
  • 系列文章
  • 写在后面

写在前面

本期内容

  • 基于pygame的贪吃蛇小游戏

所需环境

  • python
  • pycharm或anaconda
  • pygame

下载地址

  • https://download.csdn.net/download/m0_68111267/88789657

需求分析

本游戏使用Pygame模块开发,玩家通过操纵贪吃蛇来吃掉屏幕上随机出现的食物,每吃一个食物贪吃蛇长度增加一节,玩家通过键盘上的方向键控制贪吃蛇的移动方向。如果贪吃蛇撞到屏幕边缘或自己的身体,则游戏结束。游戏界面包括游戏区域和得分显示区域。

程序设计

import pygame
import random
import os

WHITE = (0xff, 0xff, 0xff)
BLACK = (0, 0, 0)
GREEN = (0, 0xff, 0)
RED = (0xff, 0, 0)
LINE_COLOR = (0x33, 0x33, 0x33)
FPS = 30

HARD_LEVEL = list(range(2, int(FPS / 2), 2))
hardness = HARD_LEVEL[0]

D_LEFT, D_RIGHT, D_UP, D_DOWN = 0, 1, 2, 3

# 初始化
pygame.init()

# 要想载入音乐,必须要初始化 mixer
pygame.mixer.init()

WIDTH, HEIGHT = 500, 500

# 贪吃蛇小方块的宽度
CUBE_WIDTH = 20

# 计算屏幕的网格数,网格的大小就是小蛇每一节身体的大小
GRID_WIDTH_NUM, GRID_HEIGHT_NUM = int(WIDTH / CUBE_WIDTH), \
    int(HEIGHT / CUBE_WIDTH)

……(完整代码请下载后查看)

程序分析

这段代码是用Python的pygame库实现的一个贪吃蛇游戏。下面是对代码主要部分的详细分析:

  1. 导入模块:首先导入了pygame、random和os模块,用于图形渲染、随机数生成以及操作文件路径。

  2. 颜色和常量定义:定义了一些颜色变量如WHITE, BLACK等,FPS(帧率),HARD_LEVEL(难度级别列表)以及四个方向常量D_LEFT, D_RIGHT, D_UP, D_DOWN。

  3. 初始化pygame:初始化pygame库,并且特别地初始化了音频模块pygame.mixer.init()以便在游戏中播放背景音乐和音效。

  4. 屏幕设置:设置了游戏窗口的大小、小方块宽度以及网格数量。

  5. 资源加载

    • 加载并调整背景图片、蛇头图片、食物图片的大小以适应游戏窗口。
    • 设置背景音乐和吃到食物时播放的音效。
    • 为音乐设定音量和循环次数。
  6. 游戏状态与计时器:设置running标志位来控制游戏运行状态;使用pygame.time.Clock()创建一个定时器,确保游戏按指定帧率运行。

  7. 游戏逻辑函数

    • draw_grids():画出格子线,作为游戏界面的辅助网格。
    • draw_body(direction):根据蛇的方向绘制蛇的身体,包括蛇头和身体其他部分。
    • generate_food():生成食物在随机空闲位置上。
    • draw_food():在屏幕上绘制食物图像。
    • grow():检测蛇是否吃到食物,若吃到则增长蛇身并播放音效。
  8. 主游戏循环

    • 检查事件队列,处理键盘输入以改变蛇的方向。
    • 根据难度级别每间隔一定时间移动蛇的位置。
    • 更新蛇的身体位置并检查是否超出屏幕或撞到自身,这两种情况都会导致游戏结束。
    • 判断蛇是否吃到食物,如果吃到,则重新生成食物,并增加蛇的长度和调整游戏难度。
  9. 渲染与更新:每一帧都清除背景(这里通过填充背景图片实现)、重绘网格、蛇体和食物,并更新游戏窗口显示。

  10. 退出游戏:当用户选择退出或游戏结束条件满足时,关闭pygame并退出程序。

总结起来,该段代码完整实现了经典的贪吃蛇游戏逻辑,包括图形渲染、音频播放、玩家输入响应以及游戏状态管理等功能。

运行结果

snake

系列文章

序号目录直达链接
1入门实战丨基于Tkinter的简易计算器https://want595.blog.csdn.net/article/details/131731173
2入门实战丨基于Tkinter的生日管理系统https://want595.blog.csdn.net/article/details/131731380
3数据库实战丨基于Tkinter+MySQL的学生成绩管理系统https://want595.blog.csdn.net/article/details/130992721
4数据库实战丨基于Tkinter+MySQL的梅西生涯数据管理系统https://want595.blog.csdn.net/article/details/130995564
5Web实战丨基于Django与Bootstrap的在线计算器https://want595.blog.csdn.net/article/details/134424381
6Web实战丨基于django+html+css的在线购物商城https://want595.blog.csdn.net/article/details/135466052
7Web实战丨基于django+html+css+js的电子商务网站https://want595.blog.csdn.net/article/details/135506809
8Web实战丨基于Django与HTML的用户登录验证系统https://want595.blog.csdn.net/article/details/135513413
9Web实战丨基于django+html+css+js的学院门户网站https://want595.blog.csdn.net/article/details/135511066
10Web实战丨基于Django与HTML的新闻发布系统https://want595.blog.csdn.net/article/details/135519824
11Web实战丨基于django+html+css+js的在线博客网站https://want595.blog.csdn.net/article/details/135536765
12……

写在后面

我是一只有趣的兔子,感谢你的喜欢!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/353869.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Go 知识chan

Go 知识chan 1. 基本知识1.1 定义1.2 操作1.3 操作限定1.4 chan 读写 2. 原理2.1 数据结构2.2 环形队列2.3 等待队列2.4 类型消息2.5 读写数据2.6 关闭chan 3. 使用3.1 操作符使用3.2 select3.3 for-range https://a18792721831.github.io/ 1. 基本知识 chan是go里面里面提供…

ssh异常报错:Did not receive identification string from

一、问题描述 某次外出在异地工作场所xshell炼乳远程服务器时,报错:Connection closed by foreign host. D,服务器查看secure日志或sshd服务状态会显示:id not receive identification string from client_ip; 二、分析处理 1&a…

综合案例 - 商品列表

文章目录 需求说明1.my-tag组件封装(完成初始化)2.may-tag封装(控制显示隐藏)3.my-tag组件封装(v-model处理:信息修改)4.my-table组件封装(整个表格)①数据不能写死&…

修复idea,eclipse ,clion控制台中文乱码

控制台乱码问题主要原因并不在编译器IDE身上,还主要是Windows的控制台默认编码问题。。。 Powershell,cmd等默认编码可能不是UTF-8,无需改动IDE的settings或者properties(这治标不治本),直接让Windows系统…

编写nginx脚本,安装失败

这是我写的nginx脚本-(正确的,已经修改过的) 这是我在运行脚本是出现的问题 这是我在nginx官网上粘贴的内容,请注意我用红笔画的地方,与第一张我写的脚本图片作对比,会发现多出现两个转义符号\。第二幅图就…

Axolotl:一款极简的大模型微调(Finetune)开源框架

今天给大家分享一款工具,Axolotl[1] 是一个旨在简化各种AI模型的微调过程的工具,支持多种配置和架构。 特点: 可训练各种 Huggingface 模型,如 llama、pythia、falcon、mpt支持 fullfinetune、lora、qlora、relora 和 gptq使用简…

Linux GPIO模拟SPI接口介绍

一. 前言 上次通过GPIO模拟IIC的驱动一块0.98英寸的OLED后,想着下次用下GPIO模拟SPI接口试下。本文会介绍怎么用GPIO模拟SPI接口的方式为设备添加一块spi nor flash,flash模块如下图所示: 上图是一个spi nor模块,上面焊接了W25Q32…

acwing周赛140 b题

思路:我们按照从小到大的顺序将数组逆转好,然后枚举数组首项,分别让其1,-1,0,然后求出公差,从前往后遍历即可。 代码: int ans1(){//不动int cha (a[n] - a[1] 1) / (n - 1);int…

原创改进 | 融合蝠鲼觅食与联想学习的量子多目标灰狼优化算法(Matlab)

​前面的文章里作者介绍了多目标灰狼优化算法(Multi-Objective Grey Wolf Optimizer,MOGWO),该算法是由Mirjalili等(灰狼算法的提出者)于2016年提出[1],发表在中科院一区期刊《expert systems with applications》。 MOGWO保留了灰狼算法的种…

无际线复选框

效果演示 实现了一个网格布局,其中每个网格是一个复选框,可以选择是否显示。每个复选框都有一个漂浮的天花板,表示它是一个房间的天花板。每个房间的天花板都有一个不同的形状和颜色,分别对应不同的房间。整个页面的背景是一个由两…

小米13utltra激活冰箱

安装adb驱动https://www.jianshu.com/p/6c41d34d9202 直接下载使用 连接上小米手机,退出账号,关闭锁屏密码,打开usb调试,usb调试(安全设置) adb shell dpm set-device-owner com.catchingnow.icebox/.receiver.DPMReceiver如果显示Success,则您已成功激活冰箱。 …

【DeepLearning-8】MobileViT模块配置

完整代码: import torch import torch.nn as nn from einops import rearrange def conv_1x1_bn(inp, oup):return nn.Sequential(nn.Conv2d(inp, oup, 1, 1, 0, biasFalse),nn.BatchNorm2d(oup),nn.SiLU()) def conv_nxn_bn(inp, oup, kernal_size3, stride1):re…

PostgreSQL技术大讲堂 - 第43讲:流复制原理

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第43讲&#…

每日OJ题_算法_二分查找⑦_力扣153. 寻找旋转排序数组中的最小值

目录 力扣153. 寻找旋转排序数组中的最小值 解析代码 力扣153. 寻找旋转排序数组中的最小值 153. 寻找旋转排序数组中的最小值 - 力扣(LeetCode) 难度 中等 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后…

Java NIO初体验

概述 由于BIO(同步阻塞IO)对系统资源的浪费较大。Java1.4中引⼊了NIO框架,在java.nio包中提供了Channel、Selector、Buffer等抽象类,可以快速构建多路复⽤的IO程序,⽤于提供更接近操作系统底层的⾼性能数据操作⽅式。…

11. 双目视觉之立体视觉基础

目录 1. 深度恢复1.1 单目相机缺少深度信息1.2 如何恢复场景深度?1.3 深度恢复的思路 2. 对极几何约束2.1 直观感受2.2 数学上的描述 1. 深度恢复 1.1 单目相机缺少深度信息 之前学习过相机模型,最经典的就是小孔成像模型。我们知道相机通过小孔成像模…

零基础轻松学编程,中文编程开发工具下载及构件教程

零基础轻松学编程,中文编程开发工具下载及构件教程 一、前言 零基础学编程,中文编程工具下载,中文编程开发工具构件之选择件列表框构件教程, 想学编程可 编程交流.群.一起交流学习(关注收藏或点击最下方官网卡片进入…

【c语言】详解操作符(上)

1. 操作符的分类 2. 原码、反码、补码 整数的2进制表示方法有三种,即原码、反码、补码 有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号位其余都是数值位。 符号位都是用0表示“正”,用…

设计模式:简介及基本原则

简介 设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化&#xff…

Kotlin快速入门5

Kotlin的继承与重写 kotlin的继承 Kotlin中所有类都继承自Any类,Any类是所有类的超类,对于没有超类型声明的类是默认超类(Any 不是 java.lang.Object): class LearnKotlin // 默认继承自Any Any类默认提供三个函数…