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

📄 global.cpp

📁 本程序是2005年参加中国机器人大赛的比赛程序
💻 CPP
字号:
// Global.cpp: implementation of the Global class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Robocup.h"
#include "Global.h"
#include "Decision.h"
#include "DecisionThread.h"
#include "videodlg.h"
#include "monitor.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//视觉的全局变量
DWORD   pPhysAddr;
DWORD	pHandle;
DWORD	pPage;
DWORD	pLineAddr;
DWORD   sum;
BYTE    YUV[256][256][256][3];
BYTE	YUVClass[256][9][3];//0-255级颜色,9种颜色,三个颜色坐标

//决策
Player g_MyTeam[g_TeamSize];//我方球员实例
Player g_TheirTeam[g_TeamSize];
Ball   g_Ball;
bool   isScanMyteam[g_TeamSize];
bool   isScanTheirteam[g_TeamSize];
bool   isScanBall;
//注意在下半场让我方与对方球门的位置初始化的值改变!!!!!!!
Vector m_MyGoal(40,250);//我方球门位置
Vector m_OpponentGoal(590,250);//对方球门位置初始化!!!
CRect  g_LeftTopRect;
CRect  g_RightTopRect;
CRect  g_LeftBottomRect;
CRect  g_RightBottomRect;
HANDLE	HMutex;
int Num[4];
Monitor monitor;
BOOL	StopFlag=0;
BOOL	DeciFlag=0;//默认为从左向右
//五个机器人的决策
CDecision  g_Deci[5];
CDecisionThread* pDThread=new CDecisionThread;
CDecisionThread* pDThread2=new CDecisionThread;
unsigned long timestart=GetTickCount();

