基于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

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
【资源说明】 项目大致框架: ``` (1)GEC6818开发板LCD屏幕的初始化 (2)读取BMP图片文件信息,并显示在LCD屏幕上 (3)获取GEC6818开发板输入子事件 (4)判断输入子事件,实现点击功能 (5)打地鼠的基础玩法,多线程实现地鼠的自主出现和消失,记录分数和游戏结束条件判断 (6)主菜单界面 (7)排行榜界面 (8)程序退出 ``` # 项目程序和函数模块: ## (1)项目源码文件: ``` main.c:主函数,实现屏幕的初始化和主界面的加载 thread_pool.c:实现线程池 thread_pool.h:线程池的头文件 whack_mole.c:打地鼠游戏的功能实现 whack_mole.h:打地鼠游戏功能头文件 program:打地鼠游戏可执行程序(开发板) ``` 项目待开发功能: ``` (1)游戏得分(score)和血量(hp)可视化 (2)游戏界面的暂停和退出功能 (3)排行榜可视化 (4)退出功能插入退出成功图片 ``` 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
好的,下面是一个简单的打地鼠小游戏C++代码,使用Qt框架实现: ```c++ #include "mainwindow.h" #include "ui_mainwindow.h" #include <QTimer> #include <QTime> #include <QLabel> #include <QMessageBox> #include <cstdlib> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); setFixedSize(300, 400); // 设置固定的窗口大小 setWindowTitle("打地鼠"); // 设置窗口标题 // 初始化游戏状态 gameStarted = false; score = 0; timeLeft = 30; // 创建计时器 timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(updateTimeLeft())); // 创建地鼠标签 for (int i = 0; i < 9; i++) { QLabel *label = new QLabel(this); label->setPixmap(QPixmap(":/images/mole.png")); label->setGeometry(20 + (i % 3) * 80, 60 + (i / 3) * 80, 60, 60); label->hide(); moles.append(label); } // 更新游戏面板 updateScore(); updateTimeLeft(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::updateScore() { ui->scoreLabel->setText(QString("得分: %1").arg(score)); } void MainWindow::updateTimeLeft() { if (timeLeft > 0) { timeLeft--; ui->timeLabel->setText(QString("剩余时间: %1 秒").arg(timeLeft)); showRandomMole(); } else { // 游戏结束 timer->stop(); QMessageBox::information(this, "游戏结束", QString("你的得分是 %1 分").arg(score)); gameStarted = false; score = 0; timeLeft = 30; updateScore(); updateTimeLeft(); for (int i = 0; i < 9; i++) { moles[i]->hide(); } } } void MainWindow::showRandomMole() { if (!gameStarted) return; // 随机选择一个地鼠 int index = qrand() % 9; QLabel *label = moles[index]; // 如果这个地鼠已经出现了,则重新选择一个地鼠 if (label->isVisible()) { showRandomMole(); return; } // 显示地鼠 label->show(); // 随机选择一个时间,让地鼠消失 int disappearTime = qrand() % 2000 + 1000; QTimer::singleShot(disappearTime, label, SLOT(hide())); // 继续显示下一个地鼠 QTimer::singleShot(qrand() % 1000 + 500, this, SLOT(showRandomMole())); } void MainWindow::on_startButton_clicked() { // 开始游戏 gameStarted = true; timer->start(1000); // 隐藏“开始游戏”按钮 ui->startButton->hide(); } void MainWindow::on_moleLabel_clicked() { // 打中了地鼠 if (!gameStarted) return; score++; updateScore(); sender()->hide(); } ``` 你需要在Qt Creator中新建一个QWidget应用程序工程,然后把上面的代码粘贴到mainwindow.cpp文件中。此外,还需要把一个名为mole.png的图片文件放到工程目录下的images子目录中。运行程序后,点击“开始游戏”按钮即可开始游戏,点击出现的地鼠可以得分。游戏时间为30秒,时间结束后会弹出游戏结束对话框。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值