void OnLButtonDown(HWND hWnd,WPARAM wParam,LPARAM lParam) { int xpos = LOWORD(lParam); int ypos = HIWORD(lParam); int sx = xpos / MY_W; int sy = ypos / MY_H; if (true == Check(sx,sy,sx-1,sy)) { InvalidateRect(hWnd,NULL,TRUE); } else if(true == Check(sx,sy,sx+1,sy)) { InvalidateRect(hWnd,NULL,TRUE); } else if(true == Check(sx,sy,sx,sy-1)) { InvalidateRect(hWnd,NULL,TRUE); } else if(true == Check(sx,sy,sx,sy+1)) { InvalidateRect(hWnd,NULL,TRUE); } if (true == CheckGameOver()) { MessageBox(hWnd,"Game Over","¾Ë¸²",MB_OK); } }
void CPlayScene::Update( float dTime ) { //종료조건처리. if (CheckGameOver()) { return ; } NNScene::Update(dTime); m_StageElapsedTime+=dTime; if (m_StageElapsedTime - m_LocalMoneyTimeChecker >= m_pPlayer->GetEarningInterval()) { m_pPlayer->IncreaseLocalMoney(EARNING_AMOUNTS); m_LocalMoneyTimeChecker = m_StageElapsedTime; } //Test_ShowMousePosition(); // 마우스 커서 위치 임시 테스트 Test_ShowFPS(); //FPS출력 임시 테스트 Test_ShowLocalMoney(); // local money 출력 // 좀비 생성 버튼 입력 처리를 한 함수로 빼버림 - 채원 MakeZombieButtonOperate(dTime); DeadCharacterCollector(); CollectDeadPoliceByClick(); //기존 지정해놓은 파일 범위를 넘어갈때를 위한 처리. 임시. //MakePoliceFromScript(); MakePoliceFromScriptWithTimeInterval(m_StageElapsedTime); // next stage 화면으로 이동하기 위한 임시 구문 // 엔터 치면 이동함 if( NNInputSystem::GetInstance()->GetKeyState(VK_RETURN) == KEY_DOWN ) { NNSceneDirector::GetInstance()->ChangeScene(CNextStageScene::Create()); m_pInstance = nullptr; } }
// Change Party Member. bool Game_Interpreter::CommandChangePartyMember(RPG::EventCommand const& com) { // Code 10330 Game_Actor* actor; int id; if (com.parameters[1] == 0) { id = com.parameters[2]; } else { id = Game_Variables[com.parameters[2]]; } actor = Game_Actors::GetActor(id); if (actor != NULL) { if (com.parameters[0] == 0) { // Add members Main_Data::game_party->AddActor(id); } else { // Remove members Main_Data::game_party->RemoveActor(id); CheckGameOver(); } } Game_Map::SetNeedRefresh(true); // Continue return true; }
bool Game_Interpreter::CommandChangeHP(RPG::EventCommand const& com) { // Code 10460 std::vector<Game_Actor*> actors = GetActors(com.parameters[0], com.parameters[1]); bool remove = com.parameters[2] != 0; int amount = ValueOrVariable(com.parameters[3], com.parameters[4]); bool lethal = com.parameters[5] != 0; if (remove) amount = -amount; for (std::vector<Game_Actor*>::iterator i = actors.begin(); i != actors.end(); ++i) { Game_Actor* actor = *i; int hp = actor->GetHp() + amount; if (!lethal && hp <= 0) { amount += hp * (-1) + 1; } actor->ChangeHp(amount); } if (lethal) { CheckGameOver(); } return true; }
int AngelFight::OnAniOK( Player* p, const uint8_t buf[], int len ) { if( !p ) { ERROR_LOG( "AngelFight::OnAniOK Invalid Player Ptr" ); return GER_game_system_err; } p->SetValidCmd( p->GetValidCmd() & ~AFC_ANI_OK ); if( EndTimer() ) { CheckGameOver(); } return 0; }
void CGameFrameWork::ProcessInput() { if (CheckGameOver()) { TextOut(m_pBackBuffer->GetMemDC(), 50, 530, L" Game Over !! ", 14); m_bMove = false; return; } ////////////////////////////////////////////////// if (m_bReplay) { if (m_vecRecord.size() <= m_nReplayCnt) { Rectangle(m_pBackBuffer->GetMemDC(), 0, 0, 800, 600); m_bReplay = false; TextOut(m_pBackBuffer->GetMemDC(), 50, 530, L" 리플레이가 종료되었습니다. ", 16); return; } if (!m_bStepByStep) { currTime = chrono::system_clock::now(); elapsedTime = currTime - startTime; if (m_vecRecord[m_nReplayCnt].time <= elapsedTime.count()) { m_bMove = true; m_eKeyDir = static_cast<KEYBOARD_DIR>(m_vecRecord[m_nReplayCnt].key); } } else { if (m_bSpaceDown) { m_bSpaceDown = false; m_bMove = true; m_eKeyDir = static_cast<KEYBOARD_DIR>(m_vecRecord[m_nReplayCnt].key); } } } ////////////////////////////////////////////////// }
int AngelFight::handle_timeout( void* data ) { EndTimer(true); m_nTimerID = 0; DEBUG_LOG( "AngelFight Timer Out, TimerEvent:[%d]", int32_t(m_nTimerEvent) ); switch(m_nTimerEvent) { case TE_OPERATION: { for( uint32_t i = 0; i < m_nPlayerCount; ++i ) { if( m_pPlayers[i]->GetActionState() == AS_WAIT ) { m_pPlayers[i]->AutoAct(); ActionAndNotify(); } } } break; case TE_SELECT_MONSTER: { return GER_end_of_game; } case TE_WAIT_ANI: { return CheckGameOver(); } break; case TE_LOAD_DATA: { return GER_end_of_game; } case TE_CHANGE_PLAYER: { return RoundBegin(); } break; default: break; } return 0; }
//改变方向 void CSnakeGame::ChangeDirection(int iDirection) { //如果是相同方向或者游戏不是运行中状态,则返回 if (m_enGameState != GAMESTATE_RUNNING || m_iSnakeDirection == iDirection) { return; } //按钮音效 PLAY_EFFECT(EFFECT_CHANGE2); //设置方向 int nOldDirection = m_iSnakeDirection; m_iSnakeDirection = iDirection; //如果是反方向 if (iDirection == OPPSITE_DIRECTION[nOldDirection]) { //转换 int iNodeCount = m_mapSnakeNodes.size(); for (int i = 0; i < iNodeCount / 2; ++i) { POSITION stTempPos = m_mapSnakeNodes[i]; m_mapSnakeNodes[i] = m_mapSnakeNodes[iNodeCount - 1 - i]; m_mapSnakeNodes[iNodeCount - 1 - i] = stTempPos; } //获取下一个位置 POSITION stHeaderPos = m_mapSnakeNodes[0]; GetNextPos(stHeaderPos); //是否可以按照反方向移动,不能则恢复之前的方向 if (CheckGameOver(stHeaderPos)) { m_iSnakeDirection = nOldDirection; } } //移动 SnakeMove(); //重置时间 m_fWaitRefreshTime = 0; }
bool Game_Interpreter::CommandChangeCondition(RPG::EventCommand const& com) { // Code 10480 std::vector<Game_Actor*> actors = GetActors(com.parameters[0], com.parameters[1]); bool remove = com.parameters[2] != 0; int state_id = com.parameters[3]; for (std::vector<Game_Actor*>::iterator i = actors.begin(); i != actors.end(); ++i) { Game_Actor* actor = *i; if (remove) { actor->RemoveState(state_id); } else { actor->AddState(state_id); CheckGameOver(); } } return true; }
void Game() { check = false; FreeTree(tree); if (NULL != buttonsBoard){ FreeButtonsBoard(); } if (-1 == EventHandler_init(&Quit, &error_global)) { guiQuit = -1; return; } chosenMove = NULL; gameSelectedSquare_control = NULL; showDepthOptions = false; get_moves_for_color(board, curSettings->next_turn, &curMovesList); CheckGameOver(); control* window; if (-1 == Create_window(GAMEBOARDBACKGROUND_W, GAMEBOARDBACKGROUND_H, &window, &error_global)) { guiQuit = -1; return; } if (-1 == CreateTree(window, &tree, &error_global)) { FreeControl(window); guiQuit = -1; return; } control* gameBoarBackground_control; if (-1 == Create_panel_from_bmp( GAMEBOARDBACKGROUNDFILENAME, GAMEBOARDBACKGROUNDNAME, 0, 0, (Uint16)GAMEBOARDBACKGROUND_W, (Uint16)GAMEBOARDBACKGROUND_H, &gameBoarBackground_control, &error_global)) { guiQuit = -1; return; } UINode* gameBoarBackground_node; if (-1 == CreateAndAddNodeToTree(gameBoarBackground_control, tree, &gameBoarBackground_node, &error_global)) { FreeControl(gameBoarBackground_control); guiQuit = -1; return; } if (-1 == buildBoardUITree(&error_global)) { guiQuit = -1; return; } Sint16 quitButton_x_location = (Sint16)(GAMEBOARDBACKGROUND_W - BUTTON_W - 0.5 * MARGIN); Sint16 quitButton_y_location = (Sint16)(GAMEBOARDBACKGROUND_H - BUTTON_H - 1.5 * MARGIN); control* quitButton_control; if (-1 == Create_Button_from_bmp( BUTTONQUITFILENAME, BUTTONQUITFILENAME, BUTTONQUITNAME, quitButton_x_location, quitButton_y_location, (Uint16)BUTTON_W, (Uint16)BUTTON_H, &Quit_ButtonClick, &quitButton_control, &error_global)) { guiQuit = -1; return; } UINode* quitButton_node; if (-1 == CreateAndAddNodeToTree(quitButton_control, gameBoarBackground_node, &quitButton_node, &error_global)) { FreeControl(quitButton_control); guiQuit = -1; return; } if (-1 == AddToListeners(quitButton_control, &error_global)) { FreeControl(quitButton_control); guiQuit = -1; return; } Sint16 bestButton_x_location = quitButton_x_location; Sint16 bestButton_y_location = (Sint16)(quitButton_y_location - BUTTON_H - 1.5 * MARGIN); control* bestButton_control; if (-1 == Create_Button_from_bmp_transHighlight( BUTTONBESTMOVEFILENAME, BUTTONTRANSPARENTHIGHLIGHTEDFILENAME, BUTTONBESTMOVENAME, bestButton_x_location, bestButton_y_location, (Uint16)BUTTON_W, (Uint16)BUTTON_H, &GameBoardBest_ButtonClick, &bestButton_control, &error_global)) { guiQuit = -1; return; } UINode* bestButton_node; if (-1 == CreateAndAddNodeToTree(bestButton_control, gameBoarBackground_node, &bestButton_node, &error_global)) { FreeControl(bestButton_control); guiQuit = -1; return; } if (-1 == AddToListeners(bestButton_control, &error_global)) { guiQuit = -1; return; } int saveButton_x_location = quitButton_x_location; int saveButton_y_location = 2 * MARGIN; control* saveButton_control; if (-1 == Create_Button_from_bmp_transHighlight( BUTTONSAVEFILENAME, BUTTONTRANSPARENTHIGHLIGHTEDFILENAME, BUTTONSAVENAME, saveButton_x_location, saveButton_y_location, (Uint16)BUTTON_W, (Uint16)BUTTON_H, &GameBoardSave_ButtonClick, &saveButton_control, &error_global)) { guiQuit = -1; return; } UINode* saveButton_node; if (-1 == CreateAndAddNodeToTree(saveButton_control, gameBoarBackground_node, &saveButton_node, &error_global)) { FreeControl(saveButton_control); guiQuit = -1; return; } if (-1 == AddToListeners(saveButton_control, &error_global)) { guiQuit = -1; return; } Sint16 mainMenuButton_x_location = (Sint16)(quitButton_x_location); Sint16 mainMenuButton_y_location = (Sint16)(saveButton_y_location + BUTTON_H + 1.5 *MARGIN); control* mainMenuButton_control; if (-1 == Create_Button_from_bmp_transHighlight( BUTTONMAINMENUFILENAME, BUTTONTRANSPARENTHIGHLIGHTEDFILENAME, BUTTONMAINMENUNAME, mainMenuButton_x_location, mainMenuButton_y_location, (Uint16)BUTTON_W, (Uint16)BUTTON_H, &GameBoardMainMenu_ButtonClick, &mainMenuButton_control, &error_global)) { guiQuit = -1; return; } UINode* mainMenuButton_node; if (-1 == CreateAndAddNodeToTree(mainMenuButton_control, gameBoarBackground_node, &mainMenuButton_node, &error_global)) { FreeControl(mainMenuButton_control); guiQuit = -1; return; } if (-1 == AddToListeners(mainMenuButton_control, &error_global)) { guiQuit = -1; return; } if (check) { char* filename = NULL; char* name = NULL; if (curSettings->next_turn == WHITE) { filename = LABELBLACKCHECKFILENAME; name = LABELBLACKCHECKNAME; } else { filename = LABELWHITECHECKFILENAME; name = LABELWHITECHECKNAME; } int checkLabel_x_location = mainMenuButton_x_location; int checkabel_y_location = mainMenuButton_y_location + BUTTON_H + MARGIN; control* checkLabel_control; if (-1 == Create_panel_from_bmp( filename, name, checkLabel_x_location, checkabel_y_location, GAMEBOARDBACKGROUND_W, GAMEBOARDBACKGROUND_H, &checkLabel_control, &error_global)) { guiQuit = -1; return; } UINode* checkLabel_node; if (-1 == CreateAndAddNodeToTree(checkLabel_control, gameBoarBackground_node, &checkLabel_node, &error_global)) { FreeControl(checkLabel_control); guiQuit = -1; return; } } if (gameOver) { Sint16 checkMateLabel_x_location = 0; Sint16 checkMateLabel_y_location = (Sint16)(0.25 * BOARD_H - 20); control* checkMateLabel_control; if (-1 == Create_panel_from_bmp( LABELCHECKMATEFILENAME, LABELCHECKMATENAME, checkMateLabel_x_location, checkMateLabel_y_location, GAMEBOARDBACKGROUND_W, GAMEBOARDBACKGROUND_H, &checkMateLabel_control, &error_global)) { guiQuit = -1; return; } UINode* checkMateLabel_node; if (-1 == CreateAndAddNodeToTree(checkMateLabel_control, board_node, &checkMateLabel_node, &error_global)) { FreeControl(checkMateLabel_control); guiQuit = -1; return; } char* filename = NULL; char* name = NULL; if (curSettings->next_turn == WHITE) { filename = LABELBLACKWINSFILENAME; name = LABELBLACKWINSNAME; } else { filename = LABELWHITEWINSFILENAME; name = LABELWHITEWINSNAME; } Sint16 winsLabel_x_location = 0; Sint16 winsLabel_y_location = (Sint16)(0.5 * BOARD_H - 20); control* winsLabel_control; if (-1 == Create_panel_from_bmp( filename, name, winsLabel_x_location, winsLabel_y_location, GAMEBOARDBACKGROUND_W, GAMEBOARDBACKGROUND_H, &winsLabel_control, &error_global)) { guiQuit = -1; return; } UINode* winsLabel_node; if (-1 == CreateAndAddNodeToTree(winsLabel_control, board_node, &winsLabel_node, &error_global)) { FreeControl(winsLabel_control); guiQuit = -1; return; } } else if (tie) { Sint16 tieLabel_x_location = 0; Sint16 tieLabel_y_location = (Sint16)(0.25 * BOARD_H - 20); control* tieLabel_control; if (-1 == Create_panel_from_bmp( LABELTIEFILENAME, LABELTIENAME, tieLabel_x_location, tieLabel_y_location, GAMEBOARDBACKGROUND_W, GAMEBOARDBACKGROUND_H, &tieLabel_control, &error_global)) { guiQuit = -1; return; } UINode* tieLabel_node; if (-1 == CreateAndAddNodeToTree(tieLabel_control, board_node, &tieLabel_node, &error_global)) { FreeControl(tieLabel_control); guiQuit = -1; return; } Sint16 gameOverLabel_x_location = 0; Sint16 gameOverLabel_y_location = (Sint16)(0.50 * BOARD_H - 20); control* gameOverLabel_control; if (-1 == Create_panel_from_bmp( LABELGAMEOVERFILENAME, LABELGAMEOVERNAME, gameOverLabel_x_location, gameOverLabel_y_location, GAMEBOARDBACKGROUND_W, GAMEBOARDBACKGROUND_H, &gameOverLabel_control, &error_global)) { guiQuit = -1; return; } UINode* gameOverLabel_node; if (-1 == CreateAndAddNodeToTree(gameOverLabel_control, board_node, &gameOverLabel_node, &error_global)) { FreeControl(gameOverLabel_control); guiQuit = -1; return; } } // DrawTree if (-1 == FlipTree(&error_global)) { guiQuit = -1; return; } if (PLAYER_VS_AI_GAME_MODE == curSettings->game_mode && curSettings->next_turn != curSettings->user_color) { ComputerTurn(&error_global); } }
int AngelFight::ActionAndNotify() { //DEBUG_LOG("AngelFight::ActionAndNotify()"); for( uint32_t i = 0; i < PLAYER_COUNT; ++i ) { //somebody has not ready if( m_pPlayers[i]->GetActionState() == AS_WAIT ) { if( m_bQuickGame ) { m_pPlayers[i]->AutoAct(); } else { return 0; } } } Player* pAct[PLAYER_COUNT]; if( m_pPlayers[0]->GetActSPD() > m_pPlayers[1]->GetActSPD() ) { pAct[0] = m_pPlayers[0]; pAct[1] = m_pPlayers[1]; } else if( m_pPlayers[0]->GetActSPD() < m_pPlayers[1]->GetActSPD() ) { pAct[0] = m_pPlayers[1]; pAct[1] = m_pPlayers[0]; } //equal else { int val = rand()%2; pAct[0] = m_pPlayers[val]; pAct[1] = m_pPlayers[val^1]; } int len = sizeof(protocol_t); //清空发送缓存 pAct[0]->NoticeBuffClear(); pAct[1]->NoticeBuffClear(); //有一方势力全灭后,不再进行计算,避免出现双方同时阵亡 //是否只通知操作而不做行动 bool bDeclare = false; for( uint32_t i = 0; i < PLAYER_COUNT; ++i ) { int ret = pAct[i]->Action( bDeclare ); switch( ret ) { //无阵亡 case PS_NORMAL: { //执行buff效果 if( PS_OVER == pAct[i]->ExecuteBuff() ) { bDeclare = true; } } break; //自己阵亡 case PS_OVER: { //自己阵亡后若没有后续队友则结束 if( !pAct[i]->GetValidPartner() ) { bDeclare = true; } } break; //对手全体阵亡 case PS_WIN: { } break; default: break; } } for( int i = 0; i < PLAYER_COUNT; ++i ) { pAct[i]->ConstraintHpMp(); pAct[i]->GetNoticeInfo( pkg, len , 4096 ); } init_proto_head( pkg, AFP_NOTIFY_ACTION, len ); //UnPackDataForTest( pkg, len ); if( m_pGrp && !m_bQuickGame ) { send_to_players( m_pGrp, pkg, len ); //DEBUG_LOG( "Send Action Info To Players User ID1:[%u] ID2:[%u]", m_pPlayers[0]->GetUserID(), m_pPlayers[1]->GetUserID() ); } // wait for client's animation if( !m_bQuickGame ) { for( uint32_t i = 0; i < m_nPlayerCount; ++i ) { m_pPlayers[i]->SetValidCmd( AFC_QUIT | AFC_ANI_OK ); } BeginTimer( TE_WAIT_ANI, TIMER_ACTION_ANI ); return 0; } else { return CheckGameOver(); } }
//蛇更新位置 void CSnakeGame::SnakeMove() { PLAY_EFFECT(EFFECT_WALL); //记录最后一个节点位置,因为可能需要增加节点 int iNodeCount = m_mapSnakeNodes.size(); POSITION stLastPos = m_mapSnakeNodes[iNodeCount - 1]; //获取头部下个位置 POSITION stHeaderPos = m_mapSnakeNodes[0]; GetNextPos(stHeaderPos); if (CheckGameOver(stHeaderPos)) { //设置结束状态 m_enGameState = GAMESTATE_OVER; //设置苹果显示状态 m_bAppleState = true; //音效 PLAY_EFFECT(EFFECT_BOOM); return; } //更新其他节点 for (int i = iNodeCount - 2; i >= 0; --i) { POSITION& stSrcPos = m_mapSnakeNodes[i + 1]; const POSITION& stDestPos = m_mapSnakeNodes[i]; stSrcPos.m_iRowIdx = stDestPos.m_iRowIdx; stSrcPos.m_iColIdx = stDestPos.m_iColIdx; } //头部位置更新 m_mapSnakeNodes[0] = stHeaderPos; //检查头部位置是否是苹果的位置 if (stHeaderPos == m_stApplePos) { //加分 m_iScore += SNAKE_EAT_ADD_SCORE; m_pGameScene->UpdateScore(m_iScore); //增加节点 m_mapSnakeNodes[iNodeCount] = stLastPos; //检查是否通过 /*if (iNodeCount + 1 == SNAKE_MAX_LEN) { m_enGameState = GAMESTATE_PASS; return; }*/ //苹果不显示 m_pGameScene->UpdateBrick(m_stApplePos.m_iRowIdx, m_stApplePos.m_iColIdx, false, false); //重新随机苹果位置 RandApplePos(); } }