worldmodel.cpp
来自「2002年」· C++ 代码 · 共 219 行
CPP
219 行
#include "worldmodel.h"
#include "utils.h"
#include "agent.h"
#include "log.h"
namespace wm
{
Situation situation;
Formation formation;
Field FieldInfo;
Pitch PitchInfo;
PlayerType playertypes[SP_player_types];
Ball ball;
Player MyTeam[SP_team_size];
Player TheirTeam[SP_team_size];
MySelf Self;
UnknownPlayerList UnknownTheirPlayerList;
UnknownPlayerList UnknownMyPlayerList;
UnknownPlayerList TeamlessPlayerList;
Player NULLPLAYER;
void InitializeObjs(){
/* If I am on the right half of the court, all the coordinates shall be rotated */
bool rotate = false;
if (situation.MySide == 'l'){
rotate = false;
}
else if (situation.MySide == 'r'){
rotate = true;
}
else{
my_error("Which side do i take?");
}
int i;
PitchInfo.Initialize(rotate);
/********** Intialize Players ****************************************/
for(i=0; i < SP_team_size; i++){
MyTeam[i].ChangeType(0);
MyTeam[i].set_conf_param(ClientParam::conf_max, ClientParam::conf_decay, ClientParam::min_valid_conf);
MyTeam[i].set_objtype(OBJ_Player);
MyTeam[i].set_side(Side_My);
MyTeam[i].set_inside_no(i+1);
MyTeam[i].SetRole(FieldParam::FP_attackness[i], FieldParam::FP_leftness[i], FieldParam::FP_aggressiveness[i], FieldParam::FP_creativeness[i]);
TheirTeam[i].ChangeType(0);
TheirTeam[i].set_conf_param(ClientParam::conf_max, ClientParam::conf_decay, ClientParam::min_valid_conf);
TheirTeam[i].set_objtype(OBJ_Player);
TheirTeam[i].set_inside_no(i+1+SP_team_size);
TheirTeam[i].set_side(Side_Opp);
}
UnknownMyPlayerList.set_side(Side_My);
UnknownTheirPlayerList.set_side(Side_Opp);
TeamlessPlayerList.set_side(Side_Unknown);
Self.set_inside_no(Agent::MyNumber);
Self.ChangeType(0);
Self.set_conf_param(ClientParam::conf_max, ClientParam::conf_decay, ClientParam::min_valid_conf);
Self.Is_goalie = ClientParam::goalie;
/********** Intialize ball ****************************************/
ball.set_speed_param(ServerParam::ball_speed_max,ServerParam::ball_decay);
ball.set_conf_param(ClientParam::conf_max, ClientParam::conf_decay, ClientParam::min_ball_valid_conf);
ball.set_objtype(OBJ_Ball);
if (!formation.FMDefenseNet.RestoreNet(ClientParam::FM_defense_weightfile)){
my_error("load weight file %s failed", ClientParam::FM_defense_weightfile);
}
if (!formation.FMOffenseNet.RestoreNet(ClientParam::FM_offense_weightfile)){
my_error("load weight file %s failed", ClientParam::FM_offense_weightfile);
}
if (!FieldInfo.OffSensitivityNet.RestoreNet(ClientParam::Off_sen_weightfile)){
my_error("load weightfile %s failed", ClientParam::Off_sen_weightfile);
}
if (!FieldInfo.DF_SensitivityNet.RestoreNet(ClientParam::DF_Sensitivity_weightfile)){
my_error("load weightfile %s failed", ClientParam::DF_Sensitivity_weightfile);
}
/********** Initialize My Role **********************************/
Self.SetRole(ClientParam::attackness, ClientParam::leftness, ClientParam::aggressiveness, ClientParam::creativeness);
/********* Set Formations *********************************/
formation.SetFormation();
/********* set field information ************************************/
FieldInfo.Initialize();
if(FieldInfo.IsValidmygoalie())
MyPlayer(FieldInfo.mygoalie).Is_goalie = true;
if(FieldInfo.IsValidtheirgoalie())
TheirPlayer(FieldInfo.theirgoalie).Is_goalie = true;
}
Player& GetPlayer(char side, UNum No){
return (side == situation.MySide) ? MyPlayer(No) : TheirPlayer(No);
}
Player& GetPlayer(UNum No){
if (No == Agent::MyNumber)
return Self;
if (No > 0){
int seg = (No -1 ) / SP_team_size;
int rem = (No -1) % SP_team_size;
switch(seg){
case 0:
return MyTeam[rem];
case 1:
return TheirTeam[rem];
case 2:
case 3:
#ifdef _DEBUG_MOD
if (!UnknownMyPlayerList.IsIdxValid(rem)){
DoLog(LOG_BUG, "unkmy bug here %d", No);
break;
}
#endif
return *UnknownMyPlayerList.List[rem];
case 4:
case 5:
#ifdef _DEBUG_MOD
if(!UnknownTheirPlayerList.IsIdxValid(rem)){
DoLog(LOG_BUG, "unktheir bug here %d", No);
break;
}
#endif
return *UnknownTheirPlayerList.List[rem];
case 6:
#ifdef _DEBUG_MOD
if(!TeamlessPlayerList.IsIdxValid(rem)){
DoLog(LOG_BUG, "teamless bug here No %d", No);
break;
}
#endif
return *TeamlessPlayerList.List[rem];
}
}
else{
DoLog(LOG_BUG, "why no <= 0 1 %d", No);
}
return NULLPLAYER;
}
Player& TheirPlayer(UNum No){
if (No > 0){
int seg = (No -1 ) / SP_team_size;
int rem = (No -1) % SP_team_size;
switch(seg){
case 0:
case 1:
return TheirTeam[rem];
case 4:
case 5:
#ifdef _DEBUG_MOD
if(!UnknownTheirPlayerList.IsIdxValid(rem)){
DoLog(LOG_BUG, "unktheir bug here 1 %d", No);
break;
}
#endif
return *UnknownTheirPlayerList.List[rem];
case 6:
#ifdef _DEBUG_MOD
if(!TeamlessPlayerList.IsIdxValid(rem)){
DoLog(LOG_BUG, "(their)teamless bug here No %d", No);
break;
}
#endif
return *TeamlessPlayerList.List[rem];
}
}
else{
#ifdef _DEBUG_MOD
DoLog(LOG_BUG, "why no <= 0 3 %d", No);
#endif
}
return NULLPLAYER;
}
Player& MyPlayer(UNum No){
if (No == Agent::MyNumber)
return Self;
if (No > 0){
int seg = (No -1 ) / SP_team_size;
int rem = (No -1) % SP_team_size;
switch(seg){
case 0:
return MyTeam[rem];
case 2:
case 3:
#ifdef _DEBUG_MOD
if (!UnknownMyPlayerList.IsIdxValid(rem)){
DoLog(LOG_BUG, "unkmy bug here 1 %d", No);
break;
}
#endif
return *UnknownMyPlayerList.List[rem];
case 6:
#ifdef _DEBUG_MOD
if(!TeamlessPlayerList.IsIdxValid(rem)){
DoLog(LOG_BUG, "(my)teamless bug here No %d", No);
break;
}
#endif
return *TeamlessPlayerList.List[rem];
}
}
else{
#ifdef _DEBUG_MOD
DoLog(LOG_BUG, "why no <= 0 2 %d", No);
#endif
}
return NULLPLAYER;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?