Как сделать функцию поиска ходов для шашки - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! Нуждаюсь в помощи коллективного разума. Не могу понять как сделать функцию поиска ходов для шашки, а точнее как она может побить. Кое-что написано уже есть, но оно не совсем корректно работает. Тут вызываем функцию:
Листинг программы
  1. for (int i = 0; i < checkersLocation.GetLength(0); i++)
  2. for (int j = 0; j < checkersLocation.GetLength(0); j++) // Перебираем все клетки
  3. if (checkersLocation[i, j] == opColor) // Находим нужную
  4. findJumps(i, j, opColor,new Move(i,j,-1,-1,-1,-1)); // Ищем можно ли побить этой шашкой
Листинг программы
  1. List<Move> jumps = new List<Move> { }; // Сюда сохраняем ходы
  2. // х, у - координаты шашки, с - сокращение от Соlor, move - туда сохраняем ход
  3. private void findJumps(int x, int y, int c, Move move)
  4. {
  5. int enemy;
  6. int empty = 0;
  7. int opColor = c;
  8. if (c == -1) enemy = 1; // Определяем кто враг
  9. else enemy = 1;
  10. // Сначала смотрим сможем ли мы вообще что нибудь побить если нет - else
  11. if (isCanJump(x, y, c))
  12. {
  13. // Проверяем на доске ли клетки
  14. if (x + 1 < 8 && y - 1 >= 0 && x + 2 < 8 && y - 2 >= 0)
  15. // Можем ли мы туда походить
  16. if (checkersLocation[x + 1, y - 1] == enemy && checkersLocation[x + 2, y - 2] == empty)
  17. {
  18. // Если можем тогда ходим
  19. // Записываем в переменную move где окажеться шашка и что побили
  20. move.hitXY.Add(new int[,] { { x + 1, y - 1 } });
  21. move.xEnd = x + 2;
  22. move.yEnd = y - 2;
  23. // Временно прячем побитую шашку чтобы не бить ее снова
  24. checkersLocation[x + 1, y - 1] = -3;
  25. // Вызываем эту же функцию уже для того места в которым шашка сейчас
  26. findJumps(x + 2, y - 2, c, move);
  27. // Меняем назад побитую шашку
  28. checkersLocation[x + 1, y - 1] = enemy;
  29. }
  30. // Эти три IF по аналогии с первым только ищем по другим диагоналям
  31. if (x + 1 < 8 && y + 1 < 8 && x + 2 < 8 && y + 2 < 8)
  32. if (checkersLocation[x + 1, y + 1] == enemy && checkersLocation[x + 2, y + 2] == empty)
  33. {
  34. move.hitXY.Add(new int[,] { { x + 1, y + 1 } });
  35. move.xEnd = x + 2;
  36. move.yEnd = y + 2;
  37. checkersLocation[x + 1, y + 1] = -3;
  38. findJumps(x + 2, y + 2, c, move);
  39. checkersLocation[x + 1, y + 1] = enemy;
  40. }
  41. if (x - 1 >= 0 && y - 1 >= 0 && x - 2 >= 0 && y - 2 >= 0)
  42. if (checkersLocation[x - 1, y - 1] == enemy && checkersLocation[x - 2, y - 2] == empty)
  43. {
  44. move.hitXY.Add(new int[,] { { x - 1, y - 1 } });
  45. move.xEnd = x - 2;
  46. move.yEnd = y - 2;
  47. checkersLocation[x - 1, y - 1] = -3;
  48. findJumps(x - 2, y - 2, c, move);
  49. checkersLocation[x - 1, y - 1] = enemy;
  50. }
  51. if (x - 1 >= 0 && y + 1 < 8 && x - 2 >= 0 && y + 2 < 8)
  52. if (checkersLocation[x - 1, y + 1] == enemy && checkersLocation[x - 2, y + 2] == empty)
  53. {
  54. move.hitXY.Add(new int[,] { { x - 1, y + 1 } });
  55. move.xEnd = x - 2;
  56. move.yEnd = y + 2;
  57. checkersLocation[x - 1, y + 1] = -3;
  58. findJumps(x - 2, y + 2, c, move);
  59. checkersLocation[x - 1, y + 1] = enemy;
  60. }
  61. }
  62. else
  63. {
  64. // Если ходов больше нет смотрим записывали ли мы вообще что нибудь в
  65. // переменную move и сохраняем ее в списке доступных ходов
  66. if (move.xEnd != -1 && move.yEnd != -1) jumps.Add(move);
  67. }
  68. }
Скриншот внизу это что-то вроде прототипа. Красные против зеленых. На доске у красных есть четыре варианта как побить. [OFFTOP] Извините за неразбериху с числами [/OFFTOP] Вот что выдает та функция:
Кто бьет: 8 Где остановится: 44 Что побила: 17 35 Кто бьет: 8 Где остановится: 12 Что побила: 17 35 19 Кто бьет: 28 Где остановится: 60 Что побила: 35 51 Кто бьет: 28 Где остановится: 24 Что побила: 35 51 19 17
То есть добавляет побитые шашки из другого хода.

Решение задачи: «Как сделать функцию поиска ходов для шашки»

textual
Листинг программы
  1. if (c == -1) enemy = 1; // Определяем кто враг
  2.             else enemy = 1;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы