游戏开发丨基于Pygame的AI版贪吃蛇小游戏
文章目录
- 写在前面
- 需求分析
- 程序设计
- 程序分析
- 运行结果
- 系列文章
- 写在后面
写在前面
本期内容
- 基于pygame的AI版贪吃蛇小游戏
所需环境
- python
- pycharm或anaconda
- pygame
下载地址
- https://download.csdn.net/download/m0_68111267/88789665
需求分析
本游戏使用Pygame模块开发,不需要玩家操纵贪吃蛇,贪吃蛇会自动吃掉屏幕上随机出现的食物,每吃一个食物贪吃蛇长度增加一节。如果贪吃蛇撞到屏幕边缘或自己的身体,则游戏结束。游戏界面包括游戏区域和得分显示区域。
程序设计
import pygame
import sys
from random import randint# 蛇运动的场地长宽
HEIGHT = 25
WIDTH = 25SCREEN_X = HEIGHT * 25
SCREEN_Y = WIDTH * 25FIELD_SIZE = HEIGHT * WIDTH# 蛇头总是位于snake数组的第一个元素
HEAD = 0# 用来代表不同东西的数字,由于矩阵上每个格子会处理成到达食物的路径长度,
# 因此这三个变量间需要有足够大的间隔(>HEIGHT*WIDTH)
FOOD = 0
UNDEFINED = (HEIGHT + 1) * (WIDTH + 1)
SNAKE = 2 * UNDEFINED# 由于snake是一维数组,所以对应元素直接加上以下值就表示向四个方向移动
LEFT = -1
RIGHT = 1
UP = -WIDTH
DOWN = WIDTH# 错误码
ERR = -1111# 用一维数组来表示二维的东西
# board表示蛇运动的矩形场地
# 初始化蛇头在(1,1)的地方,第0行,HEIGHT行,第0列,WIDTH列为围墙,不可用
# 初始蛇长度为1
board = [0] * FIELD_SIZE
snake = [0] * (FIELD_SIZE + 1)
snake[HEAD] = 1 * WIDTH + 1
snake_size = 1
……(完整代码请下载后查看)
程序分析
这段代码是一个基于Python和pygame库实现的贪吃蛇游戏的核心逻辑部分。游戏在一个25x25大小的网格上进行,其中每个格子都有一个对应的索引值,用于表示蛇的位置、食物位置以及地图上的可达性。
首先,定义了一些全局变量,如游戏区域尺寸(HEIGHT, WIDTH)、屏幕尺寸(SCREEN_X, SCREEN_Y)、场地大小(FIELD_SIZE)以及方向常量LEFT, RIGHT, UP, DOWN等。蛇和临时蛇的位置信息分别存储在一维数组snake和tmpsnake中,初始时蛇长度为1,位于(1,1)的位置。同时设置了食物food的初始位置,并且定义了FOOD、UNDEFINED和SNAKE三个特殊的数值,用来在二维矩阵board中区分食物、未探索区域及蛇体。
游戏中包含多个关键函数:
is_cell_free(idx, psize, psnake):检查给定索引idx处的单元格是否为空,即不被蛇身覆盖。is_move_possible(idx, move):判断蛇能否向给定方向move移动。board_reset(psnake, psize, pboard):重置地图状态,将蛇体和食物标记出来,并将其他空地设置为可到达的未知距离。board_refresh(pfood, psnake, pboard):采用广度优先搜索算法更新地图中的路径长度,计算从每个非蛇体单元格到食物的最短距离。choose_shortest_safe_move(psnake, pboard)和choose_longest_safe_move(psnake, pboard):根据当前地图数据,选择距离食物最近或最远的安全移动方向。is_tail_inside()和follow_tail():通过虚拟操作判断蛇头是否可以朝蛇尾方向移动以避免死路,并找到这个方向。any_possible_move():当无明确安全方向时,随机选择一个可行的方向。shift_array(arr, size):移动数组元素,模拟蛇的身体沿指定方向移动。new_food():生成新的食物位置,确保不在蛇体内。make_move(pbest_move):执行实际的蛇移动操作,包括增加蛇长、更新蛇头位置、调整蛇身以及处理吃到食物的情况。virtual_shortest_move():进行一次虚拟移动,尝试寻找最短路径吃到食物并更新虚拟地图状态。find_safe_way():结合虚拟运行结果判断蛇与食物间的路径情况,并确定安全的下一步移动方向。
主循环中,程序不断检测用户输入事件(如退出或按下空格键重新开始),并依据上述函数计算出最佳移动方向,然后更新蛇的位置。如果蛇碰到自身或其他不可移动区域,则游戏结束,显示“YOU DEAD!”提示,并告知玩家按空格键重新开始。同时,实时显示当前分数(score)。
最后,main() 函数包含了游戏的初始化、事件处理、画面渲染和游戏逻辑更新等内容,构成了整个贪吃蛇游戏的核心框架。
运行结果

系列文章
| 序号 | 目录 | 直达链接 |
|---|---|---|
| 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 |
| 5 | Web实战丨基于Django与Bootstrap的在线计算器 | https://want595.blog.csdn.net/article/details/134424381 |
| 6 | Web实战丨基于django+html+css的在线购物商城 | https://want595.blog.csdn.net/article/details/135466052 |
| 7 | Web实战丨基于django+html+css+js的电子商务网站 | https://want595.blog.csdn.net/article/details/135506809 |
| 8 | Web实战丨基于Django与HTML的用户登录验证系统 | https://want595.blog.csdn.net/article/details/135513413 |
| 9 | Web实战丨基于django+html+css+js的学院门户网站 | https://want595.blog.csdn.net/article/details/135511066 |
| 10 | Web实战丨基于Django与HTML的新闻发布系统 | https://want595.blog.csdn.net/article/details/135519824 |
| 11 | Web实战丨基于django+html+css+js的在线博客网站 | https://want595.blog.csdn.net/article/details/135536765 |
| 12 | …… |
写在后面
我是一只有趣的兔子,感谢你的喜欢!
相关文章:
游戏开发丨基于Pygame的AI版贪吃蛇小游戏
文章目录 写在前面需求分析程序设计程序分析运行结果系列文章写在后面 写在前面 本期内容 基于pygame的AI版贪吃蛇小游戏 所需环境 pythonpycharm或anacondapygame 下载地址 https://download.csdn.net/download/m0_68111267/88789665 需求分析 本游戏使用Pygame模块开…...
qt-C++笔记之QStringList、QList<QString>、QString、QChar、QList<QChar>区别
qt-C笔记之QStringList、QList、QString、QChar、QList区别 —— 杭州 2024-01-30 凌晨0:27 参考博文:qt-C笔记之QStringList code review! 文章目录 qt-C笔记之QStringList、QList<QString>、QString、QChar、QList<QChar>区别1.Qt的字符容器类1.QSt…...
python爬虫学习之解析_BeautifulSoup
目录 一、bs4的基本使用 (1)导入 (2)创建对象 二、节点定位 1、根据标签名查找节点 2、基本函数使用 (1)find (2)find_all (3)select 三、节点信息 1、获取节…...
2024美赛数学建模赛题解读常用模型算法
回归拟合预测 拟合预测是建立一个模型去逼近实际数据序列的过程,适用于发展性的体系。建立模型时,通常都要指定一个有明确意义的时间原点和时间单位。而且,当t趋向于无穷大时,模型应当仍然有意义。将拟合预测单独作为一类体系研究…...
NoSQL 数据库管理系统和模型的比较
前些天发现了一个人工智能学习网站,通俗易懂,风趣幽默,最重要的屌图甚多,忍不住分享一下给大家。点击跳转到网站。 NoSQL 数据库管理系统和模型的比较 介绍 当大多数人想到数据库时,他们通常会想到传统的关系数据库…...
数据库(SQL)
目录 1 触发器 1.1 触发器简介 1.2 触发器的创建 语法 说明 1.3 示例 2 存储过程 2.1 什么是存储过程(函数) 2.1.1 存储过程和存储函数的区别 2.2 优势 2.3 应用场景 2.4 存储过程的创建和使用 说明 各参数类型所实现的存储过程 无参数无返…...
如何用Docker+jenkins 运行 python 自动化?
1.在 Linux 服务器安装 docker 2.创建 jenkins 容器 3.根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境) 4.运行新的 python 容器,执行 jenkins 从仓库中拉下来的自动化项目 5.执行完成之后删除容器 前言 环境准备 Linux 服务器一台(我的是 CentOS7)…...
uniapp瀑布流实现
1. 图片瀑布流: 不依赖任何插件,复制即可见效: <template><view class"page"><view class"left" ref"left"><image class"image" v-for"(item,i) in leftList" :k…...
鸿蒙:@Link装饰器-父子双向同步
子组件中被Link装饰的变量与其父组件中对应的数据源建立双向数据绑定。从API version 9开始,该装饰器支持在ArkTS卡片中使用。 需要注意:Link装饰的变量与其父组件中的数据源共享相同的值。Link装饰器不能在Entry装饰的自定义组件中使用。 一、装饰器使…...
Leetcode--27
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面…...
使用Eclipse搞Android项目报错
相信现在都没什么人还会用Eclipse来开发的了。 不过安装完后,打开Eclipse会提示我的Jdk版本不符合 --------------------------- Incompatible JVM --------------------------- Version 1.8.0_391 of the JVM is not suitable for this product. Version: 17 or g…...
import sys是什么
import sys语句 允许你使用sys模块提供的各种功能,从而更好地与Python解释器和操作系统底层进行交互。通过熟练掌握sys模块的使用,可以大大提高Python开发的效率和灵活性。 sys模块 是Python的内置模块之一,用于与Python解释器和系统环境交…...
Python爬虫:XPath基本语法
XPath(XML Path Language)是一种用于在XML文档中定位元素的语言。它使用路径表达式来选择节点或节点集,类似于文件系统中的路径表达式。 不啰嗦,讲究使用,直接上案例。 导入 pip3 install lxmlfrom lxml import etr…...
UML/SysML建模工具更新情况(截至2024年1月)(1)UModel 2024
最近一段时间更新的工具有: 工具最新版本:Umple 1.33.0 更新时间:2024年1月10日 工具简介 自称“Model-Oriented Programming”,把图形和文本结合起来,支持Java、PHP和Ruby代码生成,可以在线使用…...
ubuntu20-github不通问题
github不通 一直在github下载失败 Git报错fatal unable to connect to github.com: github.com[0: 20.205.243.166] >>> alsa-ucm-conf v1.2.6.3 Downloading(卡在这里,很烦啊) 然后搜了很多文档,然后以下操作: 1.GitHub.com - GitHub: Lets build from here Git…...
【MAC】Multi-Level Monte Carlo Actor-Critic阅读笔记
基本思想: 利用多层次蒙特卡洛方法(Multi-Level Monte Carlo,MLMC)和Actor-Critic算法,解决平均奖励强化学习中的快速混合问题。 快速混合? 在强化学习中,当我们说一个策略"混合得快"…...
[GN] 设计模式—— 创建型模式
文章目录 创建型模式单例模式 -- 确保对象唯一性例子优化饿汉式懒汉式 优缺点使用场景 简单工厂模式例子:优化优缺点适用场景 工厂方法模式 -- 多态工厂的实现例子优缺点优化适用场景 抽象工厂模式 -- 产品族的创建例子优缺点适用场景 总结 创建型模式 单例模式 –…...
链表——超详细
一、无头单向非循环链表 1.结构(两个部分): typedef int SLTDataType; typedef struct SListNode {SLTDataType data;//数据域struct SListNode* next;//指针域 }SLNode; 它只有一个数字域和一个指针域,里面数据域就是所存放的…...
【刷题】 leetcode 面试题 08.05.递归乘法
递归乘法 1 题目描述2 思路一(返璞归真版)3 思路二(二进制乘法器版)4 思路三(变态版)Thanks♪(・ω・)ノ谢谢阅读下一篇文章见!!! 1 题目…...
C语言实现希尔排序算法(附带源代码)
希尔排序 希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时,效率高࿰…...
个人博客域名迁移说明 www.xiaoming.io
因为之前很多文章和插图都链接到了个人博客,一些读者评论和私信反馈链接有问题,图片不显示,这里特地说明如下:个人博客域名从原先的 www.hainter.com 改成了 www.xiaoming.io。例如文章中有链接 http://www.hainter.com/books 不能…...
Cocos笔记
Cocos笔记 好用的Api 碰撞体范围检测 包围盒范围检测(性能对比碰撞检测稍好) 多边形碰撞体和矩形相交检测 设置父节点并同步位置 外部增加并调用回调函数 网址 其他 代码混淆工具 引用加载过久修改tsconfig.json脚本增加以下代码 类型写法(举例) 刮刮乐脚本 修改后的挖图(…...
开源游戏性能优化工具WaveTools:如何实现游戏体验提升方案
开源游戏性能优化工具WaveTools:如何实现游戏体验提升方案 【免费下载链接】WaveTools 🧰鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 在当今游戏生态中,性能优化工具已成为提升玩家体验的关键组件。WaveTools…...
AWPortrait-Z问题解决:图像模糊、速度慢?常见问题一键搞定
AWPortrait-Z问题解决:图像模糊、速度慢?常见问题一键搞定 1. 快速诊断:你的问题属于哪一类? 在使用AWPortrait-Z生成人像时,最常见的问题可以归纳为三类: 图像质量问题:模糊、失真、细节不足…...
3步解锁网盘下载新体验:告别限速困扰的终极方案
3步解锁网盘下载新体验:告别限速困扰的终极方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 /…...
突破百度网盘限速:Python直链解析工具使用指南
突破百度网盘限速:Python直链解析工具使用指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘下载速度缓慢而烦恼吗?今天我们将介绍一款…...
从零构建编译器:编译原理实战与考试重点解析
1. 编译器是什么?为什么需要学习编译原理? 当你用Python写下print("Hello World")时,计算机其实看不懂这行代码。编译器就像一位翻译官,把人类能理解的高级语言转换成机器能执行的二进制指令。我在第一次实现编译器时&a…...
SDMatte与CI/CD集成:实现模型服务的自动化部署与更新
SDMatte与CI/CD集成:实现模型服务的自动化部署与更新 1. 引言:当AI模型遇上DevOps 最近遇到一个挺有意思的场景:某设计团队在使用SDMatte进行图像背景去除时,每次模型更新都需要手动重新部署服务,导致新功能上线延迟…...
EasyAnimateV5-7b-zh-InP模型在微信小程序中的应用:短视频生成功能实现
EasyAnimateV5-7b-zh-InP模型在微信小程序中的应用:短视频生成功能实现 1. 为什么要在微信小程序里集成视频生成能力 最近帮几个做社交内容的小团队做技术咨询,发现一个特别有意思的现象:用户发朋友圈、发群聊、发公众号时,对短…...
30 秒学会!手机隐藏数码技巧,超实用!打工人、学生党直接封神
家人们谁懂啊!每天手机不离手,结果 90% 的隐藏功能全在吃灰,简直亏到姥姥家!别再只会打电话、刷短视频了,这些30 秒就能上手的数码冷知识,实用到跺脚,学会直接变身玩机大神,效率直接…...
