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

📄 types.h

📁 RoboCup仿真组世界冠军源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/*
    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.
*/

#ifndef _type
#define _type
#include <stdlib.h>
#include "utils.h"

#ifndef _DEBUG_MOD
#define _DEBUG_MOD
#endif

#define TEXT_OUT 30000

enum SenseType{See_Msg,Sense_Msg,Hear_Msg,SP_Msg,SC_Msg,PP_Msg,PT_Msg,No_Msg};
enum VIEWQUALITY{VQ_High,VQ_Low};
enum VIEWWIDTH{VW_Narrow,VW_Normal,VW_Wide}; 
enum VWTime{VWT_Current,VWT_Future};

typedef int Time;
typedef int UNum;
typedef float AngleDeg;

#define PI 3.14159f
#define InvalidAngle 360.0f

enum MarkerType{
	Goal_L,
	Goal_R,

	Flag_C,
	Flag_CT,
	Flag_CB,
	Flag_LT,
	Flag_LB,
	Flag_RT,
	Flag_RB,

	Flag_PLT,
	Flag_PLC,
	Flag_PLB,
	Flag_PRT,
	Flag_PRC,
	Flag_PRB,

	Flag_GLT,
	Flag_GLB,
	Flag_GRT,
	Flag_GRB,

	Flag_TL50,
	Flag_TL40,
	Flag_TL30,
	Flag_TL20,
	Flag_TL10,
	Flag_T0,
	Flag_TR10,
	Flag_TR20,
	Flag_TR30,
	Flag_TR40,
	Flag_TR50,

	Flag_BL50,
	Flag_BL40,
	Flag_BL30,
	Flag_BL20,
	Flag_BL10,
	Flag_B0,
	Flag_BR10,
	Flag_BR20,
	Flag_BR30,
	Flag_BR40,
	Flag_BR50,
	Flag_LT30,
	Flag_LT20,
	Flag_LT10,
	Flag_L0,
	Flag_LB10,
	Flag_LB20,
	Flag_LB30,
	
	Flag_RT30,
	Flag_RT20,
	Flag_RT10,
	Flag_R0,
	Flag_RB10,
	Flag_RB20,
	Flag_RB30,
	No_Marker
};
enum PlayerSide{
	Side_My,
	Side_Opp,
	Side_Unknown,
};
enum ObjType{
	OBJ_Line,
	OBJ_Ball,
	OBJ_Marker,
	OBJ_Marker_Behind,  // Not seen but sensed obj
	OBJ_Player
};

enum SideLine{
	SL_Left,
	SL_Right,
	SL_Top,
	SL_Bottom,

	SL_No_Line
};


enum PlayMode{ 
	PM_No_Mode,	
	PM_Before_Kick_Off,
	PM_My_Kick_Off,
	PM_Their_Kick_Off,
	PM_My_Kick_In,
	PM_Their_Kick_In,
	PM_My_Corner_Kick,
	PM_Their_Corner_Kick,
	PM_My_Goal_Kick,
	PM_Their_Goal_Kick,
	PM_My_Free_Kick,
	PM_Their_Free_Kick,
	PM_My_Goalie_Free_Kick,     /* not a real play mode */
	PM_Their_Goalie_Free_Kick,  /* not a real play mode */
	PM_Drop_Ball,
	PM_My_Offside_Kick,
	PM_Their_Offside_Kick,
	PM_Play_On,
	PM_Half_Time,
	PM_Time_Up,
	PM_Extended_Time
};

enum KickOff_Mode{
	KickOff_Mine,
	KickOff_Theirs
};

enum CMDType {
	CMD_none,
	CMD_dash,
	CMD_turn,
	CMD_kick,
	CMD_say,
	CMD_turn_neck,
	CMD_catch,
	CMD_move,
	CMD_bye,
	CMD_change_view,
	CMD_sense_body,
	CMD_donothing,
	CMD_stay
};

enum ActionType{
	Action_none,
	Action_interception,

	Action_positioning_offense,
	Action_positioning_defense,
	Action_positioning_block,
	Action_positioning_mark,
	Action_positioning_coordinate,
	Action_positioning_setplay,
	Action_press,

	Action_passwait,
	Action_pass,
	Action_shoot,
	Action_dribble,
	Action_fastdribble,
	Action_catch,
	Action_turn_ball,
	Action_holdball,
	Action_avoidenemy,
	Action_clear,

