QT大作业——自制小游戏

article/2025/8/26 16:38:19

The RPGgame with QT

一、 系统架构

在这里插入图片描述
该项目有4个ui组成,其中mainwindow作为项目程序入口,窗口跳转流程为:mainwindow->gamegraph->area_prairrie->playerstastus。

主要游戏功能装载在gamegraph和area_prairrie两个ui中,而该两个ui中,主要功能函数分别装载在gamegraph.h、monster中。

对于RPG游戏,person类主要存储了关于游戏玩家的个人属性,包括攻击力、防御力、HP、LV等基础属性以及装备、称号等高级属性。而monster类则存储了怪物的基础属性、战斗模式、击杀奖励等属性及方法。area_prairrie类则存储一个区域的所有怪物对象,及区域内一些游戏性功能。

二、游戏玩法

首先是开始游戏画面,这里可以选择开始游戏,继续游戏和结束游戏三个选项,点击开始/继续游戏后进入下一个界面——主游戏界面。
在这里插入图片描述
在主游戏界面下,玩家可以选择恢复生命值、前往武器或防具店强化自身属性、出城打怪、保存游戏及退出游戏等功能,如下图所示:
在这里插入图片描述
武器、防具点及旅店与常规游戏一样,这里不再介绍,我们直接看出城即战斗界面:
在这里插入图片描述
如上图所示,出城后,我们可以查看自身状态,点击原处刷怪或继续前进则可以进入战斗状态,战斗过程在本游戏中直接跳过,在下方直接输出战斗结果,如下图所示:
在这里插入图片描述
战斗结束后可以选择是否继续前进,需要注意的是,为了区分难度,这里每一次继续前进遇到的怪物难度都会逐渐增加,直到遇到BOSS,而如果玩家在与怪物对战过程中失败,则游戏结束,如下图所示:
在这里插入图片描述
而如果不继续前进,则可以持续和当前难度水平怪物战斗提升等级,积攒金币,通过购买装备提升自己从而击败怪物,在这过程中,玩家可以随时查看自身状态,如下图所示:
在这里插入图片描述

三、关键算法设计

3.1 战斗

本游戏中,与怪物战斗采用最简单的攻防相抵造成伤害。算法封装在Monster类中,代码如下:

void monster::battle(person &you)
{while (you.HP_now > 0 && HP >0){if(you.DEF+you.have[2] < ATK)you.HP_now -= (ATK - you.DEF-you.have[2]);if(you.ATK +you.have[1] > DEF)HP -= (you.ATK +you.have[1]- DEF);else{QMessageBox box;box.setText("怪物防御力太高了,你打不动它,于是逃跑了!");box.exec();return ;}cout << "你的当前生命值为:" << you.HP_now << endl;cout << "怪物的当前生命值为:" << HP << endl;}if (you.HP_now <= 0){you.gameover();}if (HP<=0){cout << "恭喜你击败了怪物" << endl;cout << "你获得了金币,同时升级了" << endl;you.LVUP(1);you.show_stastus();you.getmoney(money);}
}void monster::BOSS_battle(person& you)
{int MAX=HP;while (you.HP_now > 0 && HP > 0){if(you.DEF+you.have[2] < ATK)you.HP_now -= (ATK - you.DEF-you.have[2]);if(you.ATK +you.have[1] > DEF)HP -= (you.ATK +you.have[1]- DEF);if (HP * 2 <= MAX)ATK = ATK * 1.2;if (HP * 10 <= MAX)ATK = ATK * 1.25;cout << "你的当前生命值为:" << you.HP_now << endl;cout << "怪物的当前生命值为:" << HP << endl;}if (you.HP_now <= 0){you.gameover();}if (HP <= 0){you.LVUP(5);you.show_stastus();you.getmoney(money);}
}

从上述代码中可以看到,游戏采用回合制,每次怪物对玩家造成的伤害=怪物的攻击力-玩家的防御力,而玩家对怪物造成的伤害同理,当有一方生命值先扣为0以下时,另一方获胜。而对于BOSS战,为了提升游戏难度,BOSS战中,Boss的战斗方式多了一个当BOSS血量降至一半以下时,BOSS造成的伤害提升,当血量降至10%以下时,BOSS攻击力再次提升。

3.2 玩家属性的全程使用

在RPG游戏中,玩家的属性在各个游戏环节中均要用到,因此这一大属性的传递是游戏设计过程中的一大重点。

