c++大作业,模拟实现传统rpg游戏口袋妖怪(c++ + qt)

  1. 详情

大一下学期学习了c++这门课程,同时得知了qt这个图形界面编程,所以自学了qt模拟实现了传统的rpg游戏口袋妖怪,由于是自学和图片等资源的缺少,所以代码实现并不完整,有一部分构想都还未实现(比如战斗界面,草丛遇怪,人物行走动画,碰撞检测,淡入和淡出等),总代码量在6000行+,下面看一下具体执行图片。

  • 类图及流程图

类图: 

流程图:

  •  基本功能的实现原理

1 系统选题及功能简介

本游戏借鉴经典的rpg游戏口袋妖怪,搭配qt实现了开始游戏到注册再到地图人物移动及战斗界面的一系列操作,全部操作由键盘控制。

2 系统方案设计

本游戏共分为五个窗口,游戏全部操作由键盘控制

  1. 利用大量qt窗口类的成员函数和键盘事件实现窗口之间的交互。利用文件操作保存主角姓名等信息。
  2. 利用自定义信号和自定义槽在窗口之间传输变量,如设置名字时按下确认键子窗口向父窗口传输名字。
  3. 利用样式表setstylesheet对窗口以及文本框和显示框进行美化,同时实现无规则按钮。
  4. 重写绘图事件实现对窗口图片的绘制,重写键盘事件实现键盘操控游戏
  5. 创建角色类继承QPushButton类,用于创建主角以及npc等不规则人物。
  6. 窗口文字由QLabel类对象显示,所需文字用QMap容器存储。
2.1基本设计思路

Pokemon类,startconversation类,setname类,scene1类,battel类,Pokemon1类,Protagonist类

  1. 主要功能实现

窗口交互:整个系统的各个窗口,采用重写绘图事件paintEvent()来实现各个窗口图片的绘制,对于需要更新图片的窗口采用调用update()函数刷新painEvent函数,实现图片的对应变化。窗口的变化采用在父窗口创建子窗口的对象并设为私有成员,在需要更改窗口时调用hide()函数和show()函数,利用信号和槽或直接更改窗口,创建子窗口对象时将父窗口的this指针传参,在子窗口调用this->parentWidget()->show();函数返回父窗口。键盘控制则通过重写键盘事件keypressevent和keyreleaseevent,实现键盘控制窗口。

媒体音乐:使用了QMediaPlayer 类QAudioOutput类,将音频输出设备和QMediaPlayer相关联在调用这两个类中的成员函数,实现音频文件的播放和停止。

控件:代码中使用的较多的为QPushButton类和QLabel类,通过设置样式表setstylesheet()函数,设置不规则图形按键,以及文本框的颜色边框类型等,使用QFont类设置字体的样式。在代码中调用move函数实现控件的移动。

小动画:重写定时事件timeevent(),使用定时器实现小动画和人物的行走。

设置名字界面:利用四个QPushButton显示界面需要的界面所需要的文字,再利用几个QPushButton来显示各种按钮,利用变量和大量if-elseif判断配合键盘获取选中的文字及删除等功能。

开场对话:利用QLaBel显示所需要的文字,将所需要的语句存于QMap容器中,因为QMap里面的内容都是以对组的形式存在,所以可以又键盘事件获取特定按键的按下及释放,改变特定的变量再利用判断语句执行相应的功能。

人物移动:用键盘上下左右四个键控制人物的移动,人物初始显示在窗口的中间,人物移动就是人物在原地执行图片的变化,而地图根据按键的不同,执行地图的移动。在绘图事件中绘图的位置由两个变量控制,所以地图的移动只需对这两个变量的加减再调用update()函数即可实现上下左右移动,再通过对这两个变量的上下限的判断来控制地图的界限,同时利用这两个变量设置特定的变换图片的位置。再用一个变量来记录当前人物的朝向,在按下键盘时先判断当前人物的朝向与按下的方向键是否相同,若不相同则改变图片,若相同则利用定时器实现人物行走图片的播放(因为素材缺少和实现人物行走有点奇怪,所以实现了向下的行走动画)。

战斗画面:创建了精灵类和主角类来存放信息,因为素材的缺少以及时间的限制,只简单实现了固定宠物固定技能以及固定扣血的定点战斗画面,利用qpushbutton来实现宠物等画面的显示,再利用速度的判断计算出手顺序,利用变量及判断选择功能,对手则通过随机数生成选择战斗技能。

  • 结语

由于代码量较大解释起来较复杂所以,这里就不具体解释了,完整代码在最上面的文档中,或点击下方链接访问我的gitee。需要具体解释的可以评论留言,后面我也会慢慢完善,再上传。

Pokemon/Pokemon · h3/Learning Journey - 码云 - 开源中国 (gitee.com)

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值