勇士打怪兽


题目

勇士打怪兽要实现的功能:

  1. 竞技场中的勇士和怪兽的数量可以有许多。不一定是1v1,但最多不超过5v5。
  2. 角色在出场时,可以带有一定装备,比如武器、盾牌等。
  3. 采用回合制战斗。你可以扮演怪兽或者勇士。也可以全自动。每个回合,所有角色有一次action机会,可以根据自己特点来选,比如进攻、防御、放大招、等待,等等。勇士和怪物的技能不能相同。要合理。
  4. 勇士和怪兽的初始属性值可以随机,也可以人工设定。游戏中各种攻击的伤害,要有随机性,不能使用定值。

使用的技术:

  1. 要求至少设计:勇士类、怪物类、装备类、竞技场类。
  2. 使用类的组合,为角色附加装备。
  3. 在竞技场类中添加角色对象指针或指针数组,实现角色入场。
  4. 角色类添加static变量,存放“当前还活着的角色的数量”。
  5. 游戏过程用cout把选择项输出到屏幕,通过屏幕交互来进行游戏。

各个类的实现思路:

1勇士类:

属性:

  1. 勇士的武力值(每次造成多少伤害范围),
  2. 勇士的防御值(每次抵扣多少伤害),
  3. 生命值,为0就嗝屁
  4. 暴击造成的伤害范围
  5. 施展暴击的概率
  6. 当前活着的勇士的数量
  7. 勇士的装备

方法:

  1. 构造和初始化
  2. 攻击函数,这里要根据手动还是自动,选择一个动作函数。自动的话,要做一些简单的策略。如,在什么情况下选择什么动作。下面是几个动作函数的例子。
  3. 施展普通攻击(通过随机数确定具体伤害)
  4. 施展暴击攻击(通过随机数确定具体伤害)
  5. 可以添加自己的技能动作。发挥想象。

2怪兽类:

属性:

  1. 怪兽的武力值(每次造成多少伤害),
  2. 怪兽的防御值(每次抵扣多少伤害),
  3. 生命值,为0就嗝屁
  4. 怪兽的特殊技能(这个自己设定)
  5. 怪兽特殊技能释放概率
  6. 当前活着的怪兽的数量
  7. 怪兽的装备

方法:

  1. 构造和初始化
  2. 同样是攻击函数。同勇士的写法。可以有自己的创新。
  3. 施展普通攻击(通过随机数确定具体伤害)
  4. 施展技能(通过随机数确定具体效果,自行设计的)
  5. 其他,自己开脑洞。

3 竞技场类

属性:

  1. 指向怪兽的对象指针
  2. 指向勇士的而对象指针
  3. 双方的状态显示,相当于提供给观众的状态栏,如双方的血量,双方的招式等。发挥想象。

方法:

  1. 构造和初始化
  2. 在游戏开始后,更新参战双方的状态并且输出出来给观众。
  3. 确定比赛开始和结束,根据双方的状态判断胜负,起到裁判的作用。比如,写一个rungame方法

4 main()

  1. 创建勇士、怪兽、竞技场对象,可以人工cin来设定,也可以随机生成。
  2. 将勇士和怪兽的对象的地址,赋值给竞技场对象,
  3. rungame

代码实现

代码包含:
ground.h, ground.cpp
menu.h, menu.cpp
yasuo.h, yasuo.cpp
monster.h, monster.cpp
equipment.h, equipment.cpp
main.cpp

#include <iostream>
#include "yasuo.h"
#include "monster.h"
#include "ground.h"
#include "equipment.h"
#include "menu.h"
using namespace std;

extern Equipment eq0;
extern Equipment eq1;
extern Equipment eq2;
extern Equipment eq3;
extern Equipment eq4;

int main() {
    Ground fight;
    fight.introduce();
    system("pause");

    Yasuo hero(490, 60, 30, 0, eq1, eq0, eq0);   //默认带了个多兰剑
    Yasuo *yp = &hero;
    hero.introduce();
    system("pause");

    Menu menu;
    menu.show();
    
    int menu_choice;
    cin >> menu_choice;
    while (menu_choice != 5) {
        switch (menu_choice) {
        case 1:
            fight.pre_fight(yp);
            break;
        case 2:
            fight.buy_equipment();
            system("pause");
            break;
        case 3:
            fight.buy_supply(yp);
            break;
        case 4:
            fight.get_info(yp);
            break;
        default:
            cout << "请重新输入!" << endl;
            break;
        }
        menu.show();
        cin >> menu_choice;
    }

    cout << "正在退出游戏..." << endl;
    system("pause");
    return 0;
}

贴了个mian.cpp的代码,总共写了833行,第一次写了这么多…

源代码,以及可运行的exe文件:
链接地址:https://pan.baidu.com/s/1nDPmdDi9uf7xRzq5xouxKA
提取码:9b1m

other

用到了类的组合,类指针,extern关键字,引用…

//注意基本切换场景的例子,主场景、分场景都适用

//一个类的对象通过指针传入另一个类的函数,英雄对象通过指针传入场景类中

extern 可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。


文章作者: ╯晓~
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ╯晓~ !
评论
  目录