/* 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); }
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); }