📄 global.cpp
字号:
/*
Copyright (C) 2001 Tsinghuaeolus
Authors : ChenJiang, YaoJinyi, CaiYunpeng, Lishi
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
If you make any changes or have any comments we would appreciate a
message to yjy01@mails.tsinghua.edu.cn.
*/
#include "stdafx.h"
#include "Sensory.h"
#include "Command.h"
#include "global.h"
HWND hWND;
//**************Global variants**************************
char MyTeamName[30]="";
int MyTeamNameLen=15;
char TheirTeamName[30]="";
int TheirTeamNameLen;
int IP_reconnect = 0;
int IP_MyScore;
int IP_TheirScore;
Situation situation;
UNum MyNumber = -1;
Player MyTeam[SP_team_size];
Player TheirTeam[SP_team_size];
Player UnknownMyPlayers[2 * SP_team_size];
int num_unknown_myplayers;
Player UnknownTheirPlayers[2 * SP_team_size];
int num_unknown_theirplayers;
Player TeamlessPlayers[4 * SP_team_size];
int num_teamlessplayers;
Ball ball;
Object Markers[SP_num_markers+1];
Object Lines[SP_num_lines+1];
Socket *sock;
Actions action;
Behaviors motion;
Sensory sensory;
Kick kick;
char cmdbuf[MAXMESG] = "";
char recvbuf[MAXMESG] = "";
char logbuf[MAXMESG] = "";
char saybuf[MAXMESG] = "";
char msgbuf[MAXMESG]= "";
char recbuf[MAXMESG];
Log rec;
Log recmsg;
LogData logdata;
FILE* fmatrix[CP_matrix_max];
Stopwatch watch;
MySelf Self;
Player NULLPLAYER;
Player& GetPlayer(char side, UNum No){
return (side == situation.MySide) ? MyPlayer(No) : TheirPlayer(No);
}
Player& GetPlayer(UNum No){
if (No == 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 == 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;
}
bool IsUniformNo(UNum No){
return No >0 && No <= SP_team_size;
}
bool IsValidNo(UNum No){
return No > 0 && No <= 7 * SP_team_size;
}
bool IsMyPlayer(UNum No){
if (No <= 0) return false;
int seg = (No -1 ) / SP_team_size;
int rem = (No -1) % SP_team_size;
switch(seg){
case 0:
return true;
case 2:
case 3:
return unknownmyplayerlist.IsIdxValid(rem);
case 6:
return teamlessplayerlist.IsIdxValid(rem);
}
return false;
}
bool IsTheirPlayer(UNum No){
if (No <= 0) return false;
int seg = (No -1 ) / SP_team_size;
int rem = (No -1) % SP_team_size;
switch(seg){
case 0:
case 1:
return true;
case 4:
case 5:
return unknowntheirplayerlist.IsIdxValid(rem);
case 6:
return teamlessplayerlist.IsIdxValid(rem);
}
return false;
}
bool IsUnknownPlayer(UNum No){
return bool(No <= 0 || No > 2 * SP_team_size);
}
bool Prepare_to_train = true;
bool Training_Successful = false;
int trainNo = 0;
Mediator mediator;
Formation fm;
Field fieldinfo;
UnknownPlayerList unknowntheirplayerlist;
UnknownPlayerList unknownmyplayerlist;
UnknownPlayerList teamlessplayerlist;
int ServerAlive = 0;
int NoResponseFromServer = 0;
PlayerType playertypes[SP_max_playertypes];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -