示例#1
0
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);
}
示例#2
0
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;
}