⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 global.cpp

📁 RoboCup仿真组世界冠军源代码
💻 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 + -