示例#1
0
//==========================================================================================
// ExecHolder::Execute()
//==========================================================================================
// - Command function override
// - Holder "Autohold" state machine
//==========================================================================================
void ExecHolder::Execute() {
	Robot::holder->Execute();
	switch(state){
	case WAIT_FOR_BALL_TO_ENTER:
		WaitForBallToEnter();
		break;
	case GO_TO_FORWARD_LIMIT:
		GoToForwardLimit();
		break;
	case WAIT_FOR_PUSH_REQUEST:
		WaitForPushRequest();
		break;
	case WAIT_FOR_BALL_TO_LEAVE:
		WaitForBallToLeave();
		break;
	case GO_TO_REVERSE_LIMIT:
		GoToReverseLimit();
		break;
	case REMOVE_BALL:
		RemoveBall();
		break;
	case PUSH_ERROR:
		PushError();
		break;
	}
}
示例#2
0
void Holder::AutoHold(){
	switch(state){
	case FIND_ZERO:
		FindZero();
		break;
	case WAIT_FOR_BALL_TO_ENTER:
		WaitForBallToEnter();
		break;
	case GO_TO_FORWARD_LIMIT:
		SetGateToForwardLimit();
		break;
	case WAIT_FOR_PUSH_REQUEST:
		WaitForPushRequest();
		break;
	case WAIT_FOR_BALL_TO_LEAVE:
		WaitForBallToLeave();
		break;
	case GO_TO_REVERSE_LIMIT:
		SetGateToReverseLimit();
		break;
	case BALL_PUSH_ERR:
		RemoveBall();
		break;
	}
}
int main()
{
	int iCaseNum,i,j,k,l,iRemove,iScore,iRemX,iRemY,iCount,iRemain,iTemp;
	char cRemCol;
	scanf("%d",&iCaseNum);
	for(i=0;i<iCaseNum;i++)
	{
		for(j=0;j<10;j++)
			scanf("%s",cMap[j]);
		iScore=0;
		iCount=0;
		iRemain=150;
		printf("Game %d:\n\n",i+1);
		while(1)
		{
			iRemove=0;
			for(j=0;j<10;j++)
				for(k=0;k<15;k++)
					bVisit[j][k]=false;
			for(k=0;k<15;k++)
				for(j=9;j>=0;j--)
				{
					if(cMap[j][k]==' ' || bVisit[j][k])
						continue;
					iTemp=CalBall(j,k,cMap[j][k],true);
					if(iTemp>iRemove)
					{
						iRemove=iTemp;
						iRemX=j;
						iRemY=k;
						cRemCol=cMap[j][k];
						for(l=0;l<iRemove;l++)
						{
							pSame[l].iX=pTemp[l].iX;
							pSame[l].iY=pTemp[l].iY;
						}
					}
				}
			if(iRemove<2)
				break;
			RemoveBall(iRemX,iRemY,cRemCol,iRemove);
			iCount++;
			printf("Move %d at (%d,%d): removed %d balls of color %c, got %d points.\n",iCount,10-iRemX,iRemY+1,iRemove,cRemCol,(iRemove-2)*(iRemove-2));
			iScore+=(iRemove-2)*(iRemove-2);
			iRemain-=iRemove;
			if(iRemain<2)
				break;
		}
		if(!iRemain)
			iScore+=1000;
		printf("Final score: %d, with %d balls remaining.\n\n",iScore,iRemain);
	}
	return 0;
}