Редактировать:
Ошибка вашего метода в том, что вы не обращаете внимания на то, какие координаты включит / выключит желтое или красное поле.Вы просто проверяете, включены ли они.Итак, сначала вы должны принять к сведению эти разные координаты, поскольку, как вы сказали, есть определенные координаты, которые будут включать или выключать либо желтое, либо повторное поле.После того, как вы узнаете эти координаты, вы затем проверяете, находится ли пользователь в желто-красной позиции, после чего вы должны проверить, в каком состоянии находится это поле (например, если оно в данный момент включено, то вы выключаете его).
Я понимаю, как двигаться, но я не понимаю, как отформатировать условное выражение, чтобы позволить мне преодолевать барьеры, которые выключены (ложь), в то время как другие барьеры включены (правда).То есть, если красные барьеры включены, а желтый выключен, я смогу перейти к желтому, но это не тот случай, так как он говорит мне, что путь заблокирован.
Основа на том, что высказал выше, я думаю, что вы неправильно поняли проблему.Вы предполагаете, что у каждого местоположения есть силовое поле, и это зависит от буквы y / r на карте, но я думаю, что это не так.Только дверь имеет силовое поле, и ваша цель - добраться до того места, где дверь со всеми силовыми полями выключена.Поскольку, если вы придерживаетесь своего понимания и цель состоит в том, чтобы перевести пользователя из местоположения (1, 2) в местоположение (1, 0), обращенное к зеленой двери (все поля отключены), это будет невозможно.
Это будет карта:
0 1 2
--------------
0| r r r
1| r y r
2| y y y
Тогда это будет статус:
начало в координате (1,2) (redField выключен, yellowField выключен)
перейти к координате (1,1) (redField выключен, yellowField включен)
перейти к координатам (1,0) (redField включен, yellowField включен)
Вы находитесь в положении целино все поля включены, таким образом, вы еще не закончили, однако в этом состоянии вы не можете двигаться, так как все поля включены.Делать эту проблему неразрешимой, если вы предполагаете, что алгоритм должен быть выполнен так же, как вы сказали.
Отсюда вы можете обратиться к моему первоначальному ответу о том, как решить проблему.
Оригинальный ответ:
Прежде всего у меня будут эти предположения, так как вашописание того, как работает игра, неясно.
- Цель игры - перейти в «определенное» место, но вам необходимо отключить все силовые поля этого места, чтобы войти.
- That »определенное место "никогда не объявляется в программе, и нет параметра метода, который объявляет его, поэтому я предполагаю, что это статическая переменная.Поэтому пока я буду использовать комментарий метода пошагового руководства и назначу местоположение пользователя (1, 2), а «определенное» местоположение места - (1, 0)
Учитывая приведенное выше предположениеВот как вы будете реализовывать игру.
Вы должны реализовать следующие проверки:
- Сначала вам нужно проверить границы.
In your case this one:<br>
(0, 0) (1, 0) (2, 0)<br>
(0, 1) (1, 1) (2, 1)<br>
(0, 2) (1, 2) (2, 2)<br>
Thus your x and y coordinate should not be less than 0 or more than 2
<li>Check if the red field is on. </li>
<li>Check if the yellow field is on.</li>
<li>Check if you are facing the door and the green frame is on</li>
</ol>
<p>Here is the gist:</p>
<p>In beginning of your movement methods (moveLeft, moveRight, moveBackward, moveForward) you have to calculate where to user will go. And from that newly calculated place you have to do the above checking (Check 1 only).</p>
<p>Example:</p>
<pre><code>public void moveBackward() {
int tmpY = yPosition + 1; // Subtract 1 from y position since the user is about to move backward
// Check # 1
if (tmpY > 2) { // you only need this check since you know that you are only incrementing yPosition
System.out.println("Your path is blocked pick another move");
return;
}
// If a valid move but the user did not win
yPosition = tmpY;
toggleFields();
view.display(xPosition, yPosition, yellowField, redField);
}
</code>
Теперь вам нужно реализовать оставшиеся проверки в ваших полях toggleFieldsМетод.
public void toggleFields(){
/* You can store all the locations of the red and yellow fields in a matrix but for simplicity sake I will just hard code it to the if/else statements.
* Also the goal location is hard coded since there is no mention from your post where the goal location is. The goal location is (1.0)
* 0 1 2
* ------------
* 0| r r r
* |
* 1| r y r
* |
* 2| y y y
*/
// Check # 2
if ((xPosition == 0 && yPosition == 0) ||
(xPosition == 1 && yPosition == 0) ||
(xPosition == 2 && yPosition == 0) ||
(xPosition == 0 && yPosition == 1) ||
(xPosition == 2 && yPosition == 1) ) {
if (redField) {
redField = false;
} else {
redField = true;
}
}
// Check # 3
if ((xPosition == 1 && yPosition == 1) ||
(xPosition == 0 && yPosition == 2) ||
(xPosition == 1 && yPosition == 2) ||
(xPosition == 2 && yPosition == 2) ) {
if (yellowField) {
yellowField= false;
} else {
yellowField= true;
}
}
// Check # 4
if (!redField && !yellowField && xPosition == 1 && yPosition == 0) {
System.out.println("You win");
return;
}
}