Exemplo n.º 1
0
//retorna o número de maneiras que é possivel vencer
int *GetWinningPosition(int hash[HASH_DIMENSION][HASH_DIMENSION], int user)
{
    int line, column;
    int *cell = (int *) malloc(2*sizeof(int));
    int NewHash[HASH_DIMENSION][HASH_DIMENSION];

    CopyHash(hash, NewHash);

    //verificando as linhas
    for(line = 0; line < HASH_DIMENSION; line++)
        for(column = 0; column < HASH_DIMENSION; column++)
        {
            cell[X] = line;
            cell[Y] = column;

            if(MovementIsValid(hash,cell))
            {
                NewHash[line][column] = user;
                if(IsWinner(NewHash, user)) return cell;

                NewHash[line][column] = hash[line][column];
            }
        }

    cell[X] = EMPTY;
    cell[Y] = EMPTY;
    return cell;
}
Exemplo n.º 2
0
void AShooterGameMode::FinishMatch()
{
	AShooterGameState* const MyGameState = Cast<AShooterGameState>(GameState);
	if (IsMatchInProgress())
	{
		EndMatch();
		DetermineMatchWinner();		

		// notify players
		for (FConstControllerIterator It = GetWorld()->GetControllerIterator(); It; ++It)
		{
			AShooterPlayerState* PlayerState = Cast<AShooterPlayerState>((*It)->PlayerState);
			const bool bIsWinner = IsWinner(PlayerState);

			(*It)->GameHasEnded(NULL, bIsWinner);
		}

		// lock all pawns
		// pawns are not marked as keep for seamless travel, so we will create new pawns on the next match rather than
		// turning these back on.
		for (FConstPawnIterator It = GetWorld()->GetPawnIterator(); It; ++It)
		{
			(*It)->TurnOff();
		}

		// set up to restart the match
		MyGameState->RemainingTime = TimeBetweenMatches;
	}
}
Exemplo n.º 3
0
void ALabyrinthGameMode::FinishMatch()
{
	ALGameState* const MyGameState = Cast<ALGameState>(GameState);
	if (IsMatchInProgress())
	{
		EndMatch();
		DetermineMatchWinner();

		// notify players
		for (FConstPlayerControllerIterator It = GetWorld()->GetPlayerControllerIterator(); It; It++)
		{
			ALPlayerState* PlayerState = Cast<ALPlayerState>((*It)->PlayerState);
			if (PlayerState)
			{
				const bool bIsWinner = IsWinner(PlayerState);

				(*It)->GameHasEnded(NULL, bIsWinner);
			}
		}
		// lock all pawns
		// pawns are not marked as keep for seamless travel, so we will create new ones
		// instead of turning these back on
		for (FConstPawnIterator It = GetWorld()->GetPawnIterator(); It; It++)
		{
			(*It)->TurnOff();
		}

		// Setup to restart the match
		MyGameState->RemainingTime = TimeBetweenMatches;
	}
}
Exemplo n.º 4
0
int main(void)
{
    int hash[HASH_DIMENSION][HASH_DIMENSION];
    int playerRound, x;

    int line, column;

    ALLEGRO_DISPLAY *display;
    ALLEGRO_EVENT_QUEUE *eventQueue;

    for(line = 0; line < HASH_DIMENSION; line++)
        for(column = 0; column < HASH_DIMENSION; column++)
            hash[line][column] = -1;

    if (!AllegroStart()) return -1;
    if (!ImageStart()) return -1;
    if (!MouseStart()) return -1;
    if (!DisplayStart(&display)) return -1;
    if (!EventQueueStart(&eventQueue)) return -1;

    al_register_event_source(eventQueue, al_get_display_event_source(display));
    al_register_event_source(eventQueue, al_get_mouse_event_source());
    al_set_target_bitmap(al_get_backbuffer(display));

    playerRound = rand() % 2;

    RenderHash(hash);

    while ( !GameOver(hash) )
    {
        if ( playerRound == COMPUTER )playerRound = PlayComputer(hash);
        else playerRound = PlayPlayer(hash, &eventQueue, &display);

        RenderHash(hash);
    }

    if (IsWinner(hash, COMPUTER)) al_show_native_message_box(display,"Computador Venceu", "", "Computador Venceu", "Ok",1);
    else if (IsWinner(hash, PLAYER)) al_show_native_message_box(display,"Você Venceu", "", "Você Venceu", "Ok",1);
    else al_show_native_message_box(display,"Deu Velha", "", "Deu Velha", "Ok",1);

    return 0;
}
Exemplo n.º 5
0
void ALabyrinthGameMode::DefaultTimer()
{
	Super::DefaultTimer();

	// don't update timers for play in editor mode, it's not a real match
	if (GetWorld()->IsPlayInEditor())
	{
		// start the match if necessary
		if (GetMatchState() == MatchState::WaitingToStart)
		{
			StartMatch();
		}
		return;
	}

	ALGameState* const MyGameState = Cast<ALGameState>(GameState);
	if (MyGameState && MyGameState->RemainingTime > 0 && !MyGameState->bIsTimerPaused)
	{
		MyGameState->RemainingTime--;
		if (MyGameState->RemainingTime <= 0)
		{
			if (GetMatchState() == MatchState::WaitingPostMatch)
			{
				RestartGame();
			}
			else if (GetMatchState() == MatchState::InProgress)
			{
				FinishMatch();

				// Send end round events
				ALGameState* const MyGameState = Cast<ALGameState>(GameState);

				for (FConstControllerIterator It = GetWorld()->GetControllerIterator(); It; It++)
				{
					ALPlayerController* PlayerController = Cast<ALPlayerController>(*It);
					if (PlayerController && MyGameState)
					{
						ALPlayerState* PlayerState = Cast<ALPlayerState>((*It)->PlayerState);
						const bool bIsWinner = IsWinner(PlayerState);

						// TO-DO: Add this to the Player controller
						//PlayerController->ClientSendRoundEndEvent(bIsWinner, MyGameState->ElapsedTime);
					}
				}
			}
			else if (GetMatchState() == MatchState::WaitingToStart)
			{
				StartMatch();
			}
		}
	}
}
Exemplo n.º 6
0
void AShooterGameMode::DefaultTimer()
{
	// don't update timers for Play In Editor mode, it's not real match
	if (GetWorld()->IsPlayInEditor())
	{
		// start match if necessary.
		if (GetMatchState() == MatchState::WaitingToStart)
		{
			StartMatch();
		}
		return;
	}

	AShooterGameState* const MyGameState = Cast<AShooterGameState>(GameState);
	if (MyGameState && MyGameState->RemainingTime > 0 && !MyGameState->bTimerPaused)
	{
		MyGameState->RemainingTime--;
		
		if (MyGameState->RemainingTime <= 0)
		{
			if (GetMatchState() == MatchState::WaitingPostMatch)
			{
				RestartGame();
			}
			else if (GetMatchState() == MatchState::InProgress)
			{
				FinishMatch();

				// Send end round events
				for (FConstControllerIterator It = GetWorld()->GetControllerIterator(); It; ++It)
				{
					AShooterPlayerController* PlayerController = Cast<AShooterPlayerController>(*It);
					
					if (PlayerController && MyGameState)
					{
						AShooterPlayerState* PlayerState = Cast<AShooterPlayerState>((*It)->PlayerState);
						const bool bIsWinner = IsWinner(PlayerState);
					
						PlayerController->ClientSendRoundEndEvent(bIsWinner, MyGameState->ElapsedTime);
					}
				}
			}
			else if (GetMatchState() == MatchState::WaitingToStart)
			{
				StartMatch();
			}
		}
	}
}
void CTicTacView::CheckForGameOver()
{
	int nWinner;

	//그리드에 세 개의 연속 X나 O가 있으면 승자를 선언하고 새로 게임을 시작
	if( nWinner = IsWinner ())
	{
		CString string = (nWinner == EX) ? _T("X wins!") : _T("O Win!");

		MessageBox(string, _T("Game Over"), MB_ICONEXCLAMATION | MB_OK);

		ResetGame();
	}

	// 그리드가 가득차면 새 게임을 시작
	else if( IsDraw() )
	{
		MessageBox(_T("It's a draw!"), _T("Game Over"), 
			MB_ICONEXCLAMATION | MB_OK);

		ResetGame();
	}
}
Exemplo n.º 8
0
//verifica se o jogo acabou
int GameOver(int hash[HASH_DIMENSION][HASH_DIMENSION])
{
    return IsWinner(hash, COMPUTER) || IsWinner(hash, PLAYER) || IsDraw(hash);
}