class — назначить новое случайное направление для элемента данных, который отличается от текущего в переполнении стека

class Child:public Parent{
public:
enum Direction { Left, Right, Up, Down };
Direction direction;
void Update();
private:
int x,y;
void ChangeDirection();
void Draw();

};

мне нужно Обновить() функция, которая вызывает Изменить направление() а также Рисовать() увеличивать и уменьшать х у значения по текущему направлению, которое я сделал. Моя проблема в том что Y или же Икс не может быть (-) значением.

А также Изменить направление() следует назначить случайное направление для данных направления, и снова это направление должно быть отличается от текущего направления.
я мог соиЬ случайные направления в пределах одного и того же Изменить направление() функционировать таким образом

Direction direction = static_cast<Direction>(rand() % 4);
cout << direction;

но опять-таки иногда он печатает в том же направлении. Теперь то, что я хочу, это случайное назначение направления должно происходить в Изменить направление() функция-член не позволяет текущее значение снова, но она должна отображать результаты через ничья void (); функция-член, которая увеличивает или уменьшает х у значения, не позволяя ему быть (-) значением (должно быть ограничено до 0).
это то, что я сделал для этого.

if ( direction == 0 ){
cout << "Right";
x++;
}
else if (direction == 1 ){
cout << "Down";
y++;
}
else if (direction == 2 ){
cout << "Up";
y--;
}
else if (direction == 3 ){
cout << "Left";
x--;
}
Draw();

Но это дает (-) значения. как мне сделать шаг вперед
..

-1

Решение

Поскольку вы назначаете случайное направление, имеет смысл, что направление, которое назначается, иногда равно предыдущему направлению. Попробуйте что-то вроде:

Direction direction = static_cast<Direction>((currentDirection + 1 + (rand() % 3) ) % 4);

чтобы вы получили новое направление

Редактировать:
Чтобы ответить на другую часть вашего вопроса, вы должны проверить значения x и y перед увеличением или уменьшением, чтобы убедиться, что они находятся в границах того, что вы в настоящее время используете. Вот пример того, о чем я говорю:

 if(x > 0){
x--;
} else {
//do something else
}
1

Другие решения


По вопросам рекламы [email protected]