志童道合 | pygame小游戏系列:扫雷
本帖最后由 SBI y 于 2022-12-19 22:23 编辑志“童”道合项目开始了,讲一下我小学和现在的小游戏吧。
这篇帖子讲windows扫雷小游戏。
目录
1、背景
2、任务解析
| 1、游戏玩法
| 2、核心要点
3、制作
| 1、初始化
| 2、绘制游戏
| 3、事件处理和主循环
| 4、界面
4、优化、结语
列个提纲,好写帖子些。
背景
午后学校微机室,闷热、慵懒。无精打采的可怜的孩子们神情疲惫,心思不在“word”,“excel”,“flash”上,翻着“开始”貌似寻求着什么。
忽然,他看到了什么:一个小小的扫雷,重新燃起了他的希望……
于是,扫雷再次火热于同学们的鼠标下。
哈哈哈其实就是开小差没事儿干玩扫雷而已。说实话,在微机室断网的情况下,Windows自带的游戏中,纸牌什么我们是玩不懂的,就只有扫雷这么一个内容简单,玩法不俗不腻,让人能迅速发觉它的乐趣。真是不可多得,也再一次化解同学们的无聊危机。
可恶的是我家电脑上没有扫雷{:7_217:},气死我了。既然没有,python写一个!
任务解析
扫雷玩法
一片雷区里是一个矩形的正方形阵列,每个正方形格子下可能有雷,其他格子则是数字,表示周围一圈八个格子里的雷数。我们需要根据这个,点开 数字格,推出附近的雷。只要把除了雷以外的格子都点开,或者把雷都标记出来,游戏胜利;点到了雷,游戏失败。
核心要点
1、算出数字格里的数字;2、点到空格(0),显示周围一圈的格子。这两个部分稍难一些,用遍历就好了,2也可以用递归。
制作
作品早就做好了,不想看教程可以直接在下载附件。一个文件夹,里面是扫雷的脚本、图片、声音,我还用图形化编了一个扫雷也在里面,不过用的方法很笨,主要还是看代码版的扫雷脚本。
为了缩减帖子长度,大部分的讲解和注释都在代码里,帖子只有我大概的思路
游戏初始化
我打算这个程序主要由pygame库来实现主体的游戏部分,pyautogui做界面,好处是mind+已经把它们图形化了,不会可以照着自学。其他还需要time库,math库和random库来辅助。
扫雷有一个一个格子,我们要定义格子宽,以及屏幕宽有多少个格子,长有多少个。我们需要几个列表来分别存储每个格子的位置、类别(数字或 雷)、状态(无、翻开、标记、怀疑)。我们还需要一个变量记录游戏状态,一个变量为字体来显示数字和文字。还有位移量,要点1和2要用;炸弹图片,声音用变量记录;数字颜色存在一个列表里。
这是每次程序开始时的初始化,接下来是每局游戏的初始化:
绘制游戏
先要设置窗口、标题等,格子由横竖线画。被按下的格子则在它的位置那里画一个深一点的方,写上数字;标记写个m,表示mark(mark有标记的意思);怀疑画个问号。每种数字颜色不同,0则为空。
事件处理和主循环
先是主循环,有大循环,包括每轮游戏和游戏后的界面部分;大循环里有小循环,是游戏主体。
加上主循环后,大体的程序结构出来了,这是程序结构:
程序开始时初始化
大循环开始:
|每轮游戏初始化
|小循环开始:
|绘制游戏
|事件处理
|结束界面
程序结束
灰色部分是以后要做的,墨绿色是已经做了的,剩下的是这个环节做的。
这是大循环
这是小循环
把前面的代码和这两个while循环整理一下,变成上面的程序结构。
是时候处理事件了:
众所周知,一个游戏需要和玩家进行交互,就需要处理玩家所带来的事件:
玩过扫雷的都知道,左键点击没有状态的格子是翻开,右键没有状态的格子是插旗(标记),右键插了旗的格子就会变成问号(疑惑),再右键问号就又会没有特殊状态。
游戏自身也会发生一些事,我们需要判断胜负:
这些都做完以后,也按照上面的程序结构整理一下,这两部分都属于事件处理部分,实在不会(说实话我不信有人不会除非你还没开始学python代码化的编程)可以照附件里的那个扫雷.py文件做。
现在游戏已经相当完整了,但还需要界面部分
界面
我们这个环节就要做结束的提醒界面。
界面pyautogui做的,其实用Easygui和tkinter是一样的效果,只不过pyautogui在mind+上有图形化积木,方便那些比我还小的又想学习这个项目的小白可以对照学习。
胜利和失败有不同的提示文本,但按钮选项都是“再来一局”和“退出游戏”,只需要根据胜利/失败改变显示的消息,再根据玩家按下的按钮改变游戏状态态(3:新一轮游戏;或0:结束程序)。
对了还有失败特效,一个一个炸弹通过遍历画出来。
优化、结语
到这里,游戏是完成了。
看看多少行?130完成,不错,又精又简,还效果不错{:5_122:}。
不过time库还没有用上,那个声音文件也没有用上。
剩下就是要优化的部分了:
失败效果遍历画出雷时,可以加上等待一个随机秒数做出连锁反应的效果,也可以加上声音。
做一个计时器记录玩家的用时,也是一个不错的想法。
不过我比较懒,剩下的优化有意者帮帮忙做一下吧。
小结没什么好说,中间碰到的问题也很少。
我觉得一个好的程序,一定要精简,但效果也不能打折扣。好的游戏,主要在玩法上令人着迷,才能使它留在童年的记忆里。希望这个小程序可以让你再一次找到从前玩扫雷时的感觉。
制作有点累,不允许白嫖帖子!!!
看了帖子要回复,留下你的宝贵意见或者支持一下,实在不行发个6也可以,绝对不允许白嫖!!! 很不错哎!{:6_209:} Doughnut 发表于 2022-12-19 14:38
很不错哎!
谢谢鼓励!{:7_219:} 666,给你评个分,赏个脸给我也评一个呗 求助:怎么把视频在帖子里面放出来呀,主要是不知道视频地址怎么搞。我录了演示效果,可是放不上去{:5_121:}
SBI y 发表于 2022-12-20 11:41
求助:怎么把视频在帖子里面放出来呀,主要是不知道视频地址怎么搞。我录了演示效果,可是放不上去{:5_121: ...
可以先上传到b站或优酷,然后回到社区编辑区选择视频,在地址那粘贴b站和优酷的链接哦 没有图片吗? Forgotten 发表于 2022-12-20 16:57
没有图片吗?
怎么回事,我看到有图片啊?那些右上角打了社区水印的不就是 搞好了,看看效果:{:7_219:}https://www.bilibili.com/video/BV1cd4y1e7FP/
......不介意的话,换VSCode吧,支持的语言多,还带各种插件和骚操作 帅猫 发表于 2022-12-23 22:02
......不介意的话,换VSCode吧,支持的语言多,还带各种插件和骚操作
我还只是个萌新诶~
说实话这些插件和骚操作我也不会呀
还是先把最基础的代码学扎实了,写点小的程序熟悉了,再看看这些编辑器
基本功还没打起来其实也没有太大必要搞这些辅助性的玩意儿
主要就是觉得我现在用的这个编辑器比较好看
等以后技术强硬起来了会看看的
{:5_140:} 厉害厉害 不错啊!{:6_213:} 不错啊,现在还有挺多人玩这个的 为什么会有那么多分支结构
页:
[1]