用多文件组织多个类的程序
2016-04-28 08:30
387 查看
/*
*Copyright (c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:main.cpp
*作 者:隋文韬
*完成日期:2016年4月28日
*版 本 号:v1.0
*问题描述:“带武器的游戏角色”用“一个项目多个文件”的方式实现
*/
main.cpp(测试)
game.h(类的声明)
函数定义:
weapon.cpp
armor.cpp
point.cpp
role.cpp
*Copyright (c)2016,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:main.cpp
*作 者:隋文韬
*完成日期:2016年4月28日
*版 本 号:v1.0
*问题描述:“带武器的游戏角色”用“一个项目多个文件”的方式实现
*/
main.cpp(测试)
#include <iostream> #include "game.h" using namespace std; int main( ) { Weapon w1("Gold stick",200, 100), w2("Fire point gun",180,300); Armor a1("suo zi jia",100),a2("hun tian ling",150); Role wuKong("WuKong", 500, Point(0, 0), w1,a1); Role neZha("NeZha", 210, Point(30,30), w2,a2); cout<<"---begin---"<<endl; wuKong.show(); neZha.show(); cout<<"---1st round---"<<endl; wuKong.attack(neZha); wuKong.show(); neZha.show(); cout<<"---2nd round---"<<endl; 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; }
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 Armor { public: Armor(string anam,int d); Armor(const Armor&); string getAnamr(); int getDefensive();//返回防御力 private: string aname;//名称 int defensive;//防御力 }; class Role { public: Role(string nam, int b, Point l, Weapon w, Armor a); //构造函数 ~Role(); //析构函数 void eat(int d); //吃东西,涨d血(死了后吃上东西可以复活) void attack(Role &r); //攻击别人,自己涨血,同时对方被攻击失血。血量取决于当前用的武器 void beAttack(int f,int d); //被别人攻击,参数f是承受的攻击力 double distance(Role &r); //返回与另一角色的距离 bool isAlived(); //是否活着 void moveTo(int x, int y); //移到另外一点 void move(int dx, int dy); //从当前位置移动 void show(); //显示 private: string name; //角色名称 int blood; //当前血量 bool life; //是否活着 Point location; //位置 Weapon weapon; //武器 Armor armor; //防具 }; #endif // GAME_H_INCLUDED
函数定义:
weapon.cpp
#include "game.h" Weapon::Weapon(string wnam, int f, double k):wname(wnam),force(f),killRange(k) {} Weapon::Weapon(const Weapon &w):wname(w.wname),force(w.force),killRange(w.killRange) {} string Weapon::getWname() { return wname; } //返回杀伤力 int Weapon::getForce() { return force; } //返回杀伤距离 double Weapon::getKillRange() { return killRange; }
armor.cpp
#include "game.h" Armor::Armor(string anam,int d):aname(anam),defensive(d){} Armor::Armor(const Armor &a):aname(a.aname),defensive(a.defensive){} string Armor::getAnamr() { return aname; } int Armor::getDefensive() { return defensive; }
point.cpp
#include "game.h" #include <cmath> Point::Point(int x, int y): x(x), y(y) { } int Point::getX() { return x; } int Point::getY() { return y; } //移到另外一点 void Point::moveTo(int x, int y) { this->x=x; this->y=y; } //从当前位置移动 void Point::move(int dx, int dy) { this->x+=dx; this->y+=dy; } double Point::distance(const Point& p) { double dx = this->x - p.x; double dy = this->y - p.y; return (sqrt(dx * dx + dy * dy)); }
role.cpp
#include <iostream> #include "game.h" using namespace std; Role::Role(string nam, int b, Point l, Weapon w, Armor a):name(nam),blood(b),location(l),weapon(w),armor(a) { if(blood>0) life=true; else life=false; } Role::~Role() { cout<<name<<"退出江湖..."<<endl; } //吃东西,涨d血(死了后吃上东西可以复活) void Role::eat(int d) //吃东西,涨d血(死了也能吃,别人喂的,以使能复活) { blood+=d; if(blood>0) life=true; } //攻击别人,自己涨血,同时对方被攻击失血,血量取决于当前用的武器 //在武器的攻击范围内才可以攻击 void Role::attack(Role &r) //攻击别人,涨1血 { if(isAlived()&&weapon.getKillRange()>this->distance(r)) //活着且在杀伤范围内 { blood+=weapon.getForce(); r.beAttack(weapon.getForce(),armor.getDefensive()); } } //被别人攻击,参数f是承受的攻击力 void Role::beAttack(int f,int d) { blood=blood-f+d; if(blood<=0) life=false; } //返回与另一角色的距离 double Role::distance(Role &r) { return location.distance(r.location); } //是否活着 bool Role::isAlived() { return life; } //移到另外一点 void Role::moveTo(int x, int y) { if(isAlived()) location.moveTo(x,y); } //从当前位置移动 void Role::move(int dx, int dy) { if(isAlived()) location.move(dx,dy); } //显示 void Role::show() { cout<<name<<" has "<<blood<<" blood, hold "<<weapon.getWname()<<",wear "<<armor.getAnamr()<<endl; cout<<" He is in ("<<location.getX()<<", "<<location.getY()<<") and "; if(isAlived()) cout<<"alived."; else cout<<"dead."; cout<<endl; }
相关文章推荐
- request的setAttribute()怎么用的?
- 虚拟机访问不了外网?
- Duutils创建数据库
- 模型思维_第1-4课_学习笔记
- shell十三问,为linux学习打基础(一)
- 使用HttpGet协议与正则表达实现桌面版的糗事百科
- 4月26日 面向对象
- 第九周项目1阅读程序(1)
- jquery插件开发解析(转)
- 增加游戏角色的功能
- hdu-1411 校庆神秘建筑(欧拉四面体)
- 第九周项目一 深复制体验
- javascript编程技巧_模块化编程(匿名函数)
- ZC_知识点
- osx xcode 创建python项目
- 第九周项目3-人数不定的工资类
- Oracle API Gateway连接WebService服务,攻击保护
- 3. Android框架和工具之 xUtils(HttpUtils)
- Hibernate OneToOne注解
- 调用awk的三种方式