Esempio n. 1
0
void Scene_Battle_Rpg2k3::ProcessActions() {
	if (Main_Data::game_party->GetBattlerCount() == 0) {
		Game_Temp::battle_result = Game_Temp::BattleVictory;
		Scene::Pop();
	}

	if (!battle_actions.empty()) {
		if (battle_actions.front()->IsDead()) {
			// No zombies allowed ;)
			RemoveCurrentAction();
		}
		else if (ProcessBattleAction(battle_actions.front()->GetBattleAlgorithm().get())) {
			NextTurn();
			RemoveCurrentAction();
			if (CheckResultConditions()) {
				return;
			}
		}
	}

	if (help_window->GetVisible() && message_timer > 0) {
		message_timer--;
		if (message_timer <= 0)
			help_window->SetVisible(false);
	}

	switch (state) {
		case State_Start:
			SetState(State_SelectOption);
			break;
		case State_SelectActor:
		case State_AutoBattle:
		case State_Battle:
			// no-op
			break;
		case State_SelectEnemyTarget: {
			static int flash_count = 0;

			Game_Enemy* target = static_cast<Game_Enemy*>(Main_Data::game_enemyparty->GetAliveEnemies()[target_window->GetIndex()]);
			Sprite_Battler* sprite = Game_Battle::GetSpriteset().FindBattler(target);
			if (sprite) {
				++flash_count;

				if (flash_count == 60) {
					sprite->Flash(Color(255, 255, 255, 100), 15);
					flash_count = 0;
				}
			}
			break;
		}
		case State_AllyAction:
		case State_EnemyAction:
			break;
		case State_Escape:
			Escape();
			break;
		default:
			break;
	}
}
void Scene_Battle_Rpg2k::SelectNextActor() {
	std::vector<Game_Actor*> allies = Main_Data::game_party->GetActors();

	if ((size_t)actor_index == allies.size()) {
		// All actor actions decided, player turn ends
		SetState(State_Battle);
		CreateEnemyActions();
		CreateExecutionOrder();

		NextTurn();
		Game_Battle::RefreshEvents();

		return;
	}

	active_actor = allies[actor_index];
	status_window->SetIndex(actor_index);
	actor_index++;

	if (active_actor->IsDead()) {
		SelectNextActor();
		return;
	}

	Game_Battler* random_target = NULL;

	if (active_actor->CanAct()) {
		switch (active_actor->GetSignificantRestriction()) {
		case RPG::State::Restriction_attack_ally:
			random_target = Main_Data::game_party->GetRandomActiveBattler();
			break;
		case RPG::State::Restriction_attack_enemy:
			random_target = Main_Data::game_enemyparty->GetRandomActiveBattler();
			break;
		}
	}
	else {
		active_actor->SetBattleAlgorithm(std::make_shared<Game_BattleAlgorithm::NoMove>(active_actor));
		battle_actions.push_back(active_actor);
		SelectNextActor();
		return;
	}

	if (random_target || auto_battle || active_actor->GetAutoBattle()) {
		if (!random_target) {
			random_target = Main_Data::game_enemyparty->GetRandomActiveBattler();
		}

		// ToDo: Auto battle logic is dumb
		active_actor->SetBattleAlgorithm(std::make_shared<Game_BattleAlgorithm::Normal>(active_actor, random_target));
		battle_actions.push_back(active_actor);

		SelectNextActor();
		return;
	}

	SetState(Scene_Battle::State_SelectCommand);
}
Esempio n. 3
0
void Battle::Run()
{
	// TODO : check player != end
	std::vector<Creature*>::iterator player;
	std::vector<Creature*>::iterator end;
	do {
		player = std::find_if(combatants.begin(), combatants.end(),
			[](Creature* creature) { return creature->GetID() == "Player"; });
		end = combatants.end();

		NextTurn();
	} while (combatants.size() > 1 && player != end);
}
Esempio n. 4
0
void Run(UI* ui)
{   if(ui == NULL) return;
    NewGame(ui->game);
    NextTurn(ui->game);
    int c, running = 1;
    while(running && ui->game->status != GAME_STATUS_ERROR)
    {   DisplayGame(ui);
        c = getch();
        switch(c)
        {
        case KEY_LEFT:
            if(ui->game->status != GAME_STATUS_LOST)
            {	if(PushLeft(ui->game)) NextTurn(ui->game);
                else CheckTurn(ui->game);
            }
            break;
        case KEY_RIGHT:
            if(ui->game->status != GAME_STATUS_LOST)
            {	if(PushRight(ui->game)) NextTurn(ui->game);
                else CheckTurn(ui->game);
            }
            break;
        case KEY_UP:
            if(ui->game->status != GAME_STATUS_LOST)
            {	if(PushUp(ui->game)) NextTurn(ui->game);
                else CheckTurn(ui->game);
            }
            break;
        case KEY_DOWN:
            if(ui->game->status != GAME_STATUS_LOST)
            {	if(PushDown(ui->game)) NextTurn(ui->game);
                else CheckTurn(ui->game);
            }
            break;
        case 'q':
            running = 0;
            break;
        case 'n':
            NewGame(ui->game);
            NextTurn(ui->game);
            break;
        case 'r':
            StartGame(ui->game);
            NextTurn(ui->game);
            break;
        default:
            break;
        }
    }
}
//---------------------------------------------------------------------------
// Description: This method runs the simulation by calling the 'NextTurn' method,
//              checking the stop criteria and updating the main window interface
void Civilization::PerformEvolution()
{
 Restart();

 for(int i=0; i< MainWindow->EditTurns->Text.ToInt(); i++)
  {
   NextTurn();
   DrawPreviewBoard();                // highlight the road with more pheromone
   Application->ProcessMessages();

   if(FoodRateReached(MainWindow->EditRange->Text.ToInt(),MainWindow->EditRate->Text.ToInt()))  break;
  }

 FindMainRoads(50,VirtualCiv,10,1.0);

 Application->ProcessMessages();
}
Esempio n. 6
0
void GameMaze::StartGame()
{
	Game::StartGame();

	if(currentState != NULL)
	{
		delete currentState;
	}

	currentState = new MazeState(PLAYER_AI, stepsToGameOver, mazeWidth, mazeHeight, visibleGoals, abstraction, this);
	playerCount = 2;
	player[ENVINRONMENT_AI]->StartGame(this);
	player[PLAYER_AI]->StartGame(this);
	state = STATE_RUNNING;
	if(player[PLAYER_AI]->Think())
		NextTurn();
}
Esempio n. 7
0
int WorldClass::Update(int index)
{
    //Check to see if they can make a move
    bool outOfMoves = true;
    for (int i = 0; i < numOfUnits; i++)
    {
        if (_entityArray[i].unitData.playerID == currentTurn)
        {
            if (_entityArray[i].unitData.actions != 0 && _entityArray[i].unitData.hp != 0)
                outOfMoves = false;
        }
    }

    //Check to see if alive
    for (int i = 0; i < numOfPlayers; i++)
    {
        if (_entityArray[i].unitData.unitID == 0 && _entityArray[i].unitData.hp <= 0)
            alivePlayers[_entityArray[i].unitData.playerID] = false;
    }

    //Game over if only alive
    bool lastStanding = true;
    for (int i = 0; i < numOfPlayers; i++)
    {
        if (alivePlayers[i] = true && i != currentTurn)
            lastStanding = false;
    }
    //Exit game if only person left
    if (lastStanding)
    {
        isInGame = false;
        winner = currentTurn;
    }

    //Next turn if dead or out of moves
    if (outOfMoves /*|| alivePlayers[currentTurn]*/)
        NextTurn();



    UpdateUnitMap();
    UpdateHealthBg(index);

    return 1;
}
Esempio n. 8
0
void Scene_Battle_Rpg2k::Escape() {
	static bool escaping = true;
	static bool escape_success = false;

	if (escaping) {
		battle_message_window->Clear();

		Game_BattleAlgorithm::Escape escape_alg = Game_BattleAlgorithm::Escape(&(*Main_Data::game_party)[0]);

		escape_success = escape_alg.Execute();
		escape_alg.Apply();

		battle_result_messages.clear();
		escape_alg.GetResultMessages(battle_result_messages);

		battle_message_window->Push(battle_result_messages[0]);
		escaping = false;
	}
	else {
		static int counter = 0;
		++counter;

		if (counter > 60) {
			escaping = true;
			counter = 0;

			if (escape_success) {
				Game_Temp::battle_result = Game_Temp::BattleEscape;

				Scene::Pop();
			}
			else {
				SetState(State_Battle);
				CreateEnemyActions();
				CreateExecutionOrder();

				NextTurn();
			}
		}
	}
}
void Scene_Battle_Rpg2k::Escape() {
	if (begin_escape) {
		battle_message_window->Clear();

		Game_BattleAlgorithm::Escape escape_alg = Game_BattleAlgorithm::Escape(&(*Main_Data::game_party)[0]);

		escape_success = escape_alg.Execute();
		escape_alg.Apply();

		battle_result_messages.clear();
		escape_alg.GetResultMessages(battle_result_messages);

		battle_message_window->Push(battle_result_messages[0]);
		begin_escape = false;
	}
	else {
		++escape_counter;

		if (escape_counter > 60) {
			begin_escape = true;
			escape_counter = 0;

			if (escape_success) {
				Game_Temp::battle_result = Game_Temp::BattleEscape;

				Scene::Pop();
			}
			else {
				SetState(State_Battle);
				CreateEnemyActions();
				CreateExecutionOrder();

				NextTurn();
				Game_Battle::RefreshEvents();
			}
		}
	}
}
Esempio n. 10
0
///////////////////////////////////////////////////////////////////////////////
// Descripcion:
// - Alinea a la criatura hCriature en combate, dentro del conjunto de
//   combatientes AlingmentSet.
// - En caso de que la alineacion sea nula, la entidad se eliminara de cualquier
//   conjunto de combate
// Parametros:
// - hCriature. Entidad a alinear en combate.
// - Alingment. Conjunto de combatientes donde alinear.
// Devuelve:
// Notas:
///////////////////////////////////////////////////////////////////////////////
void 
CCombatSystem::SetAlingment(const AreaDefs::EntHandle& hCriature,
							const CombatSystemDefs::eCombatAlingment& Alingment)
{
  // SOLO si instancia inicializada
  ASSERT(IsInitOk());
  // SOLO si parametros validos    
  ASSERT_MSG(IsValidCombatient(hCriature), "SetAlingment");

  // Se halla la alineacion de la criatura
  // En caso de que este alineada y se quiera insertar en una alineacion
  // distinta, se realizara el cambio
  const CombatSystemDefs::eCombatAlingment OldAlingment = GetAlingment(hCriature);
  
  // ¿Tenia alineacion?
  if (OldAlingment != CombatSystemDefs::NO_ALINGMENT) {
	// Se toma instancia al map y se borra del mismo
	AlingmentMap* const pAlingmentMap = GetAlingmentMap(OldAlingment);
	ASSERT(pAlingmentMap);		
	const AlingmentMapIt It(pAlingmentMap->find(hCriature));
	ASSERT((It != pAlingmentMap->end()) != 0);
	delete It->second;
	pAlingmentMap->erase(It);
  }

  // ¿Se desea alinear a la criatura?
  if (Alingment != CombatSystemDefs::NO_ALINGMENT) {	
	// ¿La criatura a alinear NO ES el jugador?
	if (m_pWorld->GetEntityType(hCriature) != RulesDefs::PLAYER) {
	  // Si, entonces si la criatura NO TIENE en su rango a NINGUNA otra
	  // criatura ya alineada, se cancelara la accion
	  if (!IsSomeCriatureInRange(hCriature, m_AlingmentInfo.PlayerMap) &&
		  !IsSomeCriatureInRange(hCriature, m_AlingmentInfo.EnemyPlayerMap)) {
		// La criatura NO se puede alinear, retorna
		return;
	  }	  
	}

	// Se toma el map
	AlingmentMap* const pAlingment = GetAlingmentMap(Alingment);
	ASSERT(pAlingment);
	
	// Se crea nodo de informacion, se inicializa sprite con selector e inserta
	sNAlingmentInfo* const pNAlingmentInfo = new sNAlingmentInfo;
	if (Alingment == CombatSystemDefs::PLAYER_ALINGMENT) {
	  pNAlingmentInfo->CombatSelector.Init(m_AlingmentInfo.szPlayerAlingmentSelector);
	} else {
	  pNAlingmentInfo->CombatSelector.Init(m_AlingmentInfo.szEnemyPlayerAlingmentSelector);
	}
	ASSERT(pNAlingmentInfo->CombatSelector.IsInitOk());	
	pAlingment->insert(AlingmentMapValType(hCriature, pNAlingmentInfo));

	// ¿NO estaba alineada previamente?
	if (OldAlingment == CombatSystemDefs::NO_ALINGMENT) {
	  // Se instala el modulo como observador de la criatura
	  CCriature* const pCriature = m_pWorld->GetCriature(hCriature);
	  ASSERT(pCriature);
	  pCriature->AddObserver(this);
	  
	  // Se inserta en la lista de turno de combate que proceda
	  // ¿Esta el modo combate activo?
	  if (IsCombatActive()) {
		// Si, se inserta en la lista de espera
		InsertInWaitingForCombatTurnList(hCriature);
	  } else {
		// No, se inserta en la lista principal
		InsertInCombatTurnList(hCriature);
	  }
	}
  } else {
	// No se desea alinear
	// ¿Estaba alineada?
	if (OldAlingment != CombatSystemDefs::NO_ALINGMENT) {
	  // Si, se desinstala el modulo como observador de la criatura
	  CCriature* const pCriature = m_pWorld->GetCriature(hCriature);
	  ASSERT(pCriature);
	  pCriature->RemoveObserver(this);

	  // Se insertara en la lista de de criaturas pendientes de ser
	  // eliminadas de la lisat de turnos de combate y ademas
	  m_CombatTurnInfo.CombatientLeaving.push_back(hCriature);
	  
	  // ¿Tenia el turno?
	  if (m_CombatTurnInfo.CriatureInTurn.CriatureIt != m_CombatTurnInfo.TurnList.end()) {
		if (hCriature == m_CombatTurnInfo.CriatureInTurn.CriatureIt->hCriature) {
		  // Si, se pasara automaticamente		
		  NextTurn(hCriature);
		}
	  }
	}
  }  
}
Esempio n. 11
0
///////////////////////////////////////////////////////////////////////////////
// Descripcion:
// - Recibe la notificacion de una criatura sobre un determinado suceso en
//   la misma o cambio de estado.
// - A la hora de recibir la notificacion de la realizacion de una accion,
//   se tendra en cuenta si esta bloqueado o no el uso de los puntos de accion.
// Parametros:
// - hCriature. Handle a la criatura.
// - NotifyType. Tipo de suceso.
// - udParam. Posible parametro.
// Devuelve:
// Notas:
// - En caso de que no se este en modo combate, se obviaran las notificaciones
// - Cuando la notificacion provenga del jugador, se tendra en cuenta los
//   sig. aspectos:
//    * Si hay ptos de accion insuficientes -> NO se pasara de turno.
//    * Si al restar puntos, estos quedan a 0 -> NO se pasara SI se esta
//      en la interfaz PlayerProfile.
// - El codigo de la accion a realizar en udParam, SIEMPRE, ira en el word
//   inferior.
///////////////////////////////////////////////////////////////////////////////
void 
CCombatSystem::CriatureObserverNotify(const AreaDefs::EntHandle& hCriature,
									  const CriatureObserverDefs::eObserverNotifyType& NotifyType,
									  const dword udParam)
{
  // SOLO si instancia inicializada
  ASSERT(IsInitOk());
  // SOLO si parametros validos
  ASSERT_MSG(IsValidCombatient(hCriature), "CriatureObserverNotify");

  // ¿NO se esta en modo combate?
  if (!IsCombatActive()) {
	// Si, se abandona
	return;
  }

  // Se comprueba el tipo de notificacion recibida
  switch (NotifyType) {	
	case CriatureObserverDefs::IS_DEATH: {
	  // La criatura ejecuto el evento de muerte
	  CCriature* const pCriature = m_pWorld->GetCriature(hCriature);
	  // ¿Es el jugador?
	  if (pCriature->GetEntityType() == RulesDefs::PLAYER) {
	    // Si, se finaliza el combate
	    EndCombat();
	  } else {
	    // No, se desvincula a la criatura del combate
	    SetAlingment(hCriature, CombatSystemDefs::NO_ALINGMENT);
	  }	  
	} break;

	case CriatureObserverDefs::ACTION_REALICE: {
	  // ¿Criatura con turno?
	  if (hCriature == GetCriatureInTurn()) {
		// ¿NO esta bloqueado el uso de puntos de accion?
		if (!m_bActionPointsBlocked) {
		  // Se toma la accion a realizar y sus puntos de accion
		  const RulesDefs::eCriatureAction Action = RulesDefs::eCriatureAction(udParam & 0x0000FFFF);
		  
		  // Se comprueba si se esta realizando alguna accion especial o
		  // bien una accion no considerada como que gasta puntos de combate
		  RulesDefs::CriatureActionPoints ActionCost = 0;
		  switch(Action) {
			case RulesDefs::CA_USEHABILITY: {
			  // Se obtiene el identificador de la habilidad en los primeros 16 bits
			  const RulesDefs::eIDHability IDHability = RulesDefs::eIDHability(udParam >> 16);
			  ActionCost = m_pGDBase->GetRulesDataBase()->GetUseHabilityCost(IDHability);
			} break;  

			case RulesDefs::CA_HIT: {
			  // Se obtiene el slot con el que se golpea y los ptos asociados
			  const RulesDefs::eIDEquipmentSlot Slot = RulesDefs::eIDEquipmentSlot(udParam >> 16);
			  CCriature* const pCriature = m_pWorld->GetCriature(hCriature);
			  ASSERT(pCriature);
			  CItem* const pItem = m_pWorld->GetItem(pCriature->GetEquipmentSlots()->GetItemEquipedAt(Slot));
			  ActionCost = (NULL == pItem) ? 0 : m_pGDBase->GetRulesDataBase()->GetUseWeaponItemCost(pItem->GetType());
			} break;

			case RulesDefs::CA_DROPITEM:
			case RulesDefs::CA_STOPWALK: {
			  // No se considerara gasto en puntos de combate
			  return;
			} break;
		  }; // ~ switch

		  // Se añaden los puntos base de coste de la accion realizada
		  ActionCost += m_pGDBase->GetRulesDataBase()->GetCombatActionCost(Action);
		  
		  // Se decrementan los puntos de accion y se actualizan en ventana
		  ASSERT((ActionCost <= m_CombatTurnInfo.CriatureInTurn.ActionPoints) != 0);
		  m_CombatTurnInfo.CriatureInTurn.ActionPoints -= ActionCost;	  
		  ASSERT((m_CombatTurnInfo.CriatureInTurn.ActionPoints >= 0) != 0);
  		  m_pGUIManager->CombatSetActionPoints(m_CombatTurnInfo.CriatureInTurn.ActionPoints);

		  // ¿Ya no quedan puntos de accion?
		  if (0 == m_CombatTurnInfo.CriatureInTurn.ActionPoints) {
			// Se notifica de tal forma que se ejecute el case INSUFICIENT_ACTION_POINTS
			CCriature* const pCriature = m_pWorld->GetCriature(hCriature);
			ASSERT(pCriature);
			
			// Si la entidad es un NPC, se pasara de turno automaticamente
			if (RulesDefs::CRIATURE == pCriature->GetEntityType()) {			
			  NextTurn(hCriature);
			} else {
			  // En caso contrario se trata del jugador y se pasara de turno
			  // SOLO si NO se esta en el interfaz de inventario.
			  if (m_pGUIManager->GetGameGUIWindowState() != GUIManagerDefs::GUIW_PLAYERPROFILE) {			  
				NextTurn(hCriature);
			  }
			}
		  } 
		}	  
	  }
	} break;	
  
	case CriatureObserverDefs::INSUFICIENT_ACTION_POINTS: {	  
  	  // ¿Criatura con turno?
	  if (hCriature == GetCriatureInTurn()) {
		// Se pasara de turno si la entidad no es el jugador
		if (m_pWorld->GetPlayer()->GetHandle() != hCriature) {		
		  NextTurn(hCriature);
		} else {
		  // En el caso de que sea el jugador se mandara mensaje a consola
		  SYSEngine::GetGUIManager()->WriteToConsole(m_pGDBase->GetStaticText(GameDataBaseDefs::ST_GENERAL_INSUFICIENTACTIONPOINTS),
													 true);
		}	  
	  }
	} break;
  }; // ~ switch    
}
Esempio n. 12
0
/*
Updates player moves
*/
void clash::Update(float dt) {
	_keyPress += dt;
	if (_turn == AI) NextTurn();
	else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Return) && _keyPress > 1.f) {
		NextTurn();
		_keyPress = 0;
	}

	// Mouse-over type marker
	for (int i = 0; i < CHECKBOARD; i++) {
		for (int j = 0; j < CHECKBOARD; j++) {
			if (IsMouseOver(_checkBoard[i][j])) {
				_currentMouseOver = sf::Vector2i(i, j);
			}
		}
	}
	// Selection tool
	if (sf::Mouse::isButtonPressed(sf::Mouse::Left)) {
		_currentChoosen = _currentMouseOver;
	}
	// Moving units
	else if (sf::Mouse::isButtonPressed(sf::Mouse::Right) && _currentChoosen.x >= 0 && _keyPress > 0.2f) {
		int i = _currentChoosen.x;
		int j = _currentChoosen.y;
		int x = _currentMouseOver.x;
		int y = _currentMouseOver.y;
		if (((abs(x - i) <= 1 && j == y) || (abs(j - y) <= 1 && i == x)) && _movesPPlayer > 0 && _checkBoard[i][j].CountUnits() > 0) {
			if (_checkBoard[i][j]._entity == _checkBoard[x][y]._entity && _turn == _checkBoard[i][j]._entity)
				MoveUnit(_currentChoosen, _currentMouseOver);
			if (_checkBoard[x][y]._entity == NONE && _turn == _checkBoard[i][j]._entity) {
				_checkBoard[x][y]._entity = _turn;
				_checkBoard[x][y]._field = UNIT;
				MoveUnit(_currentChoosen, _currentMouseOver);
			}
			if (_checkBoard[x][y]._entity >= 0 && _checkBoard[x][y]._entity != _checkBoard[i][j]._entity) {
				if (_checkBoard[x][y].CountUnits() > 0 && _checkBoard[i][j].CountUnits() > 0) {
					_checkBoard[x][y].Kill(1);
					_checkBoard[i][j].Kill(1);
					_movesPPlayer--;
				}
				else if (_checkBoard[x][y].CountUnits() == 0 && _checkBoard[i][j].CountUnits() > 0)	{
					if (_checkBoard[x][y]._field == FACTORY) {
						_checkBoard[x][y]._field = UNIT;
						_player[_checkBoard[x][y]._entity - 1] = false;
					}
					if (_checkBoard[x][y]._field == CORE) {
						//Window.GetGameManager()->_winner = (int)(_checkBoard[i][j]._entity + 1);
						//Window.GetGameManager()->MoveForward();
						Window.Stop();
					}
					_checkBoard[x][y]._entity = _checkBoard[i][j]._entity;
					MoveUnit(_currentChoosen, _currentMouseOver);
				}
			}
		}

		_keyPress = 0;
	}

	if (_turn == AI && _pcTurn >= 2 && _pcTurn != 3) {
		if (_pcTurn == 4) {
			for (int i = 0; i < CHECKBOARD; i++) {
				for (int j = 0; j < CHECKBOARD; j++) {
					if (_checkBoard[i][j]._entity == AI) {
						_checkBoard[i][j].TurnAlive(1);
					}
				}
			}
			_pcTurn = 0;
		}

		for (int i = 1; i <= 2; i++) {
			int ww = 0, wh = 0;
			if (i == 1 || i == 4) wh = 1;
			if (i == 1 || i == 3) ww = 1;
			if (i == 3 || i == 2) wh = CHECKBOARD - 2;
			if (i == 4 || i == 2) ww = CHECKBOARD - 2;
			if (_checkBoard[ww][wh]._entity == NONE) {
				_checkBoard[ww][wh]._entity = (ENTITY_TYPE) (i);
				_checkBoard[ww][wh]._field = UNIT;
			}
			if (_checkBoard[ww][wh]._entity == (ENTITY_TYPE) (i) && _player[_checkBoard[ww][wh]._entity-1]) {
				_checkBoard[ww][wh].TurnAlive(2);
			}
		}
	}

	if (_movesPPlayer > 0) _check = false;
	if (_moves != _movesPPlayer) {
		if (_movesPPlayer == 0) Window.UpdateStatusbar("Press ENTER for next turn");
		else if (_turnCounter == 1 && _movesPPlayer == 0 && _check) {
			_moves = 1;
			_check = false;
		}
		else Window.UpdateStatusbar(toString(_movesPPlayer) + " moves left");
	}
}
void CurrentTurn(struct StopWatch *sw){
	if(sw->isRun){
		if(!sw->isPause)
			NextTurn(sw);
	}
}
Esempio n. 14
0
void TakeTurn(Dudes *Board[8][8])
{
	GetMove(Board);
	NextTurn();
}