题目
勇士打怪兽要实现的功能:
- 竞技场中的勇士和怪兽的数量可以有许多。不一定是1v1,但最多不超过5v5。
- 角色在出场时,可以带有一定装备,比如武器、盾牌等。
- 采用回合制战斗。你可以扮演怪兽或者勇士。也可以全自动。每个回合,所有角色有一次action机会,可以根据自己特点来选,比如进攻、防御、放大招、等待,等等。勇士和怪物的技能不能相同。要合理。
- 勇士和怪兽的初始属性值可以随机,也可以人工设定。游戏中各种攻击的伤害,要有随机性,不能使用定值。
使用的技术:
- 要求至少设计:勇士类、怪物类、装备类、竞技场类。
- 使用类的组合,为角色附加装备。
- 在竞技场类中添加角色对象指针或指针数组,实现角色入场。
- 角色类添加static变量,存放“当前还活着的角色的数量”。
- 游戏过程用cout把选择项输出到屏幕,通过屏幕交互来进行游戏。
各个类的实现思路:
1勇士类:
属性:
- 勇士的武力值(每次造成多少伤害范围),
- 勇士的防御值(每次抵扣多少伤害),
- 生命值,为0就嗝屁
- 暴击造成的伤害范围
- 施展暴击的概率
- 当前活着的勇士的数量
- 勇士的装备
方法:
- 构造和初始化
- 攻击函数,这里要根据手动还是自动,选择一个动作函数。自动的话,要做一些简单的策略。如,在什么情况下选择什么动作。下面是几个动作函数的例子。
- 施展普通攻击(通过随机数确定具体伤害)
- 施展暴击攻击(通过随机数确定具体伤害)
- 可以添加自己的技能动作。发挥想象。
2怪兽类:
属性:
- 怪兽的武力值(每次造成多少伤害),
- 怪兽的防御值(每次抵扣多少伤害),
- 生命值,为0就嗝屁
- 怪兽的特殊技能(这个自己设定)
- 怪兽特殊技能释放概率
- 当前活着的怪兽的数量
- 怪兽的装备
方法:
- 构造和初始化
- 同样是攻击函数。同勇士的写法。可以有自己的创新。
- 施展普通攻击(通过随机数确定具体伤害)
- 施展技能(通过随机数确定具体效果,自行设计的)
- 其他,自己开脑洞。
3 竞技场类
属性:
- 指向怪兽的对象指针
- 指向勇士的而对象指针
- 双方的状态显示,相当于提供给观众的状态栏,如双方的血量,双方的招式等。发挥想象。
方法:
- 构造和初始化
- 在游戏开始后,更新参战双方的状态并且输出出来给观众。
- 确定比赛开始和结束,根据双方的状态判断胜负,起到裁判的作用。比如,写一个rungame方法
4 main()
- 创建勇士、怪兽、竞技场对象,可以人工cin来设定,也可以随机生成。
- 将勇士和怪兽的对象的地址,赋值给竞技场对象,
- 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也可用来进行链接指定。