	Action_visual,	
	
	Action_other
};

enum InputType{
	V_INT,
	V_FLOAT,
	V_BOOL,
	V_STRING,
	V_ONOFF,
	V_NONE
};

struct option_t {
   char	optname[50] ;
   void	*vptr ;
   InputType  vsize ;
};


#define PriorityA 1.0f
#define PriorityA_ 0.9f
#define PriorityB 0.8f
#define PriorityB_ 0.7f
#define PriorityC 0.6f
#define PriorityC_ 0.5f
#define PriorityD 0.4f
#define PriorityD_ 0.3f
#define PriorityE 0.2f
#define PriorityE_ 0.1f
#define NoPriority 0.0f
#define ALittlePriority 0.01f
#define QuarterPriority 0.025f
#define HalfPriority 0.05f
#define FifthPriority 0.02f
#define PriorityLevel 0.1f

#define Urgency_Crisis 0.9f 
#define Urgency_High 0.8f
#define Urgency_HalfHigh 0.7f
#define Urgency_Normal 0.6f
#define Urgency_HalfLow 0.45f
#define Urgency_Low 0.3f

#define InfCycles 1000.0f

enum TurnDir{
	Turn_none = 0,
	Turn_cw = 1,
	Turn_ccw = -1,
	Turn_avoid = 2,
};

enum KT_Res{
	KT_turnball,
	KT_lostball,
	KT_stopball,
	KT_kickaway,
	KT_success,
	KT_adjustball,
	KT_accelerate,
};

enum DR_Mode{
	DR_left = 1,
	DR_right = -1
};

enum KK_Mode{
	KK_fast,
	KK_slow
};

enum DribbleAction{
	DR_NoAction,
	DR_Turn,
	DR_KickTurn,
	DR_KickAdjust,
	DR_Dash,
	DR_KickForward
};

enum VS_mode{
	VS_normal,
	VS_noturn
};

enum SP_State{
	SPST_Initialize,
	SPST_Prego,
	SPST_ExecWait,
	SPST_Executing,
	SPST_AfterExec
};

enum GameState{
	GS_Before_Kick_Off,
	GS_Playing,
	GS_Their_PlaceKick,
	GS_My_PlaceKick,
	GS_Other
};

struct PlayerType{
public:
	int id;
	float player_speed_max;
	float stamina_inc_max;
	float player_decay;
	float inertia_moment;
	float dash_power_rate;
	float player_size;
	float kickable_margin;
	float kick_rand;
	float extra_stamina;
	float effort_max;
	float effort_min;
};

enum VisualObjType{
	VO_none,
	VO_ball,
	VO_player,
	VO_route,
	VO_ground
};

/*	Timed Data	*/
template <class Data> class TimedData{
public:
	TimedData(Time time = -2){ this->time = time;}
	TimedData(const Data& data, Time time){ this->data = data; this->time = time;}
	void Setdata(const Data& data, Time time){ this->data = data; this->time = time;}
	Data data;
	Time time;
	void operator = (const Data& d){ data = d;}
	TimedData operator + (TimedData d){ return TimedData(data + d, time);}
	TimedData operator - (TimedData d){ return TimedData(data - d, time);}
	TimedData operator / (TimedData d){ return TimedData(data / d, time);}
	TimedData operator * (TimedData d){ return TimedData(data * d, time);}
	/*Data operator + (Data d){ return data + d;}
	Data operator - (Data d){ return data - d;}
	Data operator / (Data d){ return data / d);}
	Data operator * (Data d){ return data * d;}
	void operator += (Data d){ data += d;}
	void operator -= (Data d){ data -= d;}
	void operator /= (Data d){ data /= d;}
	void operator *= (Data d){ data *= d;}
	bool operator == (Data d){ return bool(data == d);}
	bool operator != (Data d){ return bool(data != d);}
	bool operator >  (Data d){ return bool(data > d);}
	bool operator >= (Data d){ return bool(data >= d);}
	bool operator <  (Data d){ return bool(data < d);}
	bool operator <= (Data d){ return bool(data <= d);}*/
};

