Game::move Game::random_move() const { srand(time(NULL)); int obj; int tar = -1; bool can_end = can_end_turn(); if(passed && moves_made >= 2) return MOVE_END; do { if((rand() % 25) == 0 && can_end) return MOVE_END; obj = get_id(act_player, rand() % 7); int_vector chosen = possible_moves(obj); if(chosen.size() == 0) continue; tar = chosen.at(rand() % chosen.size()); } while(tar == -1); return move(get_elem_pos(obj), tar); }
bool Piece::move(Field& field) { vector<Field*> moves; possible_moves(moves); bool flag = false; for(int i = 0; i < moves.size(); i++) { if(*moves[i] == field) { flag = true; } } if(flag) { Piece* beated_piece = field.piece; Field* start_place = place; if(field.piece) { if(name == "king" && board->is_threatened() && field.piece->name == "rook" && color == field.piece->color) { if(field.x == 0) field.piece->place = board->board[3][place->y]; else field.piece->place = board->board[5][place->y]; } else { field.piece->beaten = true; //field.piece->place = nullptr; } } field.piece = this; place->piece = NULL; place->empty = true; place = &field; if(board->is_threatened()) { start_place->piece = this; place = start_place; field.piece = beated_piece; beated_piece->place = &field; } moved = true; return true; } return false; }