博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++游戏系列4:杀伤距离有限制
阅读量:5742 次
发布时间:2019-06-18

本文共 3478 字,大约阅读时间需要 11 分钟。

更多见:

知识点:(无新增)

改进:(1)武器增加了杀伤距离,角色增加了位置,这样,当两个角色对象离得太远,距离超出攻击者武器的杀伤范围,攻击行为无效;(2)其他一些规则更加合理

【项目-游戏类的进一步完善】

1.game.h:类声明

#ifndef GAME_H_INCLUDED#define GAME_H_INCLUDED#include 
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(); //显示private: string name; //角色名称 int blood; //当前血量 bool life; //是否活着 Point location; //位置 Weapon weapon; //武器};#endif // GAME_H_INCLUDED

2.point.cpp,定义点类,表示位置

#include "game.h"#include 
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));}

3.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;}

4.role.cpp,定义角色类,表示参与游戏的角色

#include 
#include "game.h"using namespace std;Role::Role(string nam, int b, Point l, Weapon w):name(nam),blood(b),location(l),weapon(w){ if(blood>0) life=true; else life=false;}Role::~Role(){ cout<
<<"退出江湖..."<
0) life=true;}//攻击别人,自己涨血,同时对方被攻击失血,血量取决于当前用的武器//在武器的攻击范围内才可以攻击void Role::attack(Role &r) //攻击别人,涨1血{ if(isAlived()&&weapon.getKillRange()>this->distance(r)) //活着且在杀伤范围内 { blood+=weapon.getForce(); r.beAttack(weapon.getForce()); }}//被别人攻击,参数f是承受的攻击力void Role::beAttack(int f){ blood-=f; 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<
<<" has "<
<<" blood, hold "<

5.main.cpp,测试函数

#include 
#include "game.h"using namespace std;int main( ){ Weapon w1("Gold stick",200, 100), w2("Fire point gun",180,300); Role wuKong("WuKong", 500, Point(0, 0), w1); Role neZha("NeZha", 210, Point(30,30), w2); cout<<"---begin---"<

转载地址:http://zvszx.baihongyu.com/

你可能感兴趣的文章
每日一题:五 特别的数字
查看>>
Windows 下用php exec执行git pull遇到的问题及解决方案
查看>>
基于socket.io实现的一对一聊天服务器和客户端
查看>>
CSS进阶——绝对定位元素的宽高是如何定义的
查看>>
Mock.js使用
查看>>
进程的Binder线程池工作过程
查看>>
Unity项目使用静态图片做背景
查看>>
innerHTML、innerText、outerHTML、outerText区别。
查看>>
GitHub 重磅更新:无限私有仓库免费使用
查看>>
C#未来新特性:静态委托和函数指针
查看>>
机器学习研究的七个迷思
查看>>
Java 12正式发布,新特性解读!
查看>>
FB正在大规模重构React Native,预计今年发布
查看>>
Scala中的函数式特性
查看>>
使用HTML5在浏览器中开发虚拟现实业务
查看>>
在首次发布三周之后,MLflow迎来了0.2版本
查看>>
铁线蕨算法(Adiantum)为低端智能手机提供磁盘加密服务
查看>>
360开源又一力作——KafkaBridge:让操作kafka更简单!
查看>>
你真的懂用户画像吗?
查看>>
微软正在考虑将Windows默认浏览器改为Chromium
查看>>