打地鼠游戏的设计与实现
在生活节奏不断加快的现代社会,轻松的益智游戏对缓解生活压力调节情绪具有重要意义,而打地鼠这一款游戏正好符合大众的心理。为了迎合众多用户的需求,开发了这款叫做打地鼠的小游戏,并且这款小游戏适合社会各阶层的人士,此外,它还有很强的娱乐性和交互性。
尽管现在市面上存在的游戏版本很多,可是打地鼠的市场还是很大的,原因就在于它能引人入深,爱不释手。随着游戏速度的逐渐加快,其刺激性也更强。可以说,游戏的优势不仅在于简单易行,而且在于他能很快顺利的运行。对于那些在外忙忙碌碌的人们,想让他们花费大量的时间在大型游戏上显然是不可能的,可是小游戏却能刚好迎合他们的需求。
本设计以C++为基础,通过Qt来设计实现,首先简单介绍了开发工具,然后从需求分析,总体设计,详细设计与实现等方面介绍了打地鼠游戏的设计与实现过程,最后给出了打地鼠的运行与测试情况。
1.绪论
1.1 背景
随着信息技术的飞速发展,5G时代已经到来。游戏也迎来了新的发展,现在电脑手机的功能已不仅仅是简单的工作、交际了,工作之余的娱乐享受也相当的重要。众多的用户都认为小型的休闲游戏是最受欢迎的。因为小型游戏非常方便,随时都可以玩。这些游戏可以缓解人们的工作压力,同时调动了人们的思维。我们开发的这款打地鼠小游戏,足以满足大多数用户的需求,并且与现在的手机规模相符合。
1.2 现状
现在越来越多的人注重精神层面的享受,游戏的出现让很多人喜欢上这一娱乐方式,游戏的娱乐可以带给人们轻松与欢笑,在电脑手机普遍后,这个现象更是明显。人们开始在网络上寻求娱乐方式,在空闲时间玩玩游戏打发时间,足不出户就可以与其他人交流。于是打地鼠这款游戏出现了,这款游戏简单操作简单,容易上手,毫不费力,对于时间少的人也是如此,玩玩小游戏,让生活变得轻松。
1.3 设计目标
本游戏需要满足以下几点要求:
(1) 打地鼠游戏界面设计
(2) 点击start、pause、stop按钮实现相应的功能。
(3) 实现地鼠随机出现并击中显示相应的分数。
(4) 实现游戏运行背景音乐
2.相关技术
此次项目中用到了C++、Qt。Qt是一个跨平台的C++应用程序开发框架,它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt使用标准的C++和特殊的代码生成扩展(称为元对象编译器Meta Object Compiler, moc)以及一些宏。
3、系统分析
3.1.可行性分析
打地鼠游戏是一款简单的大众游戏,自从计算机实现以来,深受广大电脑玩家的喜爱,是一款家喻户晓的小游戏。
打地鼠的核心是通过定义地鼠按钮类,通过不同按钮进行控制游戏的进行,点击start按钮,随机产生地鼠,并且上下自由运动,锤子击中地鼠,地鼠迅速归洞,点击pause按钮,游戏暂停,界面保持暂停状态,点击start时地鼠继续运动,游戏继续进行,点击stop按钮,游戏结束,所有地鼠迅速归洞并且界面归为初始状态。
本次设计我将运用c++语言来完成。C++是一种面向对象的多范型语言,可以将面向对象的模型映射成为C++ 的结构。 C++面向对象的特性带来了全新的编程方法,这种方法是为应付复杂程度不断提高的现代编程任务而设计的。C++程序能够运行得很快,可直接操作系统资源,保持机器层次的实现细节。
3.2系统需求分析
3.2.1功能需求
本系统主要是完成打地鼠游戏的基本操作。用户可以自己练习和娱乐。本系统需要满足以下几点要求:
(1)地鼠随机出现。
(2)击中地鼠显示相应分数。
(3)设置游戏倒计数,提醒玩家游戏结束。
3.2.2性能需求
本软件在设计方面本着方便、实用及娱乐性高的宗旨,在对界面进行设计的过程中,始终坚持清晰明了,在性能方面能够实现效率高,不易出错等优点。
3.2.3界面需求
游戏主界面模块:主要包括游戏图形区域界面、游戏开始按钮、暂停游戏按钮、关闭按钮、帮助按钮、显示分数、游戏结束倒计时。游戏的主界面力求美观,爽心悦目。
游戏控制模块:主要完成控制游戏的开始、暂停、退出等功能,这部分做到易懂、易操作而且准确率高,不易出错。
游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏分数的显示、地鼠按钮、游戏开始按钮、暂停游戏按钮、退出游戏按钮。这样才能给玩家一个良好的游戏氛围,从很大程度上决定了玩家对游戏的兴趣问题。
游戏控制模块是游戏的中心环节,主要完成控制游戏的开始、暂停、退出等功能。为了能够给玩家一个很好的游戏环境,这部分做到易懂、易操作。
4.总体设计
4.1 系统功能模块设计。
如图1。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mKz5XKI0-1687954900313)(file:///C:/Users/Morii/AppData/Local/Temp/msohtmlclip1/01/clip_image002.gif)]
图1
本游戏将从页面需求(游戏名称、计分器、计时器、背景图、关闭按钮),地鼠按钮(鼠标移动事件,鼠标按下事件,鼠标放开事件,地鼠上下移动),鼠标动作按钮(当鼠标在地鼠按钮上移动和放开时,画个上扬的锤子,当鼠标在地鼠按钮上按下时,画个下落的锤子)以及分数显示(规定地鼠类型,分别给每只地鼠赋不同的分值,并记录总分在屏幕上显示)四个部分进行设计与实现。
5.系统详细设计与实现
5.1 开发环境的搭建
1、设备:windows10
2、支持软件:Qt
Qt是一个跨平台的C++应用程序开发框架,它提供给开发者建立图形用户界面所需的功能,对于开发打地鼠这款小游戏非常适合。
5.2 打地鼠的设计与实现
5.2.1 窗体设计。如图2:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UBP8gDnt-1687954900314)(file:///C:/Users/Morii/AppData/Local/Temp/msohtmlclip1/01/clip_image004.gif)]图2
5.2.2 Start按钮功能实现
//点击开始按钮 定时器开始 老鼠开始运动
void Widget::on_startBtn_clicked()
{
//先判断游戏状态,进而进行操作
//1.状态判断
// 游戏运行过程中点 start按钮,啥都不干
if(gameState == 1)
return;
//2.游戏暂停状态点 start按钮,做以下操作
if(gameState == 2){
//找到暂停的按钮,让其恢复运行(开启其定时器)
//恢复其暂停状态为pauseState=false
for(int i = 0; i < 8; i++){
MyMouseBtn *mouseBtn = qobject_cast<MyMouseBtn *>(btnGroup->button(i));
if(mouseBtn->getPauseState() == true){
mouseBtn->startTimer();
mouseBtn->setPauseState(false);
}
}
//启动gameTimer定时器 继续随机产生老鼠
gameTimer->start();
}else if(gameState == 0){
//3.游戏尚未开始情况(初始、上一局已结束) 操作
//重新显示总分值
ui->scoreLcd->display(totalScore);
//开启gameTimer定时器
gameTimer->start();
}
//修改游戏状态为运行
gameState = 1;
//开启倒计时定时器
countTime->start();
}
5.2.3 Pause按钮功能实现
//点击暂停按钮 定时器暂时关闭 老鼠暂停运动
void Widget::on_pauseBtn_clicked()
{
//游戏状态判断
// 游戏已经暂停 或 游戏未开始,点击都无效
if(gameState == 2 || gameState == 0)
return;
//游戏正在运行中,相关处理
//1.暂停 gameTimer的定时器
gameTimer->stop();
//2.暂停正在活动的按钮的定时器,并修改其暂停标志
for(int i = 0; i < 8; i++){
MyMouseBtn *mouseBtn =qobject_cast<MyMouseBtn *>(btnGroup->button(i));
if(mouseBtn->isActive()){
//暂停其定时器
mouseBtn->stopTimer();
//另外再修改其暂停标志为 true
mouseBtn->setPauseState(true);
}
}
//3.修改游戏状态为 pasue
gameState = 2;
//5.关闭倒计时定时器
countTime->stop();
}
5.2.4 Stop按钮功能实现
点击stop按钮,终止游戏,功能分析:
\1. 主窗体 关闭gameTimer定时器 每隔0.5s不会再 随机出老鼠
\2. 主窗体 总得分恢复默认值0
\3. 按钮组老鼠
具体实现:
//点击停止按钮 游戏结束
void Widget::on_stopBtn_clicked()
{
//判断游戏的状态
//如果游戏尚未开始,点击按钮无效
if(gameState == 0)
return;
//如果游戏正在运行或暂停 所做操作如下
//1.将总分值恢复为0
totalScore=0;
//2.关闭游戏gameTimer定时器
gameTimer->stop();
//3.游戏结束
for(int i = 0; i < 8; i++){
//提取所有按钮
MyMouseBtn *mouseBtn =
qobject_cast<MyMouseBtn *>(btnGroup->button(i));
//让所有老鼠回洞里
mouseBtn->gameOver();
//修改所有按钮的pauseState = false
mouseBtn->setPauseState(false);
}
//4.修改游戏状态
gameState = 0;
//5.关闭倒计时定时器 重置leftTime值
countTime->stop();
leftTime = 60;
//倒计时定时器显示零
ui->timeLcd->display(0);
}
5.2.5 分数显示实现
//绘制得分函数
void Widget::getAndDisplayScoreSlots(int s)
{
//qDebug() <<“分数为:” <<s;
//累加总分值
totalScore +=s;
//显示总分
ui->scoreLcd->display(totalScore);
}
6.系统测试
6.1测试方案与实例
(1)在Qt里面进行编译,编译无误后,接下来进行下一步测试。
(2)在所创建的窗口中测试start、pause、stop以及时间和分数显示这些功能是否与设计的匹配。
6.2测试结果及软件可靠性分析
(1)测试编译器显示无误,会出现如下界面。如图3。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dWUSNaYN-1687954900314)(file:///C:/Users/Morii/AppData/Local/Temp/msohtmlclip1/01/clip_image006.gif)]
图3
(2)测试start按钮功能。如图4。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8mgdZsSD-1687954900315)(file:///C:/Users/Morii/AppData/Local/Temp/msohtmlclip1/01/clip_image008.gif)]
图4
(3)测试pause。如图5。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-irKQNFx2-1687954900315)(file:///C:/Users/Morii/AppData/Local/Temp/msohtmlclip1/01/clip_image010.gif)]
图5
(4)测试stop按钮功能。如图6。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mOzJR3E1-1687954900316)(file:///C:/Users/Morii/AppData/Local/Temp/msohtmlclip1/01/clip_image012.gif)]
图6
(5)显示分数和倒计时。如图7。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sgmiRnD7-1687954900316)(file:///C:/Users/Morii/AppData/Local/Temp/msohtmlclip1/01/clip_image014.gif)]
图7
转存中…(img-irKQNFx2-1687954900315)]
图5
(4)测试stop按钮功能。如图6。[外链图片转存中…(img-mOzJR3E1-1687954900316)]
图6
(5)显示分数和倒计时。如图7。[外链图片转存中…(img-sgmiRnD7-1687954900316)]
图7