Qt编写魔塔小游戏

本文详细介绍了使用Qt框架开发的一款简单魔塔小游戏的过程,包括游戏内容设计、逻辑实现、具体代码实现和注意事项。游戏包含角色、怪物、地图、主界面等多个类的定义,实现了角色移动、战斗、地图更新等功能,并给出了部分游戏效果截图。

目录

一.游戏大致内容

        1.玩家角色

        2.怪物

        3.可触发的物品

        4.不可触发的物品

        5.地图

        6.(玩家与怪物的技能)

二.实现逻辑

三.具体实现

1.角色类声明

2.怪物类声明

3.地图类声明

4.主界面声明

5.玩家角色的构造

6.怪物的构造

7.地图的构造

8.主界面构造

9.开始按钮的槽函数与绘图事件

10.键盘事件处理

11.初始化地图界面

12.刷新地图界面

13.角色移动处理

14.运算战斗结果

15.边栏角色信息

16.主函数

四.注意事项

        1.头文件

        2.图片与音乐文件

        3.项目整体

五.游戏效果

        1.开始界面(简陋)

        2.第一层(新手大剑)

         3.第二层(开始正常游戏)

        4.后续层

        5.奖励层

        6.最后一层(暂时还没写结束结算)


最近系统学习了Qt的程序界面开发,所以用Qt尝试写了一个简单的魔塔小游戏。

下述括号内内容暂未编写

一.游戏大致内容

        1.玩家角色

                玩家角色拥有:角色名字,血量,攻击,防御,金钱,钥匙,剑,盾,(技能,经验,等级)

                通过玩家角色保存层数

        2.怪物

                怪物拥有:怪物名字,血量,攻击,防御,金钱,(技能,经验,等级)

                怪物名字不方便在代码中使用,所以给怪物添加一个“类型”变量

        3.可触发的物品

                可与玩家互动的物品

                如:血瓶,(蓝瓶),钥匙,宝石,剑,盾,门等

        4.不可触发的物品

                地面,墙等

        5.地图

                初始地图与当前地图

        6.(玩家与怪物的技能)

                (技能拥有等级,加成,蓝耗等属性)

       

二.实现逻辑

        除去暂时不想写的内容,将玩家角色写为一个类,怪物一个类,地图一个类,主界面一个类

        玩家的活动可以写在玩家类中,也可以写在主界面类中——更方便刷新主界面;玩家应有移动,战斗等事件;主界面应有初始化,刷新界面,接收键盘按键事件等功能

        使用Qt中的QLable控件装载地图的各种图标,用QPainter绘制游戏背景,用QMediaPlayer播放游戏背景音乐

        地图用三维数组存储,每一张地图都是一个二维数组,则会将地图分割成网格状,通过多个QLable控件拼接成整张地图界面

三.具体实现

        所有类的成员变量都写成了公有成员,方便在类外部通过该类对象使用这些变量

1.角色类声明

class Hero
{
public:
    Hero(QString);
    ~Hero();
    int blood;          //血量
    int attack;         //攻击力
    int defense;        //防御力
    int money;          //金钱
    int floor;          //楼层
    int b_key;          //蓝钥匙
    int y_key;          //黄钥匙
    bool sword;         //持剑标志
    bool shield;        //持盾标志
    QString name;
};

2.怪物类声明

class Monster
{
public:
    Monster(int);
    ~Monster();
    QString name;
    int blood;			//生命值
    int attack;			//攻击力
    int defense;		//防御力
    int money;          //金钱
    int type;			//类型    8-蓝史莱姆  9-黄史莱姆  10-蝙蝠  11-骷髅 12-法师
};

3.地图类声明

        三维数组若声明未赋值则后续不方便赋值,需使用三重for循环赋值,不方便脑补绘制地图,所以在类中声明时就为其赋值

