基于C++和QT打地鼠游戏的设计与实现#原创

打地鼠游戏的设计与实现

在生活节奏不断加快的现代社会,轻松的益智游戏对缓解生活压力调节情绪具有重要意义,而打地鼠这一款游戏正好符合大众的心理。为了迎合众多用户的需求,开发了这款叫做打地鼠的小游戏,并且这款小游戏适合社会各阶层的人士,此外,它还有很强的娱乐性和交互性。

尽管现在市面上存在的游戏版本很多,可是打地鼠的市场还是很大的,原因就在于它能引人入深,爱不释手。随着游戏速度的逐渐加快,其刺激性也更强。可以说,游戏的优势不仅在于简单易行,而且在于他能很快顺利的运行。对于那些在外忙忙碌碌的人们,想让他们花费大量的时间在大型游戏上显然是不可能的,可是小游戏却能刚好迎合他们的需求。

本设计以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

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值