基于qt的推箱子游戏的设计与实现论文内容摘要:

组件来使用。 槽 用于接收信号,而且槽只是普通的对象成员函数。 一个槽并不知道是否有任何信号与自己相连接。 而且对象并不了解具体的通信机制。 信号与槽的连接 如果这个类是从 QObject 或其子类派生的 ,那么这个 类 就包含了信号和槽。 这是因为 QObject 的 connect() 成员函数是用来实现信号和槽的连接的。 connect(sender, SIGNAL(signal), receiver, SLOT(slot))。 其中 sender 与 receiver 是指向对象的指针, SIGNAL() 与 SLOT() 是转换信号与槽的宏。 特点 : 信号的接收者数量是不受限制的,也就是一个信号可以由多个槽接受。 当信号发射出去以后,没有指定的特定的槽,而是一个接一个的 去调用槽。 多个信号可以连接同一个槽即无论是哪一个信号被发射,都会调用这个槽。 信号直接可以相互连接发射第一个信号时,也会发射第二个信号。 7 应注意的问题 信号与槽机制在使用时也会有一定的危险性,因为这与普通函数的调用是一样的,如果在使用 的过程中不恰当,那么,就可能造成程序崩溃,或者在执行的时候进入死循环。 所以,为了避免这些危险,再定义槽函数时,不好出现间接循环,比如,不要用槽在发射接收到的相同的信号。 当一个信号与多个槽建立了连接,那么当这个信号发射时,与之建立连接的槽都会被随机的激活。 宏定义不能用在 signal 和 slot 的参数中。 信号和槽的参数个数与类型必须一致。 8 3 环境搭建 这个项目课题是在 Microsoft Visual Studio 2020 + 环境搭建下完成的 搭建过程如下: 首先要 安装 Microsoft Visual Studio 2020 软件 ; 然后安装 Qt for Windows 32bit, 路径是可以随便选择的,但是路径名称最好不要包含英文 ; 其次就是 安装 Visual Studio Addin for Qt5; 再安装的步骤住,一直默认选项就可以。 前面的软件安装完成后,就是设置 系统环境变量 ,在系统环境变量 中添加 QTDIR,安装 路径 是 “ \msvc2020”,还要 在系统环境变量中添加 QtANGLE,安装路径是“ \msvc2020\include\QtANGLE”; 现在 打开 Microsoft Visual Studio 2020, 在软件的菜单栏就会 多一项 QT5选项 ,点击 QT5 下的 qt option, 然后 把第 四 步 中添加的环境变量添加 进去。 最后测试是否成功。 9 4 推箱子游戏的总体设计 推箱子 的 简介 这个游戏来源于日本,它是日本的一个古老的游戏。 古人们通过这个游戏锻炼大脑的逻辑思考能力。 游戏的大概内容是,在一个指定的很狭窄的区域范围内,游戏者通过将所有箱子移动到指定的位置,获取胜利。 但是,如果游戏者稍有不小心就会无法移动箱子或者走动的通道就会被卡住,因此,这个游戏有很多的技巧在其中,需要游戏者通过逻辑思考去完成游戏。 在游戏开始后,游戏中会出现一个小人,玩家通过利用方向键移动小人,并推动箱子到游戏指定的位置。 推箱子游戏所实现的 功能 第一 在运行时,会显示主界面以及菜单栏。 菜单栏的作用主要是为玩家提供帮助以及供玩家游戏进度的选择。 主界面包括了开始的界面,当前关卡的显示,当前步数的显示等。 第二 能够让玩家自由的选择关卡,本游戏总共设置了 3关,可以任由玩家自由选择。 同时,还设置了选择上一关卡和选择下一关卡的功能。 玩家在玩的过程可以随意切换。 第三 在玩的过程中,如果玩家想重新开始,那么该游戏也提供了此功能,只需要点击重新开始,玩家就可以重新玩该游戏。 当然,如果不想玩了,你可以点击结束游戏功能,游戏会回到主界面。 第四 在游戏的过程中,游戏会自动 记录当前的关卡,可以提醒玩家当前的关卡。 在玩家移动小人的过程中,游戏的右面有自动记录小人移动步数的记录器,提高玩家竞争性。 第五 自动识别胜负功能,当玩家将所有箱子移动到指定的位置后,系统会自动识别游戏是否完成。 如果完成,那么会判别是否所有的挂卡都已经通过,如果都通过,那么会提示闯关成功。 如果没有,会自动进入下一关。 第六 能实现键盘支持功能。 该游戏能接受键盘上的信息。 根据玩家按得方向键的不同,进行小人的移动。 10 第七 有帮助菜单帮助玩家。 该菜单主要是帮助玩家如何进行游戏以及对该游戏简要介绍。 推箱子游戏系统的设计 游戏的功能架构 在设计推箱子游戏时,根据推箱子游戏的基本要求以及做出的功能,进行游戏结构的设计,游戏的功能框架如图 41 所示 图 41 游戏的功能框架 图 程序结构设计 在这个游戏中,共有 3个类和 3个模块组成。 第一 主界面对话框类,这个对话框主要是负责主界面,菜单,以及各个窗口类对象的创建和调用等的处理。 第二 键盘操作模块。 这个模块主要是通过键盘操作可控制小人的移动,以及对关卡的选择和设置。 第三 关口选择对话框类。 主要提示用户关卡的选择和关卡的设置。 主界面显示 功能 选择关卡功能 键盘操作功能 帮助功能 游戏胜负判断功能 关卡显示 功能 步数 计数功能 重新开始 功能 推箱子游 11 第四 地图的绘制模块。 在这个模块中,通过这个模块,可以绘制地图的形成。 并进行相应的解析工作。 第五 帮助对话框类。 这主要是帮助玩家了解游戏。 让玩家了解游戏的来历,以及游戏如何操作。 第六 游戏的规则模块。 主要负责游戏规则的判断。 42 程序设计结构图 维护设计 该项目是一个经典的小游戏,在开发该游戏的时候时刻注意开发的每个细节,防止出现差错。 开发完成后,基本上不可能在出现大的程序错误,所以,后期的主要维护就是用户的体验以及在用户使用过程中出现的错误,把这些解决就可以了。 游戏界面的设计 主界面 推箱子主界面设计代码: 推箱子游戏 三个 类 三个模块 关卡 选择对话框类 帮助对话框类 游戏的规则 模块 主界面对话框 类 键盘操作模块 地图绘制模块 12 QpushBox::QpushBox(QWidget *parent): QMainWindow(parent) { createMenu()。 //创建菜单函数 createAction()。 //创建按钮函数 widget=new QWidget。 QPalette palette = widgetpalette()。 (QPalette::Background,QBrush(Qt::gray))。 //背景设为灰色 widgetsetPalette(palette)。 widgetsetAutoFillBackground(true)。 setCentralWidget(widget)。 levelLabel=new QLabel(QStringLiteral(当前关卡 ))。 //设置字号 QFont ft。 (14)。 //设置字体大小 levelLabelsetFont(ft)。 //设置颜色 QPalette pe。 (QPalette::WindowText,Qt::black)。 levelLabelsetPalette(pe)。 stepLabel=new QLabel(QStringLiteral(当前步数 ))。 //创建步数标签 stepLabelsetFont(ft)。 //设置格式 stepLabelsetPalette(pe)。 levelLCD=new QLCDNumber。 //声明一个关卡变量 levelLCDsetSegmentStyle(QLCDNumber::Flat)。 stepLCD=new QLCDNumber。 //声明一个步数变量 stepLCDsetSegmentStyle(QLCDNumber::Flat)。 restartButton=new QPushButton(QStringLiteral(重新开始 ))。 connect(restartButton,SIGNAL(clicked()),this,SLOT(restartGameSlot()))。 restartButtonsetEnabled(false)。 //让重新开始按钮失效 QVBoxLayout *rightLayout=new QVBoxLayout。 13 rightLayoutaddSpacing(10)。 rightLayoutaddWidget(levelLabel)。 //关卡标签垂直部署 rightLayoutaddWidget(levelLCD)。 rightLayoutaddSpacing(30)。 //设置空格 30 // QImage *image=new QImage(./)。 //加载图片 QLabel *label=new QLabel(this)。 //实例化图片 labelsetGeometry(0,0,500,500)。 labelsetPixmap(QPixmap::fromImage(*image))。 rightLayoutaddWidget(label)。 // rightLayoutaddSpacing(30)。 rightLayoutaddWidget(stepLabel)。 //将步数标签加到窗口 rightLayoutaddWidget(stepLCD)。 rightLayoutaddWidget(restartButton)。 rightLayoutaddSpacing(30)。 mainmap=new mappaint。 QHBoxLayout *mainLayout=new QHBoxLayout。 //水平布局设置 mainLayoutaddWidget(mainmap)。 mainLayoutaddLayout(rightLayout)。 widgetsetLayout(mainLayout)。 mainmaplevelNow=0。 //初始化关卡为 0 mainmapstepNow=0。 //初始化步数为 0 mainmapman_x=0。 mainmapman_y=0。 mainmapBeginOrEnd=1。 mainmapupdate()。 //重新绘制图片 boxNum=0。 levelLCDdisplay(mainmaplevelNow)。 stepLCDdisplay(mainmapstepNow)。 14 createMap()。 //程序整体设定 setWindowTitle(QStringLiteral(推箱子小游戏 LQN 设计 ))。 widgetsetFocus()。 statusBar()showMessage(QStringLiteral(欢迎进入推箱子小游戏。 ))。 } 推箱子的主界面如图 43 所示 图 43 推箱子游戏主界面 图 主界面的背景以纯灰色进行覆盖,在左面用一张推箱子的图片作为主要的界面,让用户一眼就知道这是什么游戏。 右边分别有当前关卡的计数表,当前步数的计数表,以及一个重新开始按钮。 在该游戏中,用草地进行铺设场地,墙是用灰色的石头 围成的。 小人用的卡通人物蓝精灵,在图 44中放置了三个箱子,三个小球,三个小球作为箱子的指定地点。 15 图 44 游戏界面图 菜单结构 菜单结构如图 45所示 图 45 菜单结构图 关卡 选择 关卡的代码 设计 如下。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。