📄 utils.cpp
字号:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include "utils.h"
#include "client.h"
#include "paramreaderutil.h"
#include "log.h"
#include "clientparam.h"
#include "serverparam.h"
//#include "worldmodel.h"
#include "perceptron.h"
//#include "skill.h"
#include "agent.h"
#ifdef _WINDOWS
#define TEXT_OUT 30000
extern HWND hWND;
#endif
/***************************** my_error **********************************/
char error[CP_MaxLines][8096];
int current = ClientParam::MaxLines;
int lines = -1;
char outstring[1000];
#ifdef _WINDOWS
int enable_my_error = 0;
#else // _LINUX
int enable_my_error = 1;
#endif
/* Set Log */
void my_error(char *format,...)
{
#ifdef _LINUX
if (!enable_my_error) return;
va_list argptr;
va_start(argptr,format);
vsprintf(outstring, format, argptr);
va_end(argptr);
printf("%s (player %d, time %d): %s\n", MyTeamName,
Agent::MyNumber, situation.CurrentTime, outstring);
#endif
return;
}
/******** Get Options from command lines or file ******************************/
void GetOptions(int argc,char** argv){
option_t opt[] = {
{"log_dir", (void *)&ClientParam::logdir, V_STRING},
{"pas_file", (void *)&ClientParam::pasfile, V_STRING},
{"fm_offense_weight_file", (void *)&ClientParam::FM_offense_weightfile, V_STRING},
{"fm_defense_weight_file", (void *)&ClientParam::FM_defense_weightfile, V_STRING},
{"cb_weight_file", (void*)&ClientParam::CB_weightfile, V_STRING},
{"offsen_weight_file", (void *)&ClientParam::Off_sen_weightfile, V_STRING},
{"df_sensitivity_weight_file", (void *)&ClientParam::DF_Sensitivity_weightfile, V_STRING},
{"mark_weight_file", (void *)&ClientParam::Mark_priority_weightfile, V_STRING},
{"block_weight_file", (void *)&ClientParam::Block_priority_weightfile, V_STRING},
{"kick_oa_weightfile_a", (void *)&ClientParam::KickOA_weightfile_A, V_STRING},
{"kick_oa_weightfile_b", (void *)&ClientParam::KickOA_weightfile_B, V_STRING},
{"kick_oa_weightfile_c", (void *)&ClientParam::KickOA_weightfile_C, V_STRING},
{"kick_oa_weightfile_d", (void *)&ClientParam::KickOA_weightfile_D, V_STRING},
{"deviation_weight_file", (void *)&ClientParam::deviation_weightfile,V_STRING},
{"df_formation_priority_file", (void *)&ClientParam::DF_formation_priority_file,V_STRING},
{"df_press_priority_file", (void *)&ClientParam::DF_press_priority_file,V_STRING},
{"reconnect", (void *)&ServerParam::IP_reconnect, V_INT},
{"team_name", (void *)&MyTeamName, V_STRING},
{"goalie", (void *)&ClientParam::goalie, V_ONOFF},
{"UNum", (void *)&ClientParam::Number, V_INT},
{"player_1_attackness", (void *)&FieldParam::FP_attackness[0], V_FLOAT},
{"player_1_leftness", (void *)&FieldParam::FP_leftness[0], V_FLOAT},
{"player_1_aggressiveness", (void *)&FieldParam::FP_aggressiveness[0], V_FLOAT},
{"player_1_creativeness", (void *)&FieldParam::FP_creativeness[0], V_FLOAT},
{"player_2_attackness", (void *)&FieldParam::FP_attackness[1], V_FLOAT},
{"player_2_leftness", (void *)&FieldParam::FP_leftness[1], V_FLOAT},
{"player_2_aggressiveness", (void *)&FieldParam::FP_aggressiveness[1], V_FLOAT},
{"player_2_creativeness", (void *)&FieldParam::FP_creativeness[1], V_FLOAT},
{"player_3_attackness", (void *)&FieldParam::FP_attackness[2], V_FLOAT},
{"player_3_leftness", (void *)&FieldParam::FP_leftness[2], V_FLOAT},
{"player_3_aggressiveness", (void *)&FieldParam::FP_aggressiveness[2], V_FLOAT},
{"player_3_creativeness", (void *)&FieldParam::FP_creativeness[2], V_FLOAT},
{"player_4_attackness", (void *)&FieldParam::FP_attackness[3], V_FLOAT},
{"player_4_leftness", (void *)&FieldParam::FP_leftness[3], V_FLOAT},
{"player_4_aggressiveness", (void *)&FieldParam::FP_aggressiveness[3], V_FLOAT},
{"player_4_creativeness", (void *)&FieldParam::FP_creativeness[3], V_FLOAT},
{"player_5_attackness", (void *)&FieldParam::FP_attackness[4], V_FLOAT},
{"player_5_leftness", (void *)&FieldParam::FP_leftness[4], V_FLOAT},
{"player_5_aggressiveness", (void *)&FieldParam::FP_aggressiveness[4], V_FLOAT},
{"player_5_creativeness", (void *)&FieldParam::FP_creativeness[4], V_FLOAT},
{"player_6_attackness", (void *)&FieldParam::FP_attackness[5], V_FLOAT},
{"player_6_leftness", (void *)&FieldParam::FP_leftness[5], V_FLOAT},
{"player_6_aggressiveness", (void *)&FieldParam::FP_aggressiveness[5], V_FLOAT},
{"player_6_creativeness", (void *)&FieldParam::FP_creativeness[5], V_FLOAT},
{"player_7_attackness", (void *)&FieldParam::FP_attackness[6], V_FLOAT},
{"player_7_leftness", (void *)&FieldParam::FP_leftness[6], V_FLOAT},
{"player_7_aggressiveness", (void *)&FieldParam::FP_aggressiveness[6], V_FLOAT},
{"player_7_creativeness", (void *)&FieldParam::FP_creativeness[6], V_FLOAT},
{"player_8_attackness", (void *)&FieldParam::FP_attackness[7], V_FLOAT},
{"player_8_leftness", (void *)&FieldParam::FP_leftness[7], V_FLOAT},
{"player_8_aggressiveness", (void *)&FieldParam::FP_aggressiveness[7], V_FLOAT},
{"player_8_creativeness", (void *)&FieldParam::FP_creativeness[7], V_FLOAT},
{"player_9_attackness", (void *)&FieldParam::FP_attackness[8], V_FLOAT},
{"player_9_leftness", (void *)&FieldParam::FP_leftness[8], V_FLOAT},
{"player_9_aggressiveness", (void *)&FieldParam::FP_aggressiveness[8], V_FLOAT},
{"player_9_creativeness", (void *)&FieldParam::FP_creativeness[8], V_FLOAT},
{"player_10_attackness", (void *)&FieldParam::FP_attackness[9], V_FLOAT},
{"player_10_leftness", (void *)&FieldParam::FP_leftness[9], V_FLOAT},
{"player_10_aggressiveness", (void *)&FieldParam::FP_aggressiveness[9], V_FLOAT},
{"player_10_creativeness", (void *)&FieldParam::FP_creativeness[9], V_FLOAT},
{"player_11_attackness", (void *)&FieldParam::FP_attackness[10], V_FLOAT},
{"player_11_leftness", (void *)&FieldParam::FP_leftness[10], V_FLOAT},
{"player_11_aggressiveness", (void *)&FieldParam::FP_aggressiveness[10], V_FLOAT},
{"player_11_creativeness", (void *)&FieldParam::FP_creativeness[10], V_FLOAT},
{"goalie_number", (void *)&FieldParam::FP_goalie_number , V_INT},
{"shoot_avoidgoalie", (void *)&ClientParam::shoot_avoidgoalie , V_FLOAT},
{"\0", NULL, V_NONE}
} ;
int i = 0;
ParamReader paramreader;
while(true){
if(opt[i].optname[0] == 0) break;
paramreader.AddItem(opt[i]);
i++;
}
i = 0;
while(true){
if(ServerParam::OptionList[i].optname[0] == 0) break;
paramreader.AddItem(ServerParam::OptionList[i]);
i++;
}
paramreader.GetOptions(argc, argv);
#ifdef _OffClient
#ifdef _Off_Client_Num
ClientParam::Number = _Off_Client_Num;
#endif
#endif
/*****************************************************************/
ServerParam::half_time = ServerParam::half_time * 1000 / ServerParam::simulator_step ;
ServerParam::kickable_area = ServerParam::kickable_margin + ServerParam::ball_size + ServerParam::player_size ;
if ( !ClientParam::goalie )
ClientParam::goalie = bool(ClientParam::Number == FieldParam::FP_goalie_number);
if (ServerParam::IP_reconnect)
ClientParam::Number = ServerParam::IP_reconnect;
Perceptron::MyTeamNameLen = strlen(Perceptron::MyTeamName);
char fname_templet[100];
strcpy(fname_templet, ClientParam::logdir);
int t_len = strlen(fname_templet);
if(fname_templet[t_len-1] != '/' && fname_templet[t_len-1] != '\\'){
strcat(fname_templet, "/");
}
strcat(fname_templet, MyTeamName);
strcpy(ClientParam::matfile, fname_templet);
strcat(ClientParam::matfile, "_mat");
#ifdef _OffClient
strcat(fname_templet,"_off");
#endif
strcpy(ClientParam::logfile, fname_templet);
strcat(ClientParam::logfile, "_log");
strcpy(ClientParam::recfile, fname_templet);
strcat(ClientParam::recfile, "_rec");
char n[10];
sprintf(n,"_%d",ClientParam::Number);
strcat(ClientParam::matfile, n);
strcat(ClientParam::logfile, n);
strcat(ClientParam::recfile, n);
ClientParam::attackness = FieldParam::FP_attackness[Idx(ClientParam::Number)];
ClientParam::leftness = FieldParam::FP_leftness[Idx(ClientParam::Number)];
ClientParam::aggressiveness = FieldParam::FP_aggressiveness[Idx(ClientParam::Number)];
ClientParam::creativeness = FieldParam::FP_creativeness[Idx(ClientParam::Number)];
sprintf(ClientParam::appname, "%s-No.%d", MyTeamName, ClientParam::Number);
ServerParam::ball_decay_ln = (float)log(ServerParam::ball_decay);
ClientParam::turnball_radius_threshold = ServerParam::ball_size + ServerParam::player_size + ClientParam::collision_buffer;
ServerParam::semi_pitch_length = ServerParam::pitch_length / 2;
ServerParam::semi_pitch_width = ServerParam::pitch_width / 2;
ServerParam::midfieldline = ServerParam::semi_pitch_length * 0.48f;
ServerParam::backfieldline = -ServerParam::semi_pitch_length * 0.285f;
ServerParam::left_wing = - ServerParam::semi_pitch_width * 0.353f;
ServerParam::right_wing = -ServerParam::left_wing;
ClientParam::control_margin = ServerParam::kickable_area + 0.15f;
ServerParam::pitch_diameter = (float)sqrt(Sqr(ServerParam::pitch_width) + Sqr(ServerParam::pitch_length));
ClientParam::safecatch_width = (float)sqrt(Sqr(ServerParam::catch_area_l) - Sqr(ServerParam::ball_speed_max /2));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -