软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)
软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)
- 实验内容
- 编程语言以及开发环境的选择
- 实验思路(游戏设计)
- 一、游戏的逻辑设计
- 1、猫头的生成
- 2、鱼的生成
- 3、猫头和鱼骨的移动
- 4、按下键盘,改变方向
- 二、主窗口的绘制
- 1、使用drawImage显示背景图片
- 2、使用drawLine绘制行线和列线
- 3、使用drawText显示分数
- 4、使用drawImage绘制猫头、鱼、鱼骨
- 三、游戏开始与结束界面,以及主窗口的按钮
- 1、开始游戏
- 2、游戏速度设置
- 3、猫咪选项设置
- 4、结束游戏
- 5、窗口中的按钮:暂停/开始、重来/退出
- 四、游戏背景音乐
(由于搜寻图片素材、以及在对素材选择的纠结等细节上花费的时间过多,始终对成品不太满意,所以这个实验项目完成得较慢,完全做完才开始进行博客的编写。)
实验内容
1、实现贪吃蛇游戏基本功能,屏幕上随机出现一个“食物”,称为豆子,上下左右
控制“蛇”的移动,吃到“豆子”以后“蛇”的身体加长一点,得分增加,“蛇”碰到边界或,
蛇头与蛇身相撞,蛇死亡,游戏结束。为游戏设计初始欢迎界面,游戏界面,游戏
结束界面。
2、进行交互界面的设计,要有开始键、暂停键和停止退出的选项。对蛇吃到豆子进
行分值计算,可以设置游戏速度,游戏音乐等拓展元素。
编程语言以及开发环境的选择
和上一个项目一样,开发环境依然选用PyCharm,编程语言选用Python。
实验思路(游戏设计)
为了更有创意,在这个游戏中,我将贪吃蛇改为贪吃喵,制作了一只吃鱼的小猫,每吃到一条鱼,身后就多跟一个鱼骨。
一、游戏的逻辑设计
准备工作:
1)定义一个string用来存放猫头位置;
2)定义一个string用来存放鱼的位置;
3)定义一个列表用来存放猫头和鱼骨的位置;
4)定义一个direction来存放猫前进的方向;
5)定义一个score用来计分;
6)定义一个speed用来设置计时器的时间间隔,初始默认值是500ms;
7)定义两个String分别存放猫头和死亡猫头图片的路径。
1、猫头的生成
1)调出背景音乐;
2)随机选取猫头的行与列,生成猫头位置;
3)把猫头位置写入坐标列表中;
4)随机选择猫头前进的方向;
5)调用生成鱼的方法。
2、鱼的生成
1)随机选取鱼的行与列,生成鱼的位置;
2)若随机生成的鱼的位置不在猫头和鱼骨的坐标列表中,则返回鱼的位置,否则重新生成。
3、猫头和鱼骨的移动
此函数由QTimer的timeout函数触发
1)根据direction的值,猫头的行或列相应地+1或-1,并得到猫头坐标;
2)判断是否吃到鱼:
- 若吃到鱼了:
· 鱼骨位置不变,在列表最前面插入猫头位置;
· 分数score加10;
· 调用生成鱼的方法,生成下一条鱼。 - 若没吃到鱼:
①若猫头和鱼骨没有相撞且猫头没有出界:
· 移动所有鱼骨,即所有坐标等于它的前一个坐标;
· 更新猫头位置,即将新的猫头坐标放在坐标列表索引为0的位置上。
②若猫头和鱼骨相撞或猫头出界,则调用GameOver,游戏结束。
4、按下键盘,改变方向
对QWidget中keyPressEvent方法的重写
1)按下 W 表示向上,direction = 0;
2)按下 S 表示向下,direction = 1;
3)按下 A 表示向左,direction = 2;
4)按下 D 表示向右,direction = 3;
(由于使用上下左右按键时,容易被之后设置在界面上的按钮干扰到,上下左右键去控制按钮,而不再控制猫头移动了。不想深究这个问题,所以直接用WSAD表示上下左右。)
二、主窗口的绘制
使用QPainter进行绘制
1、使用drawImage显示背景图片
2、使用drawLine绘制行线和列线
3、使用drawText显示分数
4、使用drawImage绘制猫头、鱼、鱼骨
定义一个索引:index = 0,表示坐标列表的索引,为0时画猫头,大于0时画鱼骨。遍历坐标列表:
1)若猫头没出界且没有与鱼骨相撞,则画猫头和鱼骨,画正常猫头和鱼骨;
2)若猫头出界了或与鱼骨相撞,则画死亡猫头和鱼骨;
3)画鱼。
三、游戏开始与结束界面,以及主窗口的按钮
1、开始游戏
1)开始游戏消息框的大小和样式设置;
2)click to start按钮的设置;
3)速度选项下拉框,设置Low、Middle、High三个速度选项,更改时触发speedChanging方法;
4)猫咪选项下拉框,有五种猫咪可选,更改时触发catChoosing方法;
5)退出游戏开始消息框,进入游戏主界面,调出背景音乐,生成猫头,游戏开始。
2、游戏速度设置
此方法由开始游戏中的速度下拉框的currentIndexChanged方法触发,由currentIndex()传递下拉框选中的项目的索引。
1)索引为1时,表示下拉框选中Low,speed设置为500ms;
2)索引为2时,表示下拉框选中Middle,speed设置为300ms;
3)索引为3时,表示下拉框选中High,speed设置为200ms;
若此方法未被触发,说明speed为默认值,500ms。
3、猫咪选项设置
此方法由开始游戏中的猫咪下拉框的currentIndexChanged方法触发,由currentIndex()传递下拉框选中的项目的索引。与游戏速度设置方法类似,判断传递过来的索引值,并设置相应的猫头图片和死亡猫头图片。
若此方法未被触发,说明head_pic和dead_pic为默认值,都是英短猫的对应图片。
4、结束游戏
1)背景音乐停止;
2)结束游戏消息框的大小和样式设置,并显示游戏得分;
3)设置 Retry 和 Exit 两个按钮;
4)若点击 Retry,则退出消息框,回到游戏主界面,调用生成猫头的方法,游戏开始;若点击 Exit,则退出程序。
5、窗口中的按钮:暂停/开始、重来/退出
1)点击暂停按钮则触发windowPause方法:计时器停止,暂停播放音乐;
2)点击继续按钮则触发windowContinue方法:计时器重新开始计时,继续播放音乐;
3)点击退出按钮则退出程序;
4)点击重新开始则重新生成猫头,游戏重新开始。
四、游戏背景音乐
使用pygame.mixer.music对音乐进行控制。
——2020/12/16(殷越)
软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)相关推荐
- 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(代码实现)
软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(代码实现) 类变量的定义以及类的初始化__init__ 一.游戏的逻辑 1.猫头的生成 2.鱼的生成 3.猫头和鱼骨的移动 4.按下键盘,改变方向 二.主窗 ...
- 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(成品展示)
软件实习项目2--贪吃喵(猫吃鱼版贪吃蛇)(成品展示) 成品展示 1.开始游戏界面 2.游戏主界面 3.结束游戏界面 视频演示 成品展示 1.开始游戏界面 速度选择: 猫咪类型选择: 2.游戏主界面 ...
- 软件实习项目4——校园一卡通管理系统(成品展示)
软件实习项目4--校园一卡通管理系统(成品展示) 成品展示 1.登录界面 2.密保验证 3.重置密码 4.主界面 视频演示 成品展示 1.登录界面 2.密保验证 3.重置密码 4.主界面 1)学生基本 ...
- 【训练4】猫吃鱼,狗吃肉(匿名内部类)
[训练4]猫吃鱼,狗吃肉 参照下面的代码,创建Animal类的匿名子类对象,重写eat()方法,执行该方法后会在控制台打印"猫吃鱼,狗吃肉"字样. /*[训练4]猫吃鱼,狗吃肉* ...
- 【使用java swing制作简易贪吃蛇游戏】软件实习项目二
一.项目准备 需求分析: 实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子,上下左右控制"蛇"的移动,吃到"豆子"以后" ...
- 软件实习项目二:贪吃蛇的游戏开发
目录 一.实验内容: 二.实验准备 三.程序代码 四.成果展示 一.实验内容: 1)实现贪吃蛇游戏基本功能,屏幕上随机出现一个"食物",称为豆子.玩家能利用上下左右键控制" ...
- Java主人喂猫吃鱼的实验总结,小猫吃鱼的作文4篇
小猫吃鱼的作文4篇 小猫吃鱼的作文1 夏天的一个星期天的早晨,万里晴空,骄阳似火.一只好看的小花猫肚子饿了,到野外找食吃.它来到小河边,看到河边的老槐树下拴着一条狗,黑黑的绒毛,四肢雪白,长长的尾巴往 ...
- JavaScript实现猫吃鱼小游戏
贪吃猫小游戏 作为一名前端人员,撸猫我决定使用面向对象的方式书写贪吃猫小游戏,灵感来自有贪食蛇小游戏. 我们可以把整个游戏看成是一个游戏类,游戏类可以有各种各样的属性. 我们可以把贪吃猫中的猫作为一个 ...
- python入门小项目 | 开发一个《小猫抓鱼》小游戏
小猫抓鱼 开发工具 讲解部分 一.游戏原理 二.游戏逻辑 三.重点代码实现 开发工具 python3.6.4 第三方库: pygame,random 讲解部分 一.游戏原理 游戏原理很简单,和接水果的 ...
最新文章
- 进程状态控制-进程创建
- vue手机端回退_华为官方教程:以 P40 为例,鸿蒙 OS 2.0 Beta 版本回退到 EMUI 11 稳定版...
- 导入os模块执行文件和目录管理操作
- 云调用,小程序鉴权正确姿势
- JS 常用函数二(改变HTML样式)
- Delphi通过Map文件查找内存地址出错代码所在行
- ps aux 中的状态说明
- Spring容器启动后注入service到Servlet并自动执行
- 用VB.net编写的Windows服务管理程序(堪称经典)全部源代码
- Zcash钱包(ZEC钱包)官方客户端常见命令实测(一)
- 这些单晶XRD测试问题你了解吗?(一)
- 身份证编号前六位对应地区(上)
- idb 怎么回复mysql_mysql中的.idb文件 怎么正常显示
- 蓝牙音乐和导航语音播放混音卡顿问题
- 美的集团的命,智能家居来续?
- 手机照片删了怎么恢复
- 从大厂裸辞后,面阿里、字节全都挂掉,连货拉拉都不要自己...
- 在网页项目中集成扫码枪设备,实现二维码扫码识别实战
- 用Java实现的eChat聊天服务器
- 今日干货|如何自学视频剪辑(自学视频剪辑容易吗)
热门文章
- ISP—图像调试实习生(第二天)
- 乡村老师网络计算机培训日志,乡村教师网络研修心得体会
- 每一个数据分析师都要掌握的方法:多维度分析法
- matplotlib绘制多维度分类散点图
- 黑龙江移动新魔百盒M411A_2+8_S905L3A_线刷固件包
- kubernetes存储:local,openEBS,rook ceph
- 淘宝API 淘宝链接获取解析获取商品id
- 【Spring Web教程】SpringBoot 实现一应用多Tomcat容器
- 概述史:五胡十六国过这么乱的历史怎么可能搞得懂?6000字短文帮您整个清清楚楚...
- [HNOI2006]鬼谷子的钱袋