У меня была идея, дать компу играть самим с собой, но непонятно, что с этим делать дальше.
Вы предлагаете дать компу играть самому с собой, пока на доске нет дамок, и формировать таким образом базу дебютов. Но как компу понять, что дебют действительно хороший? То есть даже если позиция после 10-15 ходов равна по материалу, это не значит, что она равна действительно. Как компьютеру, разыграв партию, понять, что этот дебют действительно хороший и его стоит запомнить... Не совсем интуитивно понятно...
Интересно, получается, шашки все же привлекли чье-то внимание:) Интернет многое помнит, это правда. Поищу, если время будет. Однако, если не знаешь, что ищешь, то сложно найти. Наверно, поэтому я и не смог найти эту программу раньше)
Я что-то не понял, как вы посчитали на 10 ходов вперед. На конкретном ходе у нас есть 22*22=484 варианта хода. Но из каждой из этих позиций погружаясь на новую глубину, мы получаем новую позицию, в которой в нас опять есть 484 варианта хода. Т.е. мы должны возводить в степень, а не умножать, не так ли?
Насчет правил — у меня все так и есть. В начале статьи написано: "Если есть несколько вариантов боя — можно выбрать любой". И насчёт дамки -- если шашка превратилась в дамку, она у меня продолжает бить по правилам дамки. Об этом написано в третьей bullet-point после функции GetAllMoves()
Про эндпильные базы -- интересно. А что за программа такая, Тундра? Она открыта? Можно где-то посмотреть, как она работает?
Насчет алгоритма боя, я долго с этим промучился, к тому же я и сам не понимал, обязан ли игрок брать еще одну шашку, если может этого избежать. Но эту ошибку я исправил и сейчас действительно доступно в такой позиции только два взятия. Этой программой я играл с другими приложениями в плеймаркете, и везде правила и возможности ходов совпадали.
Выиграть у компьютеры в шахматы — невозможно. После победы компьютера DeepBlue над Каспаровым в 1996 году, компьютеры развились настолько, что могут победить даже чемпиона мира, еще и с форой.
Английские шашки, как я написал, постигла ничейная смерть. Это значит, что были полностью рассчитаны варианты, гарантированно обеспечивающие игроку ничью, за какую сторону бы он не играл.
Насчет русских шашек -- не уверен. Как я и сказал, я не нашел каких-либо готовых программ.
Увы, не похоже, что эта тема подробно разъясняется в курсах и туториалах, ибо на том же StackOverflow (как минимум на русском) с завидной регулярностью всплывают вопросы: "Почему коллайдеры не взаимодействуют", "Почему столкновение не обрабатывается", "Почему коллайдеры проходят свозь друг друга". Я даже могу с уверенностью заявить, что помню вопрос "Где и как вызвать функцию OnCollisionEnter?" Сейчас не могу найти - предполагаю, что вопрос закрыли.
Пару лет назад я даже написал там вопрос-ответ с очень краткой информативной справкой и по просмотрам можно понять, что новички сталкиваются с проблемами по теме часто.
Проблема распространенная и может иметь несколько причин. Часто новички пытаются реализовать движение не через физическое перемещение (Rigidbody), а напрямую изменяя transform.position. Однако этот способ приемлем, только если нужно "телепортировать" один объект в другое место. При попытке использовать его в физическом перемещении, логично, что объекты могут проходить друг сквозь друга, особенно если их коллайдеры малы (узки).
Согласен, неточная формулировка. Полный повтор сложных форм сильно бил бы по производительности. Хотя, пожалуй, в наработках начинающих используются довольно простые модели/спрайты и коллайдеры на них довольно простые:)
Спасибо за советы.
Насчет транспозиций, не совсем так: одинаковые позиции могут возникнуть, например, если шашка пойдет налево или направо: e3-d4-e5 или e3-f4-e5.
Ничего не редактировал.
У меня была идея, дать компу играть самим с собой, но непонятно, что с этим делать дальше.
Вы предлагаете дать компу играть самому с собой, пока на доске нет дамок, и формировать таким образом базу дебютов. Но как компу понять, что дебют действительно хороший? То есть даже если позиция после 10-15 ходов равна по материалу, это не значит, что она равна действительно. Как компьютеру, разыграв партию, понять, что этот дебют действительно хороший и его стоит запомнить... Не совсем интуитивно понятно...
Ничего не исправлял.
Интересно, получается, шашки все же привлекли чье-то внимание:) Интернет многое помнит, это правда. Поищу, если время будет. Однако, если не знаешь, что ищешь, то сложно найти. Наверно, поэтому я и не смог найти эту программу раньше)
Я что-то не понял, как вы посчитали на 10 ходов вперед. На конкретном ходе у нас есть 22*22=484 варианта хода. Но из каждой из этих позиций погружаясь на новую глубину, мы получаем новую позицию, в которой в нас опять есть 484 варианта хода. Т.е. мы должны возводить в степень, а не умножать, не так ли?
Спасибо за комментарий.
Насчет правил — у меня все так и есть. В начале статьи написано: "Если есть несколько вариантов боя — можно выбрать любой". И насчёт дамки -- если шашка превратилась в дамку, она у меня продолжает бить по правилам дамки. Об этом написано в третьей bullet-point после функции GetAllMoves()
Про эндпильные базы -- интересно. А что за программа такая, Тундра? Она открыта? Можно где-то посмотреть, как она работает?
Насчет алгоритма боя, я долго с этим промучился, к тому же я и сам не понимал, обязан ли игрок брать еще одну шашку, если может этого избежать. Но эту ошибку я исправил и сейчас действительно доступно в такой позиции только два взятия. Этой программой я играл с другими приложениями в плеймаркете, и везде правила и возможности ходов совпадали.
Выиграть у компьютеры в шахматы — невозможно. После победы компьютера DeepBlue над Каспаровым в 1996 году, компьютеры развились настолько, что могут победить даже чемпиона мира, еще и с форой.
Английские шашки, как я написал, постигла ничейная смерть. Это значит, что были полностью рассчитаны варианты, гарантированно обеспечивающие игроку ничью, за какую сторону бы он не играл.
Насчет русских шашек -- не уверен. Как я и сказал, я не нашел каких-либо готовых программ.
Спасибо за отзыв и информацию.
Увы, не похоже, что эта тема подробно разъясняется в курсах и туториалах, ибо на том же StackOverflow (как минимум на русском) с завидной регулярностью всплывают вопросы: "Почему коллайдеры не взаимодействуют", "Почему столкновение не обрабатывается", "Почему коллайдеры проходят свозь друг друга". Я даже могу с уверенностью заявить, что помню вопрос "Где и как вызвать функцию OnCollisionEnter?" Сейчас не могу найти - предполагаю, что вопрос закрыли.
Пару лет назад я даже написал там вопрос-ответ с очень краткой информативной справкой и по просмотрам можно понять, что новички сталкиваются с проблемами по теме часто.
Проблема распространенная и может иметь несколько причин. Часто новички пытаются реализовать движение не через физическое перемещение (Rigidbody), а напрямую изменяя transform.position. Однако этот способ приемлем, только если нужно "телепортировать" один объект в другое место. При попытке использовать его в физическом перемещении, логично, что объекты могут проходить друг сквозь друга, особенно если их коллайдеры малы (узки).
Если же движение реализовано правильно, может помочь установка поля Collision Detection на
Continuous
вместоDiscrete
. С другой стороны, это ударит по производительности в больших проектах. Проблема распространенная, о ней не раз спрашивали и писали.(https://forum.unity.com/threads/what-are-the-necessary-settings-to-prevent-objects-passing-through-each-other-at-high-speeds.384519/)Согласен, неточная формулировка. Полный повтор сложных форм сильно бил бы по производительности. Хотя, пожалуй, в наработках начинающих используются довольно простые модели/спрайты и коллайдеры на них довольно простые:)