Незаконный ход в игре cluedo
Привет,
Я пишу игру Cluedo на java, но не уверен в своих алгоритмах, которые отслеживают движение игрока.
Я предполагаю, что этот код верен только в ситуации, когда игрок может сделать только один шаг по сетке в свой ход. Как бы вы трансформировали этот код, чтобы сделать его применимым к этой игре, где игроки могут двигаться столько же, сколько количество выпавших кубиков, и не нарушая правила(двигаясь по диагонали)?
Что я уже пробовал:
int current_x; int current_y; int xDiff = Math.abs(current_x - x_final); int yDiff = Math.abs(current_y - y_final); if(xDiff == yDiff){ // means a player cannot move diagonally return false; }else{ return true}
Richard Deeming
Чтобы предотвратить диагональные перемещения, вам просто нужно проверить это xDiff + yDiff
равно числу прокатанных. Но это слишком упрощенно.
Вам также нужно будет проверить, что пользователь не перешел через край доски и что он не прошел через какие-либо стены.
И не забывайте, что Cluedo не основан на строгой сетке-каждая комната считается единым "пространством" и может иметь несколько дверей. Игрок, который начинает рядом с одной дверью и бросает 2, может войти в комнату и выйти через другую дверь, эффективно используя короткий путь через доску.
Member 12825358
Спасибо, ваше предложение сработало!
Для других ваших точек я создал 2d-массив int. Я дал всем комнатам одинаковые значения (то есть любому квадрату, попавшему в комнату, дается значение), коридорным квадратам одинаковые значения, и то же самое касается всех дверей комнаты. Что вы об этом думаете?