示例#1
0
/* slots */
void kMancalaMain::playerHumanMove(int i) {
	int currentPlayer = _controller->currentPlayer();

	if ( _players[currentPlayer]->getType() == PLAYER_AI ) 
		return;

	int move = ( currentPlayer == PLAYER_2 ? i-PLAYER_2_FIRST_GAP : i );

	qDebug("Move: %d, Current Player: %d \n", move, currentPlayer);
    
	if ( !_controller->checkMove(currentPlayer, _board, move) ) {
		qDebug("Invalid move");
		return;
	}
   
	_playerMove(currentPlayer, move); 
}
示例#2
0
void kMancalaMain::startPlayerAIMove() {
	if ( _gamePaused ) { qDebug("startPlayerAIMove(): Game paused, halting player move"); return; }
	if ( !_gameActive ) { qDebug("startPlayerAIMove(): Game not active, halting player move"); return; }

	qDebug("startPlayerAIMove(): starting ...");

	int currentPlayer = _controller->currentPlayer();
	qDebug("startPlayerAIMove(): Ai move current player %d", currentPlayer);

	int level = _players[currentPlayer]->getLevel();

	_ai->setLevel(level*2-1);
	qApp->processEvents();
	int r = _ai->getMove(currentPlayer, _board);

	if ( !_gameActive ) { qDebug("startPlayerAIMove(): Game not active, halting player move, test 2"); return; }
	_playerMove(currentPlayer, r);
}
void _testTree()
{
  // create 3 lvls for the initial tree
  //first lvl, max's turn, initial state of board
  _createNode(0,board); //create initial node for test_tree_head, current state = head at this point
  
  //second lvl, min's turn, 4 states
  //(top left corner, (4,4), (5,5), bottom right corner)
  char new_state[BOARD_SIZE][BOARD_SIZE];
  
  /*NOTE: x - 1, and y - 1 as array range from 0 -7, not 1 - 8 */

  /* top left corner */
  _createState(0,0,new_state,current_state->state);
  _createNode(0,new_state);
  /* (4,4) */
  _createState(3,3,new_state,current_state->state);
  _createNode(0,new_state);
  /* (5,5) */
  _createState(4,4,new_state,current_state->state);
  _createNode(0,new_state);
  /* bottom right corner */
  _createState(7,7,new_state,current_state->state);
  _createNode(0,new_state);
  
  /*third lvl, middle states have 4 children each, corners have 2 */
  /*NOTE: current state should point to child_head of top left corner node */
  current_state = current_state->child_head; //reset current state to firsts lvl's child_head
  
  /*NOTE: x - 1, and y - 1 as array range from 0 -7, not 1 - 8 */

  /* top left corner children = (1,2), (2,1) */
  _createState(0,1,new_state,current_state->state);
  _playerMove(0,0,0,1,new_state); //zero all slots between moves
  _createNode(0,new_state);
  _createState(1,0,new_state,current_state->state);
  _playerMove(0,0,1,0,new_state); //zero all slots between moves
  _createNode(0,new_state);

  /* (4,4) = (3,4), (4,3), (5,4), (4,5)*/
  _createState(2,3,new_state,current_state->next->state); //skip to next as current_state not reset
  _playerMove(3,3,2,3,new_state); //zero all slots between moves
  _createNode(1, new_state);  //reset current_state to next parent
  _createState(3,2,new_state,current_state->state);
  _playerMove(3,3,3,2,new_state); //zero all slots between moves
  _createNode(0,new_state);
  _createState(4,3,new_state,current_state->state);
  _playerMove(3,3,4,3,new_state); //zero all slots between moves
  _createNode(0,new_state);
  _createState(3,4,new_state,current_state->state);
  _playerMove(3,3,3,4,new_state); //zero all slots between moves
  _createNode(0,new_state);

  /* (5,5) = (4,5), (5,4), (5,6), (6,5) */
  _createState(3,4,new_state,current_state->next->state); //skip to next as current_state not reset
  _playerMove(4,4,3,4,new_state); //zero all slots between moves
  _createNode(1, new_state); //reset current-state to next parent
  _createState(4,3,new_state,current_state->state);
  _playerMove(4,4,4,3,new_state); //zero all slots between moves
  _createNode(0,new_state);
  _createState(4,5,new_state,current_state->state);
  _playerMove(4,4,4,5,new_state); //zero all slots between moves
  _createNode(0,new_state);
  _createState(5,4,new_state,current_state->state);
  _playerMove(4,4,5,4,new_state); //zero all slots between moves
  _createNode(0,new_state);

  /* bottom right corner = (8,7), (7,8) */
  _createState(7,6,new_state,current_state->next->state); //skip to next as current_state not reset
  _playerMove(7,7,7,6,new_state); //zero all slots between moves
  _createNode(1, new_state); //reset current-state to next parent
  _createState(6,7,new_state,current_state->state);
  _playerMove(7,7,6,7,new_state); //zero all slots between moves
  _createNode(0,new_state);

  // print tree and clean up memory
  _printTesttree(test_tree_head);
  _cleanTesttree(test_tree_head);

}