/*
template <class Data> Data operator + (Data d, TimedData<Data> timeddata){ return (timeddata.data + d);}
template <class Data> Data operator - (Data d, TimedData<Data> timeddata){ return (timeddata.data - d);}
template <class Data> Data operator / (Data d, TimedData<Data> timeddata){ return timeddata.data / d);}
template <class Data> Data operator * (Data d, TimedData<Data> timeddata){ return timeddata.data * d;}
template <class Data> void operator += (Data& d, TimedData<Data> timeddata){ d += timeddata.data;}
template <class Data> void operator -= (Data& d, TimedData<Data> timeddata){ d -= timeddata.data;}
template <class Data> void operator /= (Data& d, TimedData<Data> timeddata){ d /= timeddata.data;}
template <class Data> void operator *= (Data& d, TimedData<Data> timeddata){ d *= timeddata.data;}
template <class Data> bool operator == (Data d, TimedData<Data> timeddata){ return bool(timeddata.data == d);}
template <class Data> bool operator != (Data d, TimedData<Data> timeddata){ return bool(timeddata.data != d);}
template <class Data> bool operator >  (Data d, TimedData<Data> timeddata){ return bool(timeddata.data > d);}
template <class Data> bool operator >= (Data d, TimedData<Data> timeddata){ return bool(timeddata.data >= d);}
template <class Data> bool operator <  (Data d, TimedData<Data> timeddata){ return bool(timeddata.data < d);}
template <class Data> bool operator <= (Data d, TimedData<Data> timeddata){ return bool(timeddata.data <= d);}
*/
/*************	TimedDataArray	**********************/
template <class T, int size> class TimedDataArray{
private:
	TimedData<T> data[size];
	inline int Index(int idx){return idx % size >=0 ? idx % size : idx % size + size;}
public:	
	inline T& Data(int time){return data[Index(time)].data;}
	inline T ChkData(int time){return IsDataKnown(time) ? data[Index(time)].data : T(0);}
	inline bool IsDataKnown(int time){return data[Index(time)].time == time;}
	inline void Setdata(const T& data, int time){this->data[Index(time)].data = data; this->data[Index(time)].time = time;}
};

template <class T, int Tsize, int size> class Timed2D_Array{
private:
	TimedData<T[Tsize]> data[size];
	inline int Index(int idx){return idx % size >=0 ? idx % size : idx % size + size;}
public:	
	//inline T[]& Data(int time){return data[Index(time)].data;}	
	inline T& Data(int idx, int time){return data[Index(time)].data[idx];}
	inline bool IsDataKnown(int time){return data[Index(time)].time == time;}
	inline void Setdata(const T& data, int idx, int time){this->data[Index(time)].data[idx] = data; this->data[Index(time)].time = time;}
};

template <class T, int size> class TimedDataTri2DArray{
private:
	TimedData<T> data[size * (size -1) /2 + 1];
	inline int Index(int idx1, int idx2){
		if (!IsValidIdx(idx1, idx2))
			return size * (size -1) /2;//invalid unit
		
		if (idx1 > idx2)
			Swap(idx1, idx2);
		return (2 * size - 1  - idx1) * idx1 /2 + idx2 - idx1 - 1;
	}
public:
	inline bool IsValidIdx(int idx1, int idx2){
		if (idx1 < 0 || idx1 >= size){
		//wrong idx-1
			return false;
		}

		if (idx2 < 0 || idx2 >= size){
		//wrong idx-2
			return false;
		}

		if (idx1 == idx2){
		//wrong
			return false;
		}
		return true;
	}

	bool IsDataKnown(int idx1, int idx2, Time time){
		return data[Index(idx1, idx2)].time == time;
	}

	inline void SetData(const T& Data, int idx1, int idx2, Time time){
		data[Index(idx1, idx2)].data = Data;
		data[Index(idx1, idx2)].time = time;
	}

	inline void SetTime(int idx, int idx2, Time time){
		data[index(idx1, idx2)].time = time;
	}

	inline TimedData<T>& Element(int idx1, int idx2){ return data[Index(idx1, idx2)];}

	inline T& Data(int idx1, int idx2){return data[Index(idx1, idx2)].data;}
};

/*************	Ordered List	**********************/
template <class Data> class ListNode{
public:
	ListNode():next(NULL){}
	ListNode(Data d):next(NULL){data = d;}
	Data data;
	ListNode* next;
};

template <class Data> class OrderedList{
protected:
	ListNode<Data> * head, *pcurrent;
public:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -