第八周项目四 游戏中的角色类增强版

/*
 * Copyright(c)2016,烟台大学计算机与控制工程学院
 * All rights reserved.
 * 文件名称:游戏中的角色类增强版(2).Cpp
 * 作者:刘默涵
 * 完成日期:2016年4月21日
 * 版本号:v1.0
 *
 * 问题描述:在上面已经建好的项目基础上,将Weapon类的数据成员改为数组,以支持一个角色可以带多件武器的需求,为此,在原类基础上,改造及增加的数据成员和成员函数至少包括:
 * 输入描述:
 * 程序输出:
 */
//1.game.h:类声明

#ifndef GAME_H_INCLUDED
#define GAME_H_INCLUDED
#include <string>
using namespace std;

class Point     //Point类声明
{
public: //外部接口
    Point(int x=0, int y=0);
    int getX();
    int getY();
    double distance(const Point &p);  //返回与另外一点p之间的距离
    void moveTo(int x, int y); //移到另外一点
    void move(int dx, int dy); //从当前位置移动
private:
    int x, y;  //座标
};

class Weapon
{
public:
    Weapon(string wnam, int f, double k);
    Weapon(const Weapon&);
    string getWname();
    int getForce();         //返回杀伤力
    double getKillRange();  //返回杀伤距离
private:
    string wname;   //名称
    int force;       //杀伤力
    double killRange;   //杀伤距离
};

class Role
{
public:
    Role(string nam, int b, Point l, Weapon w); //构造函数
    ~Role(); //析构函数
    void eat(int d); //吃东西,涨d血(死了后吃上东西可以复活)
    void attack(Role &r); //攻击别人,自己涨血,同时对方被攻击失血。血量取决于当前用的武器
    void beAttack(int f); //被别人攻击,参数f是承受的攻击力
    double distance(Role &r); //返回与另一角色的距离
    bool isAlived(); //是否活着
    void moveTo(int x, int y); //移到另外一点
    void move(int dx, int dy); //从当前位置移动
    void show(); //显示
    void changeWeapon(int wno); //换手中的武器
private:
    string name;  //角色名称
    int blood;    //当前血量
    bool life;    //是否活着
    Point location;  //位置
    Weapon weapon;  //武器
    Weapon weapons[N];  //武器,N为定义的常变量
    int weaponNum;      //武器数目
    int holdWeapon;     //现在手持哪一件武器(用武器数组的下标做标识)。
                         //0 ≤ holdWeapon < weaponNum
                         //初始时为空手,空手时holdWeapon值为-1,将-1定义为常变量为宜)
};

#endif // GAME_H_INCLUDED
//2.point.cpp,定义点类,表示位置


#include <iostream>
#include "game.h"
using namespace std;

int main( )
{
    Weapon w1[1]= {Weapon("Gold stick",160, 80)}; //黑色切割者
    Weapon w2[3]= {Weapon("Fire-Tip Lance",160,280), //无尽之刃
                   Weapon("Universal Ring",100,400), //血色幕刃
                   Weapon("Sky Muddling Damask",50,970) //幻影之舞
                  };
    Role wuKong("WuKong", 500, Point(0, 0), w1, 1);
    Role neZha("NeZha", 210, Point(30,30), w2, 3);
    wuKong.changeWeapon(0);
    neZha.changeWeapon(0);
    cout<<"---begin---"<<endl;
    wuKong.show();
    neZha.show();
    cout<<"---1st round---"<<endl;
    wuKong.attack(neZha);
    wuKong.show();
    neZha.show();
    cout<<"---2nd round---"<<endl;
    neZha.changeWeapon(2);
    neZha.attack(wuKong);
    wuKong.show();
    neZha.show();
    cout<<"---3rd round---"<<endl;
    neZha.moveTo(100,100);
    wuKong.attack(neZha);
    wuKong.show();
    neZha.show();
    cout<<"---4th round---"<<endl;
    neZha.attack(wuKong);
    wuKong.show();
    neZha.show();
    cout<<"---then---"<<endl;
    neZha.attack(wuKong);
    neZha.attack(wuKong);
    wuKong.attack(neZha);
    wuKong.show();
    neZha.show();
    cout<<"---end---"<<endl;
    return 0;
}
      .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值