void PASCAL MMProc_TurnTo(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
	timeKillEvent(wTimerID);
/*	UINT flag=timeKillEvent(wTimerID);
	if(flag==MMSYSERR_INVALPARAM)
	{
		AfxMessageBox("Timer doesnt exist");
	}
	if(flag==TIMERR_NOERROR )
	{
		CString str;
		str.Format("KillTimer %u",wTimerID);
		AfxMessageBox(str);
	}
*/
//	fprintf(Player::pFile,"ID_turnto Proc\n");
//	fprintf(Player::pFile,"Timer proc for turnto start at %u ms\n",GetTickCount()-timestart);
	Player * p_Player =(Player*)dwUser;
	p_Player->BasicAct(0,0,0,0);

//	Player::depth[p_Player->Get_Num()]--;
//	if((Player::depth[p_Player->Get_Num()])>=0)
//	{
//		p_Player->TurnTo(g_Ball.Get_vPos(),Player::depth[p_Player->Get_Num()]);
//	}
}
//
/*
void PASCAL MMProc_Shoot4Debug(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
	timeKillEvent(wTimerID);
	UINT flag=timeKillEvent(wTimerID);
	fprintf(Player::pFile,"ID_SHOOT Proc\n");
	if(flag==MMSYSERR_INVALPARAM)
	{
		AfxMessageBox("Timer doesnt exist");
	}
	if(flag==TIMERR_NOERROR )
	{
		CString str;
		str.Format("KillTimer shoot fordebug %u",wTimerID);
		AfxMessageBox(str);
	}

//	Player::KillMMTimer(wTimerID);
	fprintf(Player::pFile,"Timer proc for shoot start at %u ms\n",GetTickCount()-timestart);
	Player *player=(Player*)dwUser;
//	player->BasicAct(0,0,0,0);
	player->Shoot4Debug();
}*/
/*
void PASCAL MMProc_Stop(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
//	fprintf(Player::pFile,"ID_stop Proc\n");
	Player::KillMMTimer(wTimerID);
//	fprintf(Player::pFile,"Timer proc for shoot start at %u ms\n",GetTickCount()-timestart);
	Player *player=(Player*)dwUser;
	player->BasicAct(0,0,0,0);
}
*/
void PASCAL MMProc_MoveTo(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
//	fprintf(Player::pFile,"ID_stop Proc\n");
	timeKillEvent(wTimerID);
//	fprintf(Player::pFile,"Timer proc for shoot start at %u ms\n",GetTickCount()-timestart);
//	Player *player=(Player*)dwUser;
//	player->BasicAct(0,0,0,0);
//	player->MoveTo4Debug();
}
/*
void PASCAL MMProc_Decision(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
		timeKillEvent(wTimerID);
	//	fprintf(Player::pFile,"ID_DECISION Proc\n");
	//	FILE *pFile;	
	//	pFile=fopen("good.txt","a+");
	//	int t=GetTickCount();
	//	fprintf(pFile," \n\n\n\n\nRestart at %d\t\n",t);
	//	fclose(pFile);
		pDThread->CreatNewThread();
}
*/
/*
void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerID,DWORD dwTime)
{
	UINT timer;
	timer=nTimerID/5;
	switch(timer)
	{
	case ID_TIMER/5:
	{
	//	KillMyTimer(nTimerID,CDebugDlg::m_pDebugDlg->m_hWnd);

		DWORD t1;
		t1=GetTickCount()-timestart;
	//	fprintf(Player::pFile,"ID_TIMER Proc\n");
	//	Player::m_sTimeMap[nTimerID]->TurnTo4Debug(g_Ball.Get_vPos());
		//	CDebugDlg::m_pDebugDlg->OnTurntoball();
		break;//一定要加break!!!!!!!!!!!!!!!!!!!已经被实验所证明了!!!!!
	}


	case ID_TIMER_4_TURNTOANGLE/5:
	{
	//	CString str;
	//	str.Format("timer proc for %u",nTimerID);
	//	AfxMessageBox(str);
	//	Player::KillMyTimer(nTimerID,CDebugDlg::m_pDebugDlg->m_hWnd);
//		DWORD t1;
//		t1=GetTickCount();;
//		CDebugDlg::m_pDebugDlg->m_timerid=nTimerID;
//		CDebugDlg::m_pDebugDlg->UpdateData(false);
	//	fprintf(Player::pFile2,"TimerProc for ID_TIMER_4_TURNTOANGLE player number is %d nIDTimer=%u\n",Player::m_sTimeMap[nTimerID]->Get_Num(),nTimerID);
	//	Player::m_sTimeMap[nTimerID]->BasicAct(0,0,0,0);
	//	Player::m_sTimeMap.RemoveKey(nTimerID);
//		fprintf(Player::pFile,"TimerProc stop at %u ms\n",GetTickCount()-timestart);
//		SetEvent(Player::basicact);
		break;
	}

	case ID_TIMER4MOVETO/5:
	{
	///	Player::KillMyTimer(nTimerID,CDebugDlg::m_pDebugDlg->m_hWnd);
	//	Player::m_sTimeMap[nTimerID]->BasicAct(0,0,0,0);

		
	}


	case ID_SHOOT/5:
	{
		fprintf(Player::pFile,"ID_SHOOT Proc\n");
	//	Player::KillMyTimer(nTimerID,CDebugDlg::m_pDebugDlg->m_hWnd);
	//	fprintf(Player::pFile,"Timer proc for shoot start at %u ms\n",GetTickCount()-timestart);
	//	g_MyTeam[CDebugDlg::m_pDebugDlg->m_team*5+CDebugDlg::m_pDebugDlg->m_number-1].BasicAct(0,0,0,0);//CDebugDlg::m_pDebugDlg->m_team*5+CDebugDlg::m_pDebugDlg->m_number-1
	//	Player::m_sTimeMap[nTimerID]->Shoot4Debug();
		break;
	}
	case ID_BASICACT/5:
	{
		fprintf(Player::pFile,"ID_BASICACT Proc\n");
	//	Player::KillMyTimer(nTimerID,CDebugDlg::m_pDebugDlg->m_hWnd);
	//	Player::m_sTimeMap[nTimerID]->BasicAct(0,0,0,0);	
		break;
	}
	case ID_DECISIONPROC/5://重新启动视觉和决策的同步
	{
//		Player::KillMyTimer(nTimerID,CDebugDlg::m_pDebugDlg->m_hWnd);
		fprintf(Player::pFile,"ID_DECISION Proc\n");
		FILE *pFile;	
		pFile=fopen("good.txt","a+");
		int t=GetTickCount();
		fprintf(pFile," \n\n\n\n\nRestart at %d\t\n",t);
		fclose(pFile);
		pDThread->CreatNewThread();
		break;
	}
	default:break;
	}

	return;
}
*/

⌨️ 快捷键说明

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