在数字化与智能化的浪潮中,目前 AI(人工智能)几乎在各行各业中发挥了不可忽略的价值,今天让我们也来体验一下 AI 的威力:我通过命令,一步一步的教 AI 利用 Python 编程语言打造了一款富有创意和趣味性的消消乐小游戏……
本文 Python 消消乐游戏源代码:https://gitee.com/obullxl/PythonCS/tree/master/CS-CY2405
消消乐游戏设计
这款 Python 消消乐小游戏需要有以下功能或者规则:
需要有游戏界面,不能是控制台文本游戏
随机生成不同颜色的方块,当点击某个颜色的方块时,则自动消除相邻的相同颜色的所有方块
根据消除的方块总数量,作为游戏总得分
可设置游戏时长参数,时间结束,展示总得分页,并可重新启动游戏
为了体验 AI 的威力,我主要通过与 AI 对话,指导 AI 完成代码编写,我尽量不直接修改代码,只是做最后代码的缝合和整理
我期望的游戏界面大概就像这样:
国内免费 AI,游戏可看不可玩
目前可选的 AI 工具有很多,我首先选择国内免费的 AI 工具(暂不具体指名),根据以上我期望的游戏设计和规则,经过与 AI 多轮对话,AI 终于产出了如下代码。
说实话,如果要给这段程序代码打个分(满分 100 分),我觉得90 分应该不为过:
代码注释比较充分,关键地方都进行了注释说明(虽然几次注释不是特别地准确)
函数 create_new_board() 核心方法中,还使用了列表推导(这是 Python 的高级特性,后续我发文在介绍)
同时,核心函数 check_and_remove() 在使用递归的方式来检测相邻同颜色的方块(即:上下左右方块),也考虑到了数值防止越界问题
更令人惊艳的是,本程序可以直接运行,且还可以展示游戏界面,但可惜的是,核心函数 check_and_remove() 逻辑中,检测和消除相邻颜色方块的是个死循环,游戏无法玩,只能看看主界面。
为什么 check_and_remove() 游戏的核心的递归函数是个死循环呢?
禅定: 每个方块的上下左右相邻块是相对的概念,假如 A 方块的上方是 B 方块,那么递归检测 B 方块时,它的下方就是 A 方块,因此递归检测过程就无限循环了。
|
|
尽管我多次提示 AI check_and_remove() 函数是个死循环,请 AI 帮忙修正,但是 AI 就是无法改正,逐步由最开始的人工智能,变成“人工智障”了,没有办法,只能放弃另谋出路了。
采用 GPT4,最终产出期望的游戏
同样的,前面与 GPT4 进行了多轮对话,最终产出了如下不仅可看且可玩了的基本功能的消消乐:
|
|
继续给 AI 命令,以增加分数功能
既然是个游戏,那就得有游戏得分,我们以消除的方块总数量作为游戏总得分,即每消除 1 个方块则得 1 分,AI 根据对话给出了代码修改样例:
|
|
把以上代码复制到基本的消消乐游戏代码中,游戏总分数功能生效了:
继续给 AI 命令,以增加倒计时功能
游戏有总分数还不够,一般的趣味游戏,每轮都应该是有时间限制,因此游戏还需要增加倒计时功能:
|
|
把以上 AI 代码复制到带有分数功能的游戏代码中,运行可以看到有倒计时功能了:
继续给 AI 命令,增加倒计时结束页面
有了倒计时功能,那么当倒计时结束的时候,需要给出具体页面,展示总得分的情况:
|
|
继续把 AI 给出的修改代码复制到总分数代码中,可以看到倒计时结束功能也生效了:
至此,一款符合期望的 Python 消消乐游戏就完成了~
禅定:增加字体,游戏文字汉化
本消消乐游戏代码最后的优化:
- 增加支持中文的字体:
font = pygame.font.Font('./fonts/simsun.ttf', 28)
- 部分文本内容汉化:如
总得分
、倒计时
、游戏结束
等 - 部分游戏参数提取:如
倒计时
、最小消除方块数量
等
禅定: 我们可以继续进一步优化这个程序:
- 使用彩虹糖图片代替方块
- 每次消掉方块,方块可随机布局,增加难度
- 消掉方块,增加动态效果,增加音效
- 记住每轮游戏分数,进行分数排名
关注本公众号,下次继续我们分享增加的功能!
我的本博客原地址:https://ntopic.cn/p/2024050901