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); } } }
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 ); } }
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; } } }
void ModelClass::Rotate(int degrees) { if (!CanRotate()) return; PreviewRotation=degrees; SetLineCoord(); }