Пятая часть "шахматного проекта" - Запоминаем состояние игры
В этой части мы добавили в интерфейс строку состояния игры, добавили кнопки для начала новой игры - за белых, и за чёрных. И главное - научили игру сохранять своё состояние.
В этой части мы добавили в интерфейс строку состояния игры, добавили кнопки для начала новой игры - за белых, и за чёрных. И главное - научили игру сохранять своё состояние.
Немного про IT
Запоминаем состояние игры | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Запоминаем состояние игры. Добавляем кнопки начала игры.
Опубликовал 6-ую часть "шахматного проекта" - Генератор ходов, фабричный метод и классы фигур
Там мы:
- сделали перекодировку фигур
- написали "скелет" генератора перемещений (ходов)
- сделали общий класс шахматной фигуры и унаследовали от него шесть классов конкретных видов фигур - короля, ферзя, ладьи, слона, коня и пешки.
- реализовали шаблон проектирования "фабричный метод" для создания класса конкретного вида фигуры в генераторе перемещений
Там мы:
- сделали перекодировку фигур
- написали "скелет" генератора перемещений (ходов)
- сделали общий класс шахматной фигуры и унаследовали от него шесть классов конкретных видов фигур - короля, ферзя, ладьи, слона, коня и пешки.
- реализовали шаблон проектирования "фабричный метод" для создания класса конкретного вида фигуры в генераторе перемещений
Немного про IT
Генератор ходов, фабричный метод и классы фигур | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Создаём генератор ходов и классы фигур с помощью порождающего паттерна проектирования фабричный метод
Седьмая шахматная статья - на сайте. В ней мы сделали общую логику перемещения фигур, и написали правила хода для коня. И ещё важное изменение - фигуры теперь можно реально перемещать, т.е. при перемещении меняется состояние игры и записывается в хранилище.
Сделал две демо-страницы. Одна - "как обычно" - с кодом из статьи. Для второй в коде убрал смену очерёдности ходов. И в этом демо можно ходить белыми конями хоть сколько раз подряд. Можно съесть все чёрные фигуры, даже короля. Вот демо сумашедших коней
Сделал две демо-страницы. Одна - "как обычно" - с кодом из статьи. Для второй в коде убрал смену очерёдности ходов. И в этом демо можно ходить белыми конями хоть сколько раз подряд. Можно съесть все чёрные фигуры, даже короля. Вот демо сумашедших коней
Восьмая статья по программированию шахмат - Компьютер отвечает. Битва коней
Научили компьютер отвечать. Дали ему "случайный искусственный интеллект" 😂 С ним уже можно играть!
Правда пока можно двигать только коней. Зато можно съесть даже короля.
Демо игры, пробуйте, играйте
Научили компьютер отвечать. Дали ему "случайный искусственный интеллект" 😂 С ним уже можно играть!
Правда пока можно двигать только коней. Зато можно съесть даже короля.
Демо игры, пробуйте, играйте
Очередная статья по программированию шахмат - Пешки, вперёд!
Научили ходить пешек. У них самая сложная "бизнес-логика" ходов. Ходят вперёд, бьют наискосок. Могут превратиться в другую фигуру. Могут иногда взять "на проходе".
Пока пешки могут превратиться только в ферзя. Играйте, пробуйте - демо #9
Научили ходить пешек. У них самая сложная "бизнес-логика" ходов. Ходят вперёд, бьют наискосок. Могут превратиться в другую фигуру. Могут иногда взять "на проходе".
Пока пешки могут превратиться только в ферзя. Играйте, пробуйте - демо #9
В статье "Ходы слона, ладьи, ферзя, короля" мы научили двигаться по правилам все остальные фигуры.
Пока король не боится нападений, компьютер случайно выбирает ход, а пешка может превращаться только в ферзя.
Демо #10 игры- играйте всеми фигурами
Пока король не боится нападений, компьютер случайно выбирает ход, а пешка может превращаться только в ферзя.
Демо #10 игры- играйте всеми фигурами
Опубликовал 11-ую статью по программированию шахмат: Даём королю инстинкт самосохранения. Теперь короля нельзя оставить под атакой. Ещё теперь можно поставить мат или пат.
Пробуйте, играйте - демо #11
Уже почти полностью соблюдаются шахматные правила. Только пешку пока можно превратить только в ферзя. И не действуют правила 50 и 75 ходов по признанию ничьей.
Пробуйте, играйте - демо #11
Уже почти полностью соблюдаются шахматные правила. Только пешку пока можно превратить только в ферзя. И не действуют правила 50 и 75 ходов по признанию ничьей.
Немного про IT
Даём королю инстинкт самосохранения | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Даём королю инстинкт самосохранения, учим избегать угрозы. Определяем мат, пат.
Наконец-то! После месячного перерыва выкладываю очередную статью по программированию шахмат: Пешка может стать не только ферзём
Очередное обновление/дополнение программы происходит всегда быстро. Проблема - оформить это изменение в статью. Основная работа занимает много времени, на выходных есть ещё домашние дела.
А пока - читайте, играйте: https://dev.initit.ru/chess/v012/
Очередное обновление/дополнение программы происходит всегда быстро. Проблема - оформить это изменение в статью. Основная работа занимает много времени, на выходных есть ещё домашние дела.
А пока - читайте, играйте: https://dev.initit.ru/chess/v012/
Добавил статью Признание ничьи и отмена хода
В ней добавил возможность отмены хода, прокрутки игры назад на любое количество ходов. Ещё добавлено признание ничьи по правилу 50-и ходов и по правилу троекратного повтора позиции.
Играть в текущей версии игры можно по ссылке - https://dev.initit.ru/chess/v013/
В следующей статье добавим чуть-чуть "интеллекта" компьютеру, чтобы он делал не случайные ходы как сейчас, а чуть более рациональные.
В ней добавил возможность отмены хода, прокрутки игры назад на любое количество ходов. Ещё добавлено признание ничьи по правилу 50-и ходов и по правилу троекратного повтора позиции.
Играть в текущей версии игры можно по ссылке - https://dev.initit.ru/chess/v013/
В следующей статье добавим чуть-чуть "интеллекта" компьютеру, чтобы он делал не случайные ходы как сейчас, а чуть более рациональные.
Немного про IT
Признание ничьи и отмена хода | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Признание ничьи по правилу 50 ходов и по правилу троекратного повторения позиции. Отмена хода. Возможность
Опубликовал следующую часть из цикла "Программируем шахматы на php и javascript":
Грубый перебор ходов, NegaMax
В этой части добавил простейший шахматный ИИ. Он строит полное дерево игры на глубину всего три полухода, и оценивает позиции простейшей оценочной функций, которая учитывает только "стоимость" фигур.
Пробуйте, играйте: https://dev.initit.ru/chess/v014/
Грубый перебор ходов, NegaMax
В этой части добавил простейший шахматный ИИ. Он строит полное дерево игры на глубину всего три полухода, и оценивает позиции простейшей оценочной функций, которая учитывает только "стоимость" фигур.
Пробуйте, играйте: https://dev.initit.ru/chess/v014/
Немного про IT
Грубый перебор ходов, NegaMax | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Грубый перебор вариантов, простая оценочная функция. Алгоритмы NegaMax и MiniMax, рекурсия. Компьютер уже не зевает и избегает простейших матов
Повесил на сайт баннер рекламной сети яндекса, уж простите 🤪
Чтобы сайт приняли в сеть, опубликовал "Политику конфиденциальности", это требование сети.
Чтобы сайт приняли в сеть, опубликовал "Политику конфиденциальности", это требование сети.
Встречайте новую часть шахматных публикаций:
Альфа-бета отсечение, сортировка ходов
Алгоритм очень сильно сокращает число оцениваемых позиций. Это позволяет увеличить глубину просмотра на два полухода без увеличения времени на ход.
В демо игры я увеличил глубину не на 2 полухода, а на один. Компьютер просматривает ходы на 4 полухода вперёд, но зато за среднее время всего 2 секунды.
Альфа-бета отсечение, сортировка ходов
Алгоритм очень сильно сокращает число оцениваемых позиций. Это позволяет увеличить глубину просмотра на два полухода без увеличения времени на ход.
В демо игры я увеличил глубину не на 2 полухода, а на один. Компьютер просматривает ходы на 4 полухода вперёд, но зато за среднее время всего 2 секунды.
Немного про IT
Альфа-бета отсечение, сортировка ходов | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Альфа-бета отсечение, объяснение алгоритма альфа-бета отсечения, сортировка ходов, существенное сокращение перебора. Можно играть уже с глубиной 5 полуходов
Давно не писал. Обычно я быстро, в течении дня, пишу следующую часть шахматной программы, а потом долго пишу статью - описание этого добавленного кода для сайта. Учтите, что у меня ещё основная работа есть, и сайтом я занимаюсь редко, в основном в выходные, да и то не в каждые.
На этот раз я даже следующую часть программы не написал. Были другие важные дела. Плюс ко всему, у меня стал крашится основной SSD-диск на ноутбуке, и в конце концов, я его заменил. Комп чистый, всё нужное програмьё заново устанавливал, настраивал, это та ещё заморочка...
По шахматной программе в следующей части планирую:
1. Усложнить оценочную функцию, добавить туда позиционные факторы. Это конечно сильно снизит скорость перебора и эффективность альфа-бета отсечения. Буду экспериментировать.
2. Сделать "дробную" глубину просмотра
3. Сделать выборочные продления
На этот раз я даже следующую часть программы не написал. Были другие важные дела. Плюс ко всему, у меня стал крашится основной SSD-диск на ноутбуке, и в конце концов, я его заменил. Комп чистый, всё нужное програмьё заново устанавливал, настраивал, это та ещё заморочка...
По шахматной программе в следующей части планирую:
1. Усложнить оценочную функцию, добавить туда позиционные факторы. Это конечно сильно снизит скорость перебора и эффективность альфа-бета отсечения. Буду экспериментировать.
2. Сделать "дробную" глубину просмотра
3. Сделать выборочные продления
Пришёл вопрос по "обратной связи": как вывести состояние игры в виде текста?
Если нужен формат json, то есть простое готовое решение - метод serializeState() в классе GameState.
В json попадают поля, перечисленные в константе GameState::PROPERTY_NAMES
Если-же нужно что-то иное, надо уточнить что именно нужно, какие поля, в каком виде, ...
Если нужен формат json, то есть простое готовое решение - метод serializeState() в классе GameState.
В json попадают поля, перечисленные в константе GameState::PROPERTY_NAMES
Если-же нужно что-то иное, надо уточнить что именно нужно, какие поля, в каком виде, ...
Выложил следующую часть в "шахматной серии" статей:
Выборочные продления, игровые эвристики
В Демо игры базовая глубина перебора - всего лишь 2 полухода. Скорость перебора сильно снизилась из за усложнения оценочной функции, и вследствие этого снизилась и эффективность альфа-бета отсечения. Так что в некоторых моментах алгоритм стал играть хуже.
Но у него есть выборочные продления, некоторые ветки он просчитывает довольно далеко. Так что в каких-то позициях он находит "гениальные" ходы (шутка), а в каких-то играет очень слабо.
В целом играть стало интереснее, алгоритм играет "злее". Играйте, пробуйте внедрять свои игровые эвристики.
Выборочные продления, игровые эвристики
В Демо игры базовая глубина перебора - всего лишь 2 полухода. Скорость перебора сильно снизилась из за усложнения оценочной функции, и вследствие этого снизилась и эффективность альфа-бета отсечения. Так что в некоторых моментах алгоритм стал играть хуже.
Но у него есть выборочные продления, некоторые ветки он просчитывает довольно далеко. Так что в каких-то позициях он находит "гениальные" ходы (шутка), а в каких-то играет очень слабо.
В целом играть стало интереснее, алгоритм играет "злее". Играйте, пробуйте внедрять свои игровые эвристики.
Немного про IT
Выборочные продления, игровые эвристики | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Пробуем игоровые эвристики. Делаем выборочные продления, дробную глубину просмотра, усложняем оценочную функцию. Фактор атаки. Близость фигур.
Встречайте обновление, следующую итерацию шахматного алгоритма на php.
Оптимизируем, поле 16*16, взятия до конца
Алгоритм выигрывает у сторонней программы на уровне 6, который соответствует примерно ELO=1435. Но проигрывает на уровне 7, который соответствует ELO=1526.
Попробуйте, поиграйте сами с версией 17
Оптимизируем, поле 16*16, взятия до конца
Алгоритм выигрывает у сторонней программы на уровне 6, который соответствует примерно ELO=1435. Но проигрывает на уровне 7, который соответствует ELO=1526.
Попробуйте, поиграйте сами с версией 17
Немного про IT
Оптимизируем, поле 16*16, взятия до конца | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Оптимизируем, пытаемся ускорить код. Представление полем 16*16. Форсированные взятия до конца.
Добавил статью с описанием одного случая из моего далёкого прошлого:
Дикая оптимизация (конкурс программистов)
Тема статьи немного связана со следующей будущей статьёй из "шахматного цикла"
Дикая оптимизация (конкурс программистов)
Тема статьи немного связана со следующей будущей статьёй из "шахматного цикла"
Немного про IT
Дикая оптимизация (конкурс программистов)
Конкурс программистов, дикая оптимизация, ускорение программы
Программист критикует хобби-проекты других программистов
Михаил Ларченко в своём телеграмм-канале предложил сбросить ссылки на свои пет-проекты, чтобы их посмотреть и покритиковать.
Я прислал ссылку на мой initit.ru
И вот он выложил видео.
Кто такой Михаил? - спросите вы. Он программист, блогер и эксперт - преподаватель, читает лекции по javascript студентам в компании, где я работаю.
Михаил Ларченко в своём телеграмм-канале предложил сбросить ссылки на свои пет-проекты, чтобы их посмотреть и покритиковать.
Я прислал ссылку на мой initit.ru
И вот он выложил видео.
Кто такой Михаил? - спросите вы. Он программист, блогер и эксперт - преподаватель, читает лекции по javascript студентам в компании, где я работаю.
YouTube
Программист критикует хобби-проекты других программистов
Учитесь программировать на практике с реальными спринтами https://preax.ru/?i=bcc91e1c&erid=2W5zFGot9p4
Реклама ООО «ПРЕАКС ПЛЭТФОРМ» ОГРН 1237700372755, ИНН 9727035595, erid 2W5zFGot9p4
Я попросил подписчиков-программистов прислать ссылки на свои проекты…
Реклама ООО «ПРЕАКС ПЛЭТФОРМ» ОГРН 1237700372755, ИНН 9727035595, erid 2W5zFGot9p4
Я попросил подписчиков-программистов прислать ссылки на свои проекты…
Добавил следующую статью из шахматного цикла, дошли наконец руки.
Битовые доски
В статье описаны идеи и основные "механики" работы с битовыми досками. Скорость перебора оцененных позиций возросла минимум в два с половиной раза в позициях где много вариантов развития событий. А в остальных вариантах ускорение получилось в 8-9 раз.
Но этого всё равно недостаточно чтобы увеличить глубину перебора на целое число полуходов так, чтобы компьютер отвечал быстро. Но среднюю глубину я увеличил. Компьютер стал играть ещё немного сильнее.
Пробуйте, играйте - Играть с компьютером, v18
Битовые доски
В статье описаны идеи и основные "механики" работы с битовыми досками. Скорость перебора оцененных позиций возросла минимум в два с половиной раза в позициях где много вариантов развития событий. А в остальных вариантах ускорение получилось в 8-9 раз.
Но этого всё равно недостаточно чтобы увеличить глубину перебора на целое число полуходов так, чтобы компьютер отвечал быстро. Но среднюю глубину я увеличил. Компьютер стал играть ещё немного сильнее.
Пробуйте, играйте - Играть с компьютером, v18
Немного про IT
Битовые доски | Шахматы на php и javascript
Учимся программировать шахматы на php и javascript: Представление доски битовыми досками, битовые операции