Exemple #1
0
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);
	}
}
Exemple #2
0
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;
	}
}
Exemple #3
0
// 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;
}
Exemple #4
0
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;
}
Exemple #5
0
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);
			}
		}
	}
	//////////////////////////////////////////////////
}
Exemple #7
0
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;
}
Exemple #8
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;
}
Exemple #9
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);
	}
}
Exemple #11
0
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();
    }
}
Exemple #12
0
//蛇更新位置
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();
	}
}