typedef std::pair<int, int> intPair;
namespace constants{
constexpr int BASERADIUS = 5000;
constexpr int WINDRADIUS = 1280;
constexpr int CTRLRADIUS = 2200;
constexpr int SHLDRADIUS = 2200;
constexpr int IDAIRADIUS = 300;
constexpr int SPELLCOSTS = 10;
}
常用數值
int distance(intPair, intPair);
計算兩組座標間之距離
intPair& operator +=(intPair &lhs, const intPair &rhs);
const intPair operator +(const intPair &lhs, const intPair &rhs);
intPair& operator -=(intPair &lhs, const intPair &rhs);
const intPair operator -(const intPair &lhs, const intPair &rhs);
intPair& operator *=(intPair &lhs, const int scalar);
const intPair operator *(const intPair &lhs, const int scalar);
intPair& operator /=(intPair &lhs, const int divider);
const intPair operator /(const intPair &lhs, const int divider);
intPair& operator %=(intPair &lhs, const int modulo);
const intPair operator %(const intPair &lhs, const int modulo);
提供座標(std::pair<int, int>)之間的四則運算之運算子多載
intPair getCoord() const;
回傳該實體之座標
- intPair(x, y)
int distToCoord(intPair coord) const;
計算與該座標之距離
- intPair(x, y)
- int 距離
bool getIsControlled() const;
取得 isControlled 參數
- bool isControlled
int getShieldLife() const;
取得 shieldLife 參數
- int shieldLife
Entity(){};
Entity(int id, int type, int x, int y, int shieldLife, int isControlled, int health, int vx, int vy, int nearBase, int threatFor, intPair baseCoord);
建構子
- int 11 項基本參數
- intPiar 我方基地座標
Monster() {};
Monster(int id, int type, int x, int y, int shieldLife, int isControlled, int health, int vx, int vy, int nearBase, int threatFor,intPair baseCoord);
建構子
- int 11 項基本參數
- intPiar 我方基地座標
bool goCoord(intPair coord);
加入前往該座標之指令,如已有指令則失敗
- intPair(x, y)
- bool 成功 ( true ) 失敗 ( false )
bool goDefaultCoord(Player &player);
加入前往預設座標之指令,如已有指令則失敗
- Player& 玩家本身
- bool 成功 ( true ) 失敗 ( false )
bool goEntity(int id, Player &player);
加入前往該實體座標之指令,如已有指令則失敗
- int 實體之 ID
- Player& 玩家本身
- bool 成功 ( true ) 失敗 ( false )
bool spellWind(intPair coord);
bool spellWind(int x, int y);
加入施放推向該座標之風魔法指令,如已有指令或魔力不足則失敗
- int x, y 座標 or intPair(x,y)座標
- bool 成功 ( true ) 失敗 ( false )
bool control(int id, int x, int y, Player &player);
加入施放控制該實體前往指定座標之指令,如已有指令、已被控制、距離不足或魔力不足則失敗
- int 實體之 ID
- int x, y 座標
- Player& 玩家本身
- bool 成功 ( true ) 失敗 ( false )
bool shield(int id, Player &player);
加入施放護盾給指定實體之指令,如已有指令、已有護盾、距離不足或魔力不足則失敗
- int 實體之 ID
- Player& 玩家本身
- bool 成功 ( true ) 失敗 ( false )
std::string getCommand() const;
取得指令
- std::string 指令
std::ostream& operator << (std::ostream & os,const Ally & a);
輸出指令之運算子多載
- std::ostream 左運算元
- Ally& 右運算元欲輸出指令之 Ally
Ally(){};
Ally(int id, int type, int x, int y, int shieldLife, int isControlled, int health, int vx, int vy, int nearBase, int threatFor, intPair baseCoord);
建構子
- int 11 項基本參數
- intPiar 我方基地座標
Enemy(){};
Enemy(int id, int type, int x, int y, int shieldLife, int isControlled, int health, int vx, int vy, int nearBase, int threatFor, intPair baseCoord);
建構子
- int 11 項基本參數
- intPiar 我方基地座標
static int health, enemyHealth;
static int mana, enemyMana;
雙方體力和魔力
const int allyBaseX, allyBaseY, enemyBaseX, enemyBaseY, heroesNum;
雙方基地座標即可用英雄
std::map<int, Monster> monsters;
std::map<int, Ally> allies;
std::map<int, Enemy> enemies;
儲存所有場上ID 和實體之映射
std::vector<intPair> allyDefaultCoord;
可更改之預設 Ally 位置
int side;
1 為藍方,-1 為紅方(可以用做座標轉換)
intPair getBaseCoord(bool isAlly) const;
取得雙方基地座標
- bool 我方( true ) 敵方 ( false )
- intPair(x, y) 座標
std::vector<int> monsterNearBy(intPair coord, int range) const;
std::vector<int> enemyNearBy(intPair coord, int range) const;
std::vector<int> allyNearBy(intPair coord, int range) const;
std::vector<int> shieldedMonsterNearBy(intPair coord, int range) const;
取得指定座標範圍內之各種實體,以距離排序
- intPair(x, y) 座標
- int 範圍
- std::vector 實體 ID 之 vector
void resetEntity();
清除所有實體映射 ( map )
void setDefaultCoord(intPair allyCoord1, intPair allyCoord2, intPair allyCoord3);
設定所有 Ally 之預設座標
- intPair(x, y) 三組座標依序對應 Ally
intPair getDefaultCoord(int id);
取得該 ID 對應 Ally 之預設座標
- int Ally 之 ID
- intPair(x, y) 座標
Player(int baseX, int baseY, int heroes);
建構子
- int baseX, baseY 己方主堡位置
- int 英雄總數
std::istream &operator>>(std::istream &is, Player &player);
進行回合輸入之運算子多載
- std::istream 左運算元
- Player& 右運算元 ( 玩家本身 )