在本游戏中,玩家游戏属性通过一个类对象来存储,而该类对象在第一次开始游戏时初始化,在以后则使用该对象的值进行各游戏功能。在这个过程中,如何在各个窗体之间传递该类对象值则是重中之重。在本游戏中,玩家属性通过QVariant包装,然后通过信号触发SLOT槽函数,将该包装属性传递给下一子窗体,从而实现了类对象的不同窗体间的传递功能。

具体算法如下:

首先对类对象做一个宏定义

Q_DECLARE_METATYPE(person)

接着在窗口构造函数中创建子窗口对象的一个指针变量,然后通过connect函数链接

 area =new area_prairie(this);connect(this, SIGNAL(send_data(QVariant)), area, SLOT(setvalue(QVariant))); // send the message of player to area_prairie

然后在对应窗口跳转功能处发送信号

QVariant variance;
variance.setValue(Player);
emit send_data(variance);//发出信号

接着在子窗口处接受该variance包装,接受函数为connect函数参数内的SLOT函数(定义在子窗体)。

void area_prairie::setvalue(QVariant data)
{person player ;player = data.value<person>();
}

如上便完成了类对象在不同窗体间的传递。而子窗体要将数据传回父窗体算法也大致相同,只是大部分定义需在父窗体定义,如connect函数如下:

connect(area, SIGNAL(send_data(QVariant)),this,SLOT(setvalue(QVariant)) );  //receive the message of player from area_prairie

send_data信号在子窗口定义,SLOT函数在父窗口定义,如法炮制即可。

最后,附上代码的开源地址:Git仓库


http://chatgpt.dhexx.cn/article/xf0vo5T1.shtml

相关文章

webpack + typescript 开发微信小游戏实践

源码地址 微信小游戏版本技术选型使用typescript开发 但是微信小游戏原生不支持 typescript 开发&#xff0c;于是探索一下使用ts开发微信小游戏 1. 创建小游戏 使用测试号&#xff0c;创建一个使用官方示例的小游戏 会生成一个可以直接运行的打飞机小游戏 2. 准备工作 …

小游戏开发引擎CocosCreator

小游戏 六彩跳棋 已经通过审核并且发布了好几天了&#xff0c;对跳棋感兴趣的朋友可以去看看&#xff0c;在微信游戏里搜索 六彩跳棋 &#xff0c;点击 立即玩 吧&#xff01;进去游戏后&#xff0c;需要点击 获取头像昵称 才能得到玩家数据&#xff0c;然后 划动屏幕 选择游戏…

unity开发微信小游戏1

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、准备工作二、官方文档三、WX开发者工具四、获得Appid五、获得AppidError: app.json: app.json六、资源下载失败404总结 前言 最开使用unity3d开发微信小游…

【微信小游戏】微信小游戏开发设置竖屏

微信小游戏开发环境默认横屏&#xff0c;对竖屏游戏非常不方便。 设置竖屏的入口十分隐蔽&#xff0c;以至于一度令我以为不能设置竖屏。 网上也根本搜不到解决方法&#xff0c;经过我的不懈努力&#xff0c;最终还是找到了设置方法。 原本是横屏的 按下面路径设置竖屏 开发…

使用pygame开发一个小游戏

学习了pygame&#xff0c;身为一个IKUN所以&#xff0c;做了一个简单的小游戏。游戏规则是&#xff0c;使用键盘的方向键控制坤坤&#xff0c;当坤坤触碰到篮球&#xff0c;就会爆发出音乐”只因你太美“。代码如下&#xff1a; import random import sys import pygame pygam…

微信小游戏开发教程

微信小游戏开发教程-前言 自18年年初对开发者开放小游戏接口以后小游戏越来越火热&#xff0c;本文就是对小游戏开发的入门教程&#xff0c;希望这篇文章能够帮到想要入门开发游戏的你。 哈哈哈&#xff0c;看到有人说我故意分成好几篇刷PV&#xff0c;改了一下删了两篇&…

支持小游戏开发的“引擎四剑客”

2017年12月28日&#xff0c;微信发布了一款叫“跳一跳”的微信小程序的一个小游戏&#xff0c;无需下载安装&#xff0c;即点即玩&#xff0c;只需要在微信客户端的小程序界面搜索“跳一跳”&#xff0c;点击即可加载进入该游戏玩。游戏小而精&#xff0c;借助于微信巨大的社交…

小程序开发小游戏注意事项

今天研究小游戏开发&#xff0c;总结了一些自己遇到的问题 : 一. 注册appId 用小程序开发的小游戏跟用小程序开发其他项目不是公用的一个appId 如果你现在的小程序账号已经选了别的类目&#xff08;非游戏&#xff09;&#xff0c;那你就需要另外注册一个账号来单独申请小游戏…

【小程序】快来开发你的第一个微信小游戏(详细流程)

&#x1f973; 作者&#xff1a;伯子南 &#x1f60e; 坚信&#xff1a; 好记性不如乱笔头&#xff0c;独乐乐不如众乐乐 &#x1f4aa; 个人主页&#xff1a;https://blog.csdn.net/qq_34577234?spm1010.2135.3001.5421 &#x1f46c;&#x1f3fb; 觉得博主文章不错的话&…

小游戏开发

小游戏开发 1、游戏发展历史 广义&#xff1a;一种有组织的玩耍&#xff0c;一般是以娱乐为目的&#xff0c;有时也有教育目的。在英语中&#xff0c;体育比赛(Game)也是游戏&#xff0c;只要其活动本质带有目的、规则、挑战和互动&#xff0c;我们都可以把其归为游戏。 狭义…

小游戏开发指南及过程中的难点问题

如果仅仅针对个人开发者来讲&#xff0c;要独立开发一款大型游戏几乎无可能&#xff0c;更大成功的可能还是开发一款类似《羊了个羊》这样洗脑的小程序游戏。 所以这里主要论述小游戏开发的情况&#xff0c;也就是小程序游戏&#xff0c;首先从小游戏的开发流程来看&#xff1…

oracle数据库中的注释

oracle数据库中的注释 单行注释-- --这是oracle中的单行注释 SELECT SYSDATE FROM dual; 多行注释/**/ /*这是oracle中的多行注释*/ SELECT 6 6 AS "计算结果" FROM dual;

MYSQL数据库如何写注释

方式一 注意&#xff1a;在写注释时&#xff0c;–与注释之间必须要一个空格 select * from stu -- 注释方式二 注意&#xff1a;这种方式比较随意&#xff0c;加不加空格不影响 select * from t_info #注释select * from t_info#注释select * from t_info # 注释方式三 s…

Idea连接数据库,显示表注释

idea设置显示数据库表名注释 操作步骤&#xff1a; View Apperarance Details in Tree View选上

达梦数据库中的注释的使用

在管理规模较大的数据库时&#xff0c;我们往往需要面对大量的表与视图&#xff0c;与此同时在表与视图中可能会存在着许多的字段&#xff0c;让人难以迅速分辨&#xff0c;不利于对于数据库对象的管理。除了在命名时&#xff0c;对于有意义的表、视图及列&#xff0c;应尽量赋…

Jpa 自动建表的时候在数据库中添加注释。

github地址 本项目可以让 Jpa 自动建表的时候在数据库中添加注释。 为什么做这件事 过去想要让 Jpa 在建表的时候自动添加注释一般需要使用 Column#columnDefinition 属性。示例如下&#xff1a; Column(columnDefinition "INT COMMENT ...") private int unitI…

达梦数据库中迁移过来的数据,在Mysql中批量添加注释,修改注释

一、原因 数据是从达梦数据库中迁移过来的&#xff0c;迁移完成注释丢失 二、方法 利用 information_schema.COLUMNS 这个表 三、执行步骤 1.这是达梦数据库导出的注释2.达梦的数数据库数据导出时是和创建表和索引都在一起&#xff0c;因此需要单独把注释这一块的给提取出…

2021.3.17丨致病菌毒力因子(VFDB)数据库注释

摘要 接到一个常规细菌的组装注释项目&#xff0c;不过客户提出想要获取关于组装结果与病毒之间的联系/按之前的操作&#xff0c;dfast没有病毒相关的数据库&#xff0c;无法满足客户需求。一番查阅&#xff0c;发现大家用这个VFDB数据库进行常规的病毒注释&#xff0c;下面将介…

【TP5】获取数据库注释信息

author&#xff1a;咔咔 wechat&#xff1a;fangkangfk table为表名 $data Db::query(SHOW FULL COLUMNS FROM .$table);

SpringBoot中使用Mybatis逆向工程(实体类含数据库注释)

Mybatis逆向工程&#xff1a;根据创建好的数据库表&#xff0c;生成对应的实体类、DAO、映射文件 文章目录 开发环境1.新建SpringBoot应用2.添加逆向工程插件依赖3.执行逆向生成 开发环境 开发工具&#xff1a;IntelliJ IDEA 2021.3.3 (Ultimate Edition)SpringBoot版本&#…