Пример #1
0
void PlayerControl( int player )
{
	int a = player, b = player;
	bool moved = false;

	if( players == 1 )
	{
		a = 0;
		b = 1;
	}

	if( hitKey[a].left || hitKey[b].left )
	{
		if( GameTickCount() >= timeMove[player] )
		{
			timeMove[player] += 12;
			if( CanGoLeft( player ) )
				GoLeft( player );
		}

		moved = true;
	}

	if( hitKey[a].right || hitKey[b].right )
	{
		if( GameTickCount() >= timeMove[player] )
		{
			timeMove[player] += 12;
			if( CanGoRight( player ) )
				GoRight( player );
		}

		moved = true;
	}

	if( !moved ) timeMove[player] = GameTickCount( );

	if( hitKey[a].rotate == 1 || hitKey[b].rotate == 1 )
	{
		if( CanRotate( player ) )
			DoRotate( player );
	}

	if( hitKey[a].drop == 1 || hitKey[b].drop == 1 )
	{
		DoDrop( player );
	}

	if( hitKey[a].drop == 0 && hitKey[b].drop == 0 )
	{
		StopDrop( player );
	}
}
void CRotateDispWnd::BeginWindowProc()
{
	if(CreateEx(0,AfxRegisterWndClass(CS_VREDRAW  | CS_HREDRAW ,NULL,NULL,NULL),"RotateDisp",
		WS_POPUP | WS_OVERLAPPED,10,10,10,10,NULL,NULL,NULL))
	{
		ShowShellIcon();
		HANDLE proc=OpenProcess(PROCESS_SET_INFORMATION,FALSE,GetCurrentProcessId());
		if(proc)
		{
			SetPriorityClass(proc,IDLE_PRIORITY_CLASS);
			CloseHandle(proc);
		}
		ShowWindow(SW_MINIMIZE);
		ShowWindow(SW_HIDE);
		RotNum=ANG_STAY;
		if(__argc >= 2)
		{
			RotNum=__argv[1][0] - '1';
			if(RotNum < 0 || RotNum > 3)
				RotNum=0;
		}
		
		if(!CanRotate())
			AfxMessageBox("初始化失败。",MB_OK | MB_ICONWARNING,0);
		if(__argc == 2)
		{
			IsMouseDllOk=false;
			ChangeDispById(RotNum);
			PostMessage(WM_CLOSE,0,0);
		}
		if(IsMouseDllOk)
			SetHook();
		RegisterHotKey(m_hWnd,806,MOD_ALT | MOD_CONTROL,VK_UP);
		RegisterHotKey(m_hWnd,805,MOD_ALT | MOD_CONTROL,VK_LEFT);
		RegisterHotKey(m_hWnd,808,MOD_ALT | MOD_CONTROL,VK_DOWN);
		RegisterHotKey(m_hWnd,807,MOD_ALT | MOD_CONTROL,VK_RIGHT);
		
		if(IsMouseDllOk)
		{
			RegisterHotKey(m_hWnd,1830,MOD_ALT | MOD_CONTROL | MOD_SHIFT,VK_UP);
			RegisterHotKey(m_hWnd,1829,MOD_ALT | MOD_CONTROL | MOD_SHIFT,VK_LEFT);
			RegisterHotKey(m_hWnd,1832,MOD_ALT | MOD_CONTROL | MOD_SHIFT,VK_DOWN);
			RegisterHotKey(m_hWnd,1831,MOD_ALT | MOD_CONTROL | MOD_SHIFT,VK_RIGHT);
		}
	}
}
Пример #3
0
void AIControl( int player )
{
	if( timeAI[player] > GameTickCount() )
		return;

	timeAI[player] += moveQuick[player]? character[player].speedRush:
	                                     character[player].speedNormal;

	switch( RandomBefore( 2 ) )
	{
		case 0:
			if( destinationR[player] != blobR[player] )
			{
				if( CanRotate(player) )
				{
					DoRotate( player );
				}
			}
			break;

		case 1:
			if( destinationX[player] != blobX[player] )
			{
				if( destinationX[player] > blobX[player] )
				{
					if( CanGoRight( player ) )
						GoRight( player );
				}
				else
				{
					if( CanGoLeft( player ) )
						GoLeft( player );
				}
			}
			break;
	}

	if( destinationX[player] == blobX[player] &&
		destinationR[player] == blobR[player] &&
		RandomBefore( 100 ) < character[player].intellect )
	{
		DoDrop( player );
	}
}
Пример #4
0
void AutoControl( int player )
{
	if( autoPattern )
	{
		switch( autoPattern->command )
		{
			case kMessage:
				StartBalloon( autoPattern->message );
				autoPattern++;
				break;

			case kIdleTicks:
				if( !tutorialTime )
				{
					tutorialTime = GameTickCount() + autoPattern->d1;
				}
				else
				{
					if( GameTickCount() >= tutorialTime )
					{
						tutorialTime = 0;
						autoPattern++;
					}
				}
				break;

			case kRetrieve:
				if( role[player] == kWaitForRetrieval )
				{
					nextA[player] = abs( autoPattern->d1 );
					nextB[player] = abs( autoPattern->d2 );
					nextM[player] = (autoPattern->d1 < 0);
					nextG[player] = (autoPattern->d1 == kBombBottom) && (autoPattern->d2 == kBombTop);

					if( !nextG[player] )
					{
						nextA[player] = pieceMap[ nextA[player] ];
						nextB[player] = pieceMap[ nextB[player] ];
					}

					role[player]  = kRetrieveBlobs;
					autoPattern++;
				}
				break;

			case kPosition:
				if( (role[player] != kFalling) || (blobX[player] == autoPattern->d1) )
				{
					autoPattern++;
				}
				else if( GameTickCount() >= timeMove[player] )
				{
					timeMove[player] = GameTickCount() + 12;

					if( blobX[player] > autoPattern->d1 )
					{
						if( CanGoLeft( player ) )
							GoLeft( player );
					}
					else
					{
						if( CanGoRight( player ) )
							GoRight( player );
					}
				}
				break;

			case kSpin:
				if( role[player] != kFalling )
				{
					autoPattern++;
				}
				else if( CanRotate( player ) )
				{
					DoRotate( player );
					autoPattern++;
				}
				break;

			case kBlockUntilLand:
				if( role[player] != kFalling )
				{
					autoPattern++;
				}
				break;

			case kBlockUntilDrop:
				if( !dropping[player] ) DoDrop( player );

				if( role[player] != kFalling )
				{
					autoPattern++;
				}
				break;

			case kPunish:
				if( role[player] == kWaitForRetrieval )
				{
					lockGrays[player] = autoPattern->d1;
					SetupGrays( player );
					blobTime[player] = GameTickCount( );
					role[player] = kDropGrays;

					autoPattern++;
				}
				break;

			case kComplete:
				EndTutorial( );
				break;

			case kBlockUntilComplete:
				if( role[player] == kWaitForRetrieval )
				{
					autoPattern++;
				}
				break;
		}
	}
}
Пример #5
0
void ModelClass::Rotate(int degrees)
{
    if (!CanRotate()) return;
    PreviewRotation=degrees;
    SetLineCoord();
}