读书人

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

发布时间: 2012-05-12 15:39:31 作者: rapoo

奥特曼打怪兽
实验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;


cout <<"经验:"<<exp<<endl;
cout <<"血量:"<<hp<<endl;
cout <<"财富:"<<money<<endl;
}

CUltraman::~CUltraman()
{

}


Ultraman.h里面的。
// Ultraman.h: interface for the CUltraman class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_ULTRAMAN_H__192B76DE_006C_41DC_AE33_BB3477605477__INCLUDED_)
#define AFX_ULTRAMAN_H__192B76DE_006C_41DC_AE33_BB3477605477__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CMonster;
class CUltraman
{
public:
CUltraman();
virtual ~CUltraman();
void initial();//初始实力
void display();//现有实力
void escape();//逃跑扣血
void attack(CMonster a);//打斗过程
void attacked(CMonster a);
void alive();//奥特曼现有血量
void resort ();//补血函数
void upgrade ();//升级函数

void win(CMonster a);
int getRank();
int getExp();
int getDamage();
int getHp();
int getMoney();
private:
int rank;//奥特曼的等级
int exp;//奥特曼的经验
int damage;//奥特曼的攻击力
int hp;//奥特曼的血量
int money;//奥特曼的金钱



};

#endif // !defined(AFX_ULTRAMAN_H__192B76DE_006C_41DC_AE33_BB3477605477__INCLUDED_)



Monster.h里面的
// Monster.h: interface for the CMonster class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_MONSTER_H__FF605354_AD06_4E74_B533_761D4CCB017F__INCLUDED_)
#define AFX_MONSTER_H__FF605354_AD06_4E74_B533_761D4CCB017F__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CUltraman;
class CMonster
{
public:
CMonster();
virtual ~CMonster();
void display();//怪兽现有实力
void attacked(CUltraman a);
int getRank();
int getExp();
int getDamage();
int getHp();
int getMoney();
void setX();
private:
int rank;//怪兽的等级
int exp;//怪兽的经验
int damage;//怪兽的攻击力
int hp;//怪兽的血量
int money;//怪兽的金钱

};

Monster.cpp里面的
// Monster.cpp: implementation of the CMonster class.
//
//////////////////////////////////////////////////////////////////////
#include <iostream.h>
#include "Monster.h"
#include <stdlib.h>
#include <time.h>
#include "Ultraman.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMonster::CMonster()
{

}

int CMonster::getDamage()
{
return damage;
}
int CMonster::getExp()
{
return exp;
}
int CMonster::getHp()
{
return hp;
}
int CMonster::getMoney()
{
return money;
}
int CMonster::getRank()
{
return rank;
}
//怪兽的初始属性值将随机生成(注意在程序开头包括此处用到两个库:<stdlib.h>和<time.h>)。
//该方法已实现如下:

void CMonster::setX()
{

srand(time(NULL));

rank=rand()%10+1;

hp=(rand()%rank+1)*5;

exp=rand()%rank+1;

damage=rand()%rank+1;

money=rand()%rank+1;

}
void CMonster::attacked(CUltraman a)
{

hp=hp-a.getDamage();
if(money%2!=0||money ==1)
money=money-1;
}

void CMonster::display()
{
cout <<"攻击力:"<<damage<<endl;
cout <<"等级:"<<rank<<endl;
cout <<"经验:"<<exp<<endl;
cout <<"血量:"<<hp<<endl;
cout <<"财富:"<<money<<endl;
}

CMonster::~CMonster()
{

}

还有一个cpp,那是你创建的主函数的内容,如下。
#include <iostream.h>


#include "Ultraman.h"
#include "Monster.h"
void main ()
{
CUltraman a;
CMonster b;
cout <<"欢迎来到奥特曼小游戏"<<endl;
a.initial();
b.setX();
cout <<"你遇到了一只怪兽"<<endl;
cout <<"你的实力"<<endl;
a.display();
cout <<"它的实力"<<endl;
b.display();
a.attack(b);
b.attacked(a);
a.attacked(b);
cout <<"初次战斗过后"<<endl;
cout <<"你的实力"<<endl;
a.display();
cout <<"它的实力"<<endl;
b.display();


}

不过老师不同可能要求也不同。参考一下就好。

读书人网 >PB

热点推荐