Вдохновленная этой недавней статьей, рассказывающей о французском программисте, который написал на Ассамблее 487-байтовую шахматную программу для двух игроков (человек против человека), я удивился, какими могут быть маленькие шахматные программы на других языках.
Детали
- Программа должна принимать только легальные шахматные ходы.
- Декларация о чеке / мате не является необходимой (просто желательной), хотя первое правило применяется в случае проверки.
- Согласно статье, рокировка не является необходимой реализацией.
- Также вам не нужно реализовывать en passant.
- Тем не менее, вы должны разрешить повышение пешки по достижении восьмого ранга (вы можете просто принудить преобразование в королеву).
- Вам решать, как отображается плата - терминал ASCII, GUI и т. Д.
- Вы должны показать, чья это очередь.
Правил шахмат можно найти здесь - игнорировать указание правила турнира (например , сроки, трогательные), и помните , рокировку и Мимоходом не нужны реализации.
a1 h8
перемещает ладью по диагонали в противоположный угол, перепрыгивая через пешкиОтветы:
С
650600Чтобы уменьшить код для инициализации доски, на дисплее отображаются белые (заглавные буквы), играющие слева направо, и черные (строчные буквы), играющие справа налево. Ввод осуществляется в виде двух двузначных десятичных чисел (начальная позиция и конечная позиция), с указанием файла (0-7) и ранга (0-7). Для небольшого дополнительного кода (вычтите 11 из каждого ввода), ввод может быть сделан, чтобы соответствовать http://en.wikipedia.org/wiki/ICCF_numeric_notation (цифры 1-8)
Вот пример скриншота, где черные только что продвинули свою пешку ладьи. Белые пробуют различные противозаконные ходы со своей королевой, прежде чем наконец захватить пешку. Индикаторы поворота
a
для черного иA
для белого.Интересной особенностью моей проверки является использование квадрата евклидова расстояния. Для коня это всегда 1 ^ 2 + 2 ^ 2 = 5, но я также использую его для короля и пешки.
Тест на проверку выполняется путем резервного копирования игрового поля, выполнения ходов игроков и сканирования всех 64 возможных ходов противника.
Программа должна быть завершена с помощью Ctrl-C. Я не могу придумать более изящный способ сделать это, кроме как сделать специальный шаг, чтобы закончить программу. Игра в шахматы фактически заканчивается, когда один игрок не может двигаться на своем ходу (мат или пат), и для этого требуется много тестов, которые не требуются в спецификации.
Код комментария
источник
s,f
нужно ли инициализировать? Пробелы на пустых площадях - это здорово.s
была перенесена с более ранней стадии. Я удалил это сейчас.e=y*y+x*x=f-s-u*y=f/u-s/u;
.=
, как действительно кажется единственной интерпретацией. Относительно того,e=y*y+x*(x=..
что я немного опасаюсь порядка выполнения, так как я получил неправильный ответ от аргумента, измененного вprintf
утверждении, но в этом случае, похоже, он работает нормально на GCC / Cygwin. Я буду ждать больше изменений, прежде чем включать его в код. Единственное, чего еще не хватает, это проверки чисел за пределами диапазона 0,77 (что я не вижу, как того требует спецификация, но в любом случае ..)t^=32
кt^=w
иa[95],b[95]
кa[z],b[z]
. Код удивительно читабелен. Вероятно, из-за подробных комментариев!Python 3,
11661071993 байтаЯ только понял, что мне нужно помешать королям перейти на проверку после того, как я закончил, но вот мое представление в любом случае
Чтобы играть, введите четыре числа, разделенных пробелом, первые 2 - это координаты фигуры, которую вы хотите переместить, а вторые 2 - это то место, куда вы хотите переместить.
источник
a=o*8;j=[list(s) for s in ["RNBKQBNR","P"*8,a,a,a,a,"p"*8,"rnbkqbnr"]]
.spilt()
умолчанию разделяется на пробелы, так что вы можете использоватьinput().split()
вместоinput().split(" ")
2and
,1or
и т.д.)False
может быть0!=0
.False
может быть0
-not 0
должно работать нормально ...Извините за задержку.
Программа называется ChesSkelet. В настоящее время он использует 352 байта для кода и данных. Он написан на сборке Z80, особенно для ZX Xpectrum.
Если вам не хочется его компилировать и загружать в эмулятор, вы можете играть в онлайн на сайте ChesSkelet ( http://chesskelet.x10host.com ).
Программа довольно проста, это большой цикл, в котором: - альтернативно (1) белые вводят свой ход или (2) черные запускают свой микро-ИИ для перемещения. - доска обновляется на экране. Опять же, есть огромное руководство, описывающее программу и методы на веб-сайте.
источник
> <> , 1467 байт
Ну, это не совсем побивает рекорд 487 байт…
Попробуйте на рыбной площадке ! (Он использует пару ошибок в этом интерпретаторе, поэтому я не могу обещать, что он будет работать где-то еще. Возможно, вы захотите запустить его на максимальной скорости - это может занять более минуты, чтобы сделать один ход.)
Когда вы запустите код, он напечатает
Заглавные буквы обозначают белый, строчные - черный. Вы можете дать свой ход в качестве входных данных в виде
[a-h][1-8][a-h][1-8]
, напримерe2e4
, что означает «переместить часть вe2
кe4
». Программа напечатает, например,Основной формой памяти в> <> является стек; однако, это не очень удобно для хранения шахматной доски. Вместо этого я использовал возможность самоизменения> <>, чтобы сохранить шахматную доску как часть самого исходного кода, получая к ней доступ с помощью
g
иp
.Основная часть кода заключается в проверке законности вашего переезда. Здесь нужно проверить несколько вещей:
Если какой-либо из этих вопросов имеет неправильный ответ, программа выдает ошибку и останавливается; в противном случае он редактирует шахматную доску в своем исходном коде, печатает ее снова и ждет следующего хода.
Для ходов короля и рыцаря я позаимствовал уловку Level River St для проверки квадрата евклидова расстояния: для короля это меньше 3, а для рыцаря - ровно 5.
источник