当前位置: 代码迷 >> PB >> 奥特曼打怪兽,该如何解决
  详细解决方案

奥特曼打怪兽,该如何解决

热度:74   发布时间:2016-04-29 08:19:19.0
奥特曼打怪兽
实验4 类的定义
一、实验目的
1. 掌握类的定义
2. 了解如何根据描述发现类及其成员,具备初步的面向对象分析与设计能力
二、实验概述
现在有一个奥特曼打怪兽的角色扮演游戏。请你根据下面的描述,定义两个类:奥特曼类和怪兽类。
在奥特曼的世界,打怪兽就是全部。现在人人都有机会成为奥特曼,加入到与怪兽无止境的战斗中。可惜,并非人人生来就是英雄,革命尚未成功,同志仍需努力啊。每一个奥特曼都要从零开始,辛勤劳动,打怪升级,最终才能成为举世瞩目的大英雄。
奥特曼的等级(rank)从第一级开始,随着它打怪兽经验(exp)的增加,等级将不断攀升。随着等级的升高,奥特曼的生命值(hp)上限和攻击力(damage)也将大大增强。在与怪兽的战斗中,奥特曼收获的不仅仅是经验。有时,运气好的话,还能从怪兽身上弄到点小钱(money)。不要小看这些钱,关键时刻,它能给奥特曼买药补血呀。奥特曼没有金刚不坏之身,在与怪兽的战斗中,奥特曼会受到伤害。一旦奥特曼的生命值降到0,它英雄的一生就结束了。
好了,了解了奥特曼的基本情况,现在可以开始战斗了。首先,我们需要一位全新的奥特曼,我们给它赋予一定的初始实力(initial)。让它投入战斗吧!
在与怪兽的战斗中要讲究策略。所谓知己知彼,百战不殆,一旦碰到怪兽,我们首先要查看自己和对方的实力(display),包括双方的等级、生命值、攻击力、经验和所拥有的钱财。所谓打得赢就打,打不赢就跑。如果对手太强大,逃跑吧(escape)!偶尔逃跑无伤颜面,但会耗费一点生命值。如果总是逃跑,生命被虚耗,那英雄就当不成了。所以该出手时就出手,勇敢地战斗(attack)吧!每一回合的战斗中,怪兽会受到攻击(attacked),怪兽也会反击(fightback),让奥特曼受到攻击(attacked)。每一回合结束,只要奥特曼还活着(isalive),而且怪兽也还活着,战斗就要继续。如果奥特曼的生命值太低,也许抵挡不了下一轮的进攻,那么别财迷了,掏钱出来给它补血(restore)吧。当然,如果形势确实不妙,奥特曼也可以中途逃跑。但如果获得了最终的胜利(win),不仅能赢得战斗经验,夺取怪兽身上的钱财,足够多的经验也许能让奥特曼升级(upgrade)。
三、实验内容
根据以上描述,利用C++语言,定义奥特曼(Ultraman)和怪兽(Monster)两个类。
四、 提交材料
1. 代码:两个类的定义代码(成员函数暂时无需给出具体实现)及注释

五、评分标准
1. 类定义正确:20%
2. 类属性的正确和完整定义:40%
3. 类方法的正确和完整定义:40%


------解决方案--------------------
估计我和你一个学校。我是星期1做完上完这节课。下面的供参考。

要插入两个类,工具栏上面的插入,选择类,名称为CUltraman,再插入一个类为
CMonster。(名称前面+C老师说是c++的习惯。)然后左边就多了2个cpp和2个.h文件。
下面是各文件里面的内容(有部分是插入类就自带的)。
Ultraman.cpp里面的。
// Ultraman.cpp: implementation of the CUltraman class.
//
//////////////////////////////////////////////////////////////////////

#include "Ultraman.h"
#include "Monster.h"
#include <iostream.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CUltraman::CUltraman()
{

}
//为每个属性设置get方法
int CUltraman::getDamage()
{
return damage;
}
int CUltraman::getExp()
{
return exp;
}
int CUltraman::getHp()
{
return hp;
}
int CUltraman::getMoney()
{
return money;
}
int CUltraman::getRank()
{
return rank;
}
//初始化方法将一次性初始化各个属性的取值。
//(等级从1开始,生命值为10,攻击力为1,经验值为0,拥有的钱数为0)
void CUltraman::initial()
{
rank =1;
hp=10;
damage=1;
exp=0;
money=0;
}

//逃跑将损失1点生命值。
void CUltraman::escape()
{
hp=hp-1;
}

//攻击将使对方受到自身攻击力大小的伤害,但对方也会采取反击,导致自己受到攻击。
//同时,如果对方所剩下的钱数为奇数,可抢夺对方一个钱财。另外,每攻击一次,可增加一点经验值。
void CUltraman::attack(CMonster a)
{
exp=exp+1;
if(a.getMoney()%2!=0||a.getMoney()==1)
money=money+1;

}
//受到攻击时,将受到攻击方攻击力值二分之一大小的伤害(即损失相应的生命值)。
//即:受到伤害点数=攻击方攻击力值/2。
void CUltraman::attacked(CMonster a)
{
hp=hp -a.getDamage();
}
//如果赢得了战斗,将获得攻击方所有经验值。如果对方身上还有钱财,将全部抢得。

void CUltraman::win(CMonster a)
{
exp=exp+a.getExp();
money=money+a.getExp();
}
//如果体力不支,可以用钱恢复一些生命值。
//每10个钱可恢复1点生命值。只要有足够的钱,可以一直恢复,直到达到生命值上限(等级值的10倍)。
void CUltraman::resort()
{
if (hp<10*rank)
{
if (money >10)
{
money=money-10;
hp=hp+1;
}
else
cout <<"你木有足够的钱"<<endl;
}
else 
cout <<"你已经满血了"<<endl;
}

//如果达到升级条件,可以升级。每次升级需要有等级值的10倍的经验值。
//每次升级所使用的经验值都将被扣除,不可重复用于下次升级。
//升级将提高生命值上限至新等级值的10倍,生命值将恢复为满血状态,并提升战斗力为新等级值。
void CUltraman::upgrade()
{
exp=exp-10*rank;
rank=rank+1;
hp=rank*10;
damage=damage+10;
}
//察看奥特曼是否死
void CUltraman::alive()

if(hp<=0)
cout<<"Game over";
}
//奥特曼实力
void CUltraman::display()
{
cout <<"攻击力:"<<damage<<endl;
cout <<"等级:"<<rank<<endl;
  相关解决方案