class Map
{
public:
    Map();
    //0-墙1-地板 2-蓝门 3-黄门 4-蓝钥匙 5-黄钥匙 6-小血瓶 7-大血瓶
    //8-蓝史雷姆 9-黄史雷姆 10-蝙蝠 11-骷髅 12-法师 13-红宝石 14-蓝宝石
    //15-英雄 16-上楼 17-下楼 18-剑 19-盾
/* //空地图,用于复制
    {0,0,0,0,0,0,0,0,0,0,0,0,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,1,1,1,1,1,1,1,1,1,1,1,0},
    {0,0,0,0,0,0,0,0,0,0,0,0,0}
*/
    int map[TOWER_LAYER][ONCE_WIDTH][ONCE_HEIGHT]={
        {
         {0,0,0,0,0,0,0,0,0,0,0,0,0},
         {0,16,5,1,1,1,1,1,1,1,1,14,0},
         {0,5,1,1,1,1,1,1,1,1,1,1,0},
         {0,1,1,1,1,1,1,1,1,1,1,1,0},
         {0,1,1,1,1,1,1,1,1,1,1,1,0},
         {0,1,1,1,1,1,1,1,1,1,1,1,0},
         {0,1,1,1,1,1,18,1,1,1,1,1,0},
         {0,1,1,1,1,1,1,1,1,1,1,1,0},
         {0,1,1,1,1,1,1,1,1,1,1,1,0},
         {0,1,1,1,1,1,1,1,1,1,1,1,0},
         {0,1,1,1,1,1,1,1,1,1,1,1,0},
         {0,6,1,1,1,1,1,1,1,1,1,15,0},
         {0,0,0,0,0,0,0,0,0,0,0,0,0}
        },
        {
          {0,0,0,0,0,0,0,0,0,0,0,0,0},
          {0,16,1,9,8,8,1,1,1,1,1,1,0},
          {0,0,0,0,0,0,0,0,0,0,0,1,0},
          {0,5,1,1,3,1,0,1,5,1,0,1,0},
          {0,1,11,1,0,1,0,14,6,1,0,1,0},
          {0,0,3,0,0,1,0,0,0,3,0,1,0},
          {0,5,1,1,0,1,3,10,11,10,0,1,0},
          {0,1,11,1,0,1,0,0,0,0,0,1,0},
          {0,0,3,0,0,1,1,1,1,1,1,1,0},
          {0,1,1,1,0,0,3,0,0,0,3,0,0},
          {0,6,1,5,0,1,1,1,0,1,10,1,0},
          {0,6,13,5,0,17,15,1,0,9,7,8,0},
          {0,0,0,0,0,0,0,0,0,0,0,0,0}
        },
        {
            {0,0,0,0,0,0,0,0,0,0,0,0,0},
            {0,5,14,0,5,7,5,0,1,0,1,6,0},
            {0,1,6,0,7,5,7,0,1,3,10,1,0},
            {0,12,1,0,5,4,5,0,1,0,0,0,0},
            {0,3,0,0,0,1,0,0,1,0,1,12,0},
            {0,1,1,10,1,1,1,9,1,1,1,1,0},
            {0,3,0,0,1,1,1,0,1,0,0,0,0},
            {0,11,1,0,0,1,0,0,1,0,1,6,0},
            {0,1,5,0,1,1,1,0,1,3,12,5,0},
            {0,6,6,0,1,1,1,0,1,0,0,0,0},
            {0,0,0,0,0,1,0,0,9,0,1,1,0},
            {0,17,15,1,1,1,1,0,1,3,1,16,0},
            {0,0,0,0,0,0,0,0,0,0,0,0,0}
        },
        {
            {0,0,0,0,0,0,0,0,0,0,0,0,0},
            {0,1,5,1,0,1,1,1,0,1,12,1,0},
            {0,6,13,4,0,1,12,1,0,5,1,7,0},
            {0,1,1,1,0,1,1,1,0,1,11,1,0},
            {0,0,3,0,0,0,2,0,0,0,3,0,0},
            {0,1,12,1,3,1,1,1,1,1,1,1,0},
            {0,1,1,1,0,0,0,0,0,0,0,0,0},
            {0,9,1,8,1,1,1,1,1,1,1,1,0},
            {0,3,0,0,3,0,0,0,3,0,0,3,0},
            {0,1,0,9,10,5,0,1,12,1,0,1,0},
            {0,1,0,5,1,5,0,9,6,9,0,15,0},
            {0,16,0,8,8,5,0,1,9,8,0,17,0},
            {0,0,0,0,0,0,0,0,0,0,0,0,0}
        },
        {
            {0,0,0,0,0,0,0,0,0,0,0,0,0},
            {0,17,1,2,1,1,1,1,1,1,1,1,0},
            {0,15,1,0,1,1,12,1,12,1,1,1,0},
            {0,1,0,0,0,0,0,1,0,0,0,0,0},
            {0,1,0,5,5,0,1,1,1,0,5,12,0},
            {0,1,0,5,5,3,1,1,1,3,1,5,0},
            {0,1,0,0,0,0,1,1,1,0,0,0,0},
            {0,1,0,12,11,0,1,1,1,0,5,7,0},
            {0,1,0,1,1,3,1,1,1,3,1,5,0},
            {0,1,0,0,0,0,1,1,1,0,0,0,0},
            {0,1,0,7,7,0,1,1,1,0,12,19,0},
            {0,16,0,7,14,3,1,1,1,3,12,12,0},
            {0,0,0,0,0,0,0,0,0,0,0,0,0}
        },
        {
            {0,0,0,0,0,0,0,0,0,0,0,0,0},
            {0,16,0,1,10,3,1,0,1,1,3,1,0},
            {0,1,0,1,1,0,5,0,11,12,0,2,0},
            {0,1,3,11,1,0,1,0,5,5,0,1,0},
            {0,0,0,0,3,0,10,0,5,5,0,1,0},
            {0,5,5,12,12,0,1,0,0,0,0,1,0},
            {0,5,1,1,11,0,1,12,1,1,1,1,0},
            {0,0,11,0,0,0,1,0,0,0,0,12,0},
            {0,1,12,1,1,0,10,0,1,1,1,1,0},
            {0,13,5,7,5,0,1,0,1,0,0,0,0},
            {0,0,0,0,0,0,5,0,1,0,7,14,0},
            {0,17,15,1,1,1,1,0,1,3,1,1,0},
            {0,0,0,0,0,0,0,0,0,0,0,0,0}
        },
        {
            {0,0,0,0,0,0,0,0,0,0,0,0,0},
            {0,17,15,7,7,7,7,7,7,7,7,7,0},
            {0,1,1,14,14,14,14,14,14,14,14,14,0},
            {0,1,1,13,13,13,13,13,13,13,13,13,0},
            {0,1,1,1,1,1,1,1,1,1,1,1,0},
            {0,1,1,1,1,1,1,1,1,1,1,1,0},
            {0,1,1,1,1,1,1,1,1,1,1,1,0},
            {0,1,1,1,1,1,1,1,1,1,1,1,0},
            {0,1,1,1,1,1,1,1
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值