Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Создание игры "Шахматы".
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
BBqwe BBqwe вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 3
Поблагодарили 1 раз в 1 сообщении
Регистрация: 04.11.2012
По умолчанию Создание игры "Шахматы". - 04.11.2012, 20:50

Все добрый вечер .

Я хочу для себя написать программу, которая будет со мной играть в шахматы.
Но я не знаю с чего мне начать!
был бы очень признателен, если бы вы подсказали что нужно для начала сделать и так далее. Программу я хочу написать сам, так как мне нужно будет учесть некоторые моменты внутри программы.
Ответить с цитированием
  (#2 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 05.11.2012, 02:30

Ха-ха-ха!
Веселый Ваш вопрос
А если серьезно... Для начала, чтобы написать шахматную программу, нужно быть очень неплохим программистом и самому довольно сносно играть в шахматы, чтобы неплохо понимать игру. Нужно довольно хорошо освоить хотя бы один язык программирования, хотя бы тот же Си, например, можно даже и не Си++, т. к. сомневаюсь, что классы и ООП особенно нужны в программировании компьютерных шахмат. Тут, конечно, могут быть разные мнения и подходы, но мне кажется, что обычного алгоритмического программирования без применения ООП-методики здесь будет вполне достаточно (хотя не хочу навязывать свою точку зрения). И конечно же надо понимать, что такое компьютер и как он работает.

Имеет смысл скачать и установить какую-нибудь шахматную оболочку типа Xboard или Winboard. Все шахматные игровые программы (т. н. движки, engines) представляют собой сейчас консольные программы, стандартный входной и выходной поток которых через пайпы (в Windows пайпы называются анонимными каналами, но это по-моему то же самое) соединяется с игровой оболочкой. Шахматная оболочка запускает игровую программу отдельным процессом, предварительно переназначив ее стандартный входной и выходной поток на пайп, и далее начинается игра: оболочка сообщает через пайп программе ход противника (человека или другого такого же движка, запущенного в той же оболочке), программа принимает его, думает, делает ответный ход и сообщает его оболочке. Наверное, оболочка сообщает программе еще какую-нибудь важную информацию вроде оставшегося времени на игру, объема оперативной памяти, которую может занимать программа и т. п. (этих деталей я совсем не знаю). Формат или язык, на котором оболочка общается с игровой программой (движком) стандартизирован и называется протоколом. Вроде как сейчас имеют хождение 2 протокола: протокол XBoard (и его версия для WinBoard) и протокол UCI. Так что имеет смысл освоить хотя бы один из них. Можно, конечно, и самому написать такую оболочку, придумав для нее собственный метод обмена информацией, но стоит ли на это терять время? Не проще ли использовать готовую оболочку и писать под нее свой chess engine?
Ответить с цитированием
  (#3 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 05.11.2012, 04:53

Все существующие сейчас шахматные программы работают по одному и тому же принципу и основаны на алгоритме перебора вариантов. Довольно тупая методика, к тому же очень затратная по вычислительным ресурсам, но ничего умнее никто до сих пор так и не придумал. Программа из своей начальной позиции считает ходы вперед за себя и за противника на некоторую глубину и оценивает качество получившейся позиции. Чтобы перебрать все варианты из некоторой начальной позиции на некоторую фиксированную глубину программа должна делать ходы как вперед, так и возвращаться назад (брать ходы назад) с тем, чтобы опять сделать ходы вперед. Все существующие варианты можно представить в виде дерева ходов и чтобы их перебрать программа должна сделать обход этого дерева. Естественно, само дерево она в памяти компьютера не хранит, иначе память компьютера оказалось бы мгновенно заполненной.

Задача шахматной программы состоит в поиске наилучшего варианта игры, т. е. такого варианта, при котором, как считает программа, и она, и ее соперник делают лучшие ходы. Все конечные позиции, получающиеся при просчете на некоторую фиксированную глубину, оцениваются т. н. оценочной функцией, которая приписывает каждой позиции некоторое число, в зависимости от ее качества с точки зрения программы. Если позиция выгодна программе, число будет, допустим, положительно, если выгодна противнику, число отрицательно. Более выгодной позиции ставится в соответствие большее число, менее выгодной - меньшее. Если число близко к нулю - позиция примерно равная для обеих сторон.

Выбор наилучшего варианта ходов делается по минимаксному принципу и его можно делать на возврате ходов в процессе обхода вариантов. Допустим, на последнем уровне глубины n-1 ход из некоторой позиции делает противник. Тогда мы выбираем лучший ход противника из этой позиции, т. е. ход, приводящий к позиции с наименьшим значением оценочной функции (наименее выгодный для нас). Далее, забираем ход назад, делаем ход сами, и делаем ход за противника. Опять из всех ходов противника выбираем ход с наихудшей оценкой позиции для нас. Обходим все поддерево из позиции с уровнем глубины n-2 и из выбранных лучших позиций с точки зрения противника на n-1 уровне выбираем уже ход лучший с точки зрения программы (т. к. с уровня n-2 ходит уже не противник, а наша программа), т. е. позицию, дающую максимальное значение оценочной функции. На уровне n-3 выбираем позицию с минимальным значением оценочной функции из числа позиций отобранных на n-2 уровне, а на n-4 уровне выбираем опять позицию с максимальным рейтингом из числа позиций, отобранных на n-3 уровне. И таким способом доходим до самого первого нашего уровня, на котором и выбираем окончательный вариант. На каждом предыдущем шаге критерий выбора меняется на противоположный: максимум на минимум, и наоборот. В этом и состоит принцип минимакса. Отбор вариантов идет при ходе из более глубокого положения в менее глубокое.
Ответить с цитированием
  (#4 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 05.11.2012, 05:59

Так работает самая простенькая примитивная шахматная программа.

А дальше возникает следующая проблема. При полном переборе на фиксированную глубину число позиций, которые надо просмотреть и оценить при помощи оценочной функции растет в геометрической прогрессии, а эффективность программы и качество принятого ею решения напрямую зависит от глубины просчета. Время вычислений практически прямо пропорционально количеству просмотренных позиций. На некотором уровне глубины (зависит от мощности компьютера) увеличивать глубину просчета дальше становится невозможно, т. к. при небольшом ее увеличении - на 1 - 2 полухода - время вычислений становится неприемлемым. Допустим, просчет на 8 полуходов вперед занял у нас час (цифры условны), тогда просчет на 9 полуходов займет сутки, а на 10 - месяц. При таких затратах времени качество игры у нас возрастет не очень сильно.

Поэтому при создании переборного алгоритма идут на всякие ухищрения. Например, метод альфа-бета отсечений. В этом методе из определенной позиции, возникшей на определенном уровне просчета, делается просчет на определенную промежуточную глубину, получившиеся позиции рассматриваются оценочной функцией, наиболее слабые варианты (т. е. варианты, получившиеся при заведомо плохих ходах одного из игроков или обоих из них) отбрасываются, усекаются, и далее рассчитываются вперед лишь варианты, которые имеет смысл рассматривать. Этот метод позволяет сократить объем вычислений, выбросив из рассчета заведомо ненужный хлам и тем самым увеличить эффективную глубину просчета. Этот же метод может привести и к ошибкам (выбору не лучшего решения), когда какая-то тонкая и хорошая многоходовка будет заранее выброшена как брак без полного рассмотрения. Думаю, что альфа-бета отсечение можно реализовать по-разному, с учетом разных тонкостей. Очень большое поле для творчества.

Острые варианты - взятия, шахи, длинные многоходовые размены фигур надо рассматривать по возможности до конца, т. е. для них специально увеличивать глубину просчета, иначе при остановке в середине их и применении к ним оценочной функции может возникнуть неверная ошибочная оценка (в свою пользу или в пользу противника).

Также к ухищрениям перебора относится метод пропуска хода в острых ситуациях, позволяющий приблизительно оценить ситуацию, сократив время расчета.

Еще такой важный момент. При переборе шахматных вариантов возникает куча повторяющихся позиций, продолжения из которых были рассмотрены ранее. Рассматривать такие позиции повторно бессмысленно, т. к. они ведут к повторению проверенных вариантов один в один. Если бы удалось исключить все повторяющиеся позиции из рассмотрения, прирост производительности шахматного алгоритма был бы фантастический, геометрическая прогрессия, выражающая зависимость объема вычислений от глубины просмотра ходов, заменилась бы на какую-то гораздо более мягкую функцию. С повторяющимися позициями традиционно борятся методом хэш-функций, когда информация о просмотренных ранее позициях заносится в специальные хэш-таблицы в виде какого-то ключа, а далее каждая возникшая в процессе перебора позиция ищется в хэш-таблице. К сожалению, хэш-таблицы требуют определенного места в оперативной памяти и чем больше позиций запомнено, тем больше требуется памяти для них. Их размер ограничен объемом ОЗУ компьютера. Поэтому полностью исключить повторяющиеся позиции они могут лишь для поддеревьев дерева перебора с определенной глубиной, но не для всего дерева. Тем не менее прирост производительности и глубины счета шахматного алгоритма они дают колоссальный, особенно если у компьютера много оперативной памяти. Пожалуй, это самый эффективный метод оптимизации шахматных программ. Альфа-бета отсечения дают тоже очень много.

Ну и еще наверняка есть масса способов и ухищрений, позволяющих улучшить алгоритм перебора, добиться большей полезной глубины, о которых я не знаю.
Ответить с цитированием
  (#5 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 05.11.2012, 06:28

Таким образом, написание шахматной программы сводится к созданию следующих трех подпрограмм.

1. Генератора хода. Он должен производить из данной позиции все существующие легальные ходы. Весьма непростая и скурпулезная в написании функция, хотя качество от игры от нее не зависит, разве что она должна быть быстрой, не жрать много вычислительных ресурсов, иначе упадет производительность перебора и как следствие уровень игры программы.

2. Алгоритма перебора. Пожалуй, самая сложная и ответственная часть, если только не реализован простеший алгоритм с полным перебором на фиксированную глубину. От нее больше всего зависит уровень игры программы, роль этого алгоритма огромна. Большое поле для творчества.

3. Оценочная функция. Чистая эвристика, никаких научных доказательств. Должна учитывать суммарную ценность фигур на доске, например, так:
Пешка = 100
Конь, Слон = 300
Ладья = 500
Ферзь = 900.
Короля можно в принципе оценить как угодно, от этого ничего не зависит, все равно он всегда есть на доске и вокруг него строится вся игра.

Плюс эвристическая оценка качества позиции (стратегия). Свобода действия фигур каждой стороны, владение полями, в т. ч. центром, полями на половине доски противника, качество пешечной цепи: разрывы, сдвоенные пешки - плохо, непрерывная цепь - хорошо, угроза королю и т. д. Все эти характеристики тоже должны каким-то образом влиять на число, приписываемое функцией позиции. Как будут даваться эти оценки, во многом это полет фантазии программиста. Главное, чтобы функция давала хорошие объективные результаты и не была при этом слишком медленной. От ее качества тоже очень сильно зависит уровень программы.

Ну и еще дебютные и эндшпильные библиотеки. Что это такое - понятно. Если позиция есть в дебютной или эндшпильной базе - перебора не выполняется, а выбирается стандартный ход из базы. Как только встретилась неизвестная позиция - запускается перебор. Их можно взять готовые.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 05.11.2012, 07:08

А дальше хорошо подумайте, стоит ли Вам заниматься всем этим. Задача творческая, интересная, не на один год работы, если хотите создать прилично играющую программу. Программ таких создано великое множество, как коммерческих, так и любительских с самым разным уровнем. Шансов заработать на этом хоть какие-то деньги по-минимуму, т. к. надо сделать что-то на уровне лучших мировых программ. Ради хобби, развлечения, конечно, можно, но работа на многие годы. Думаю, 90%, что хоть немножко разобравшись, Вы от этой затеи откажетесь.

Ну а с чего начинать? Наверное, посмотреть литературу. На русском языке по этой тематике знаю всего лишь две книги:
Е. Гик. Компьютерные шахматы. 1997 год.
Е. Корнилов. Программирование шахмат и других логических игр. 2005 г.

Первая книжка - по большей части треп, про программирование там не написано ничего. Зато много истории, много написано про компьютерные программы тех лет, много партий из соревнований, диаграмм, можно понять, какие программы были, их стиль игры и возможности.

Вторая книжка тоже небольшая по объему, она не супер по изложению, описывает базовые вещи, зато целиком посвещена программированию. Куча примеров исходников на Си и Паскале. Базовые вопросы и приемы в ней есть, вполне достаточно для первоначального знакомства и представления о предмете. Наверное, лучшее, что есть на русском языке.
А дальше искать материалы и статейки на русском и особенно английком языке, вроде бы таких ресурсов много, есть люди, увлекающиеся шахматным программированием и у нас. Гугл, на начальном этапе хорошим стартом может быть даже Википедия (в ней будут ссылки). Можно попробовать также поискать англоязычные книги по этой тематике на торрентах, вдруг такие издавались и попали в торренты. За неделю - две можно сделать неплохую подборку материалов. А дальше - изучать

А так, ключевые слова:
компьютерные шахматы, шахматное программирование, программирование шахмат, минимакс, максимин, теория игр, альфа-бета отсечение, хэш-таблица, генератор хода, оценочная функция, перебор, перебор вариантов, перебор вариантов в шахматных программах и т. д.
Ну и конечно же английские варианты всех этих терминов, на английском информации будет на порядок больше.
Могут попасться статьи классиков 40 - 60 летней давности: Шеннона, фон Неймана, Д. Кнута (он занимался усовершенствованием альфа-бета отсечения), не брезгуйте, там будет для новичка много полезного.

Но это, если черт дернет всем этим заниматься. А нужно ли оно Вам?
Ответить с цитированием
Пользователь сказал cпасибо:
BBqwe (05.11.2012)
  (#7 (permalink)) Старый
BBqwe BBqwe вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 3
Поблагодарили 1 раз в 1 сообщении
Регистрация: 04.11.2012
По умолчанию 05.11.2012, 15:59

Matematic, я хочу вам сказать Огромное Спасибо за такой объёмный ответ!

Цитата:
Можно, конечно, и самому написать такую оболочку, придумав для нее собственный метод обмена информацией, но стоит ли на это терять время? Не проще ли использовать готовую оболочку и писать под нее свой chess engine?
видите ли, я хочу написать немного не совсем стандартную шахматную программу. Я планирую кое-что особенное в ней, хотя бы попытаться это сделать, но чтобы это сделать мне нужно вообще написать программу, которая хотя бы могла взаимодействовать со мной, то есть подавать хоть какие-то "признаки жизни" при, допустим, моём ходе.

Думаю, стоит. Хотя бы попробовать и понять как это всё работает будет не лишним, а нужным, вы согласны с этим?

Цитата:
Все существующие сейчас шахматные программы работают по одному и тому же принципу и основаны на алгоритме перебора вариантов.
Как думаете, сколько примерно может весить (Б, Кб, Мб) 1 партия.
или тут правильно спросить сколько весит 1 ход?
Предположим, партия, выиграли белый, 40 ходов. Примерно хотя бы - сколько?

Цитата:
Но это, если черт дернет всем этим заниматься. А нужно ли оно Вам?
наверное это глупо да, но мне пришла интересная мысль по поводу игры (процесса). Хотя, прочитав все ваши сообщения, прихожу к выводу, что идея не супер, она выглядит даже ужасно на фоне всего этого, но попробовать было бы не плохо. А вдруг
Ответить с цитированием
  (#8 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 06.11.2012, 15:03

Цитата:
Сообщение от BBqwe Посмотреть сообщение
Цитата:
Сообщение от Matematic
Можно, конечно, и самому написать такую оболочку, придумав для нее собственный метод обмена информацией, но стоит ли на это терять время? Не проще ли использовать готовую оболочку и писать под нее свой chess engine?
видите ли, я хочу написать немного не совсем стандартную шахматную программу. Я планирую кое-что особенное в ней, хотя бы попытаться это сделать, но чтобы это сделать мне нужно вообще написать программу, которая хотя бы могла взаимодействовать со мной, то есть подавать хоть какие-то "признаки жизни" при, допустим, моём ходе.

Думаю, стоит. Хотя бы попробовать и понять как это всё работает будет не лишним, а нужным, вы согласны с этим?
Видите ли, тут вот в чем дело. Задача написания шахматной оболочки имеет мало чего общего (вернее даже не имеет ничего общего) с программированием логических игр, включая шахматы. В ней по всей видимости не зашито никакого игрового алгоритма. Это скорее чисто дизайнейская задача, программирование картинок, табличек и текста, хотя не спорю, приятная задача. Надо будет нарисовать доску, фигуры (фигуры нарисовать свои или найти чужие), справа от доски, как это принято во всех программах, сделать таблицу партии, желательно с возможностью перемещаться по ней. И т. п. Делать это придется или с применением низкоуровневого оконного API (Win API или xlib) или же с помощью высокоуровневых виджетов (MFC, QT, GTK, wxwidgets) и редакторов форм (каковые имеются во всех визуальных средах). Задача немаленькая, особенно для новичка. Также надо будет реализовать протокол обмена информацией (уже существующий или придуманный Вами), научиться понимать сообщения, посланные движком оболочке, и формировать свои сообщения для движка. Естественно, программа должна уметь запускать движок и устанавливать с ним связь через пайп, FIFO или иной механизм IPC. Ну и сохранять и загружать партии в виде файлов на диске. Согласитесь, что сама по себе задача очень объемная. С одной стороны, научитесь программировать интерфейс, освоите несколько простейших механизмов межпроцессного взаимодействия, что само по себе неплохо, с другой стороны потратите очень много времени на задачу, к программированию самой шахматной игры, логики, не имеющую никакого отношения. Задание в принципе несложное (по уровню идей), ничего "гениального", но по объему работы довольно большое.

Во времена MS-DOS оболочка и движок представляли собой одно целое, и графический интерфейс, и игровой алгоритм были частью одной программы, по всей видимости игровой алгоритм вызывался из интерфейса просто как функция, но такой подход не дает никаких преимуществ и упрощений, скорее всего даже наоборот (т. к. меньше модульности).

Вот и решайте, хотите Вы всем этим заниматься или нет, интересно ли для Вас это. Тем более, что задача уже давно решена другими людьми и лучше их Вы точно не сделаете. Хотя, сделав нормальную работающую графическую шахматную оболочку с полноценным, пусть и скромным функционалом, можете с полным правом называть себя программистом. В общем, я бы за это дело не взялся, хотя решать все равно Вам.

Тут еще вопрос про нестандартность шахматной программы, о которой Вы писали. Нестандартность в чем? Вы хотите изменить правила игры: размер доски, положение на ней фигур, правила ходов? Если так, то обычная оболочка может отказаться все это делать: работать только с доской 8x8, нестандартные ходы не принимать (писать illegal move) и т. д. Тогда в написании своей оболочки действительно есть смысл. Или же нестандартность программы будет заключаться в применении нестандартного алгоритма игры (выбора хода) при совершенно традиционных правилах? Тогда на выбор оболочки это никак не повлияет, можно использовать любую существующую, т. к. с оболочкой это не связано. В любом случае окончательно решать все равно Вам.


Цитата:
Цитата:
Сообщение от Matematic
Все существующие сейчас шахматные программы работают по одному и тому же принципу и основаны на алгоритме перебора вариантов.
Как думаете, сколько примерно может весить (Б, Кб, Мб) 1 партия.
или тут правильно спросить сколько весит 1 ход?
Предположим, партия, выиграли белый, 40 ходов. Примерно хотя бы - сколько?

Вот тут я совсем не понял Вашего вопроса, особенно в связи со своей цитатой. Поясните, пожалуйста.
Какая связь алгоритма перебора, по которому работают компьютерные шахматы, с объемом памяти, тем более на партию или на ход?
Имеется в виду, сколько займет файлик с партией, сохраненной на диск? Подсчитать приблизительно несложно - сущую ерунду, 1-2 Кб. Но что значит "весит 1 ход"? О какой памяти идет речь, подо что и где выделяемой?


Цитата:
наверное это глупо да, но мне пришла интересная мысль по поводу игры (процесса). Хотя, прочитав все ваши сообщения, прихожу к выводу, что идея не супер, она выглядит даже ужасно на фоне всего этого, но попробовать было бы не плохо. А вдруг

Даже интересно, какого аспекта игры касается идея? Хотя я не настаиваю на своем вопросе, дело Ваше, Вы имеете право хранить молчание
Ответить с цитированием
  (#9 (permalink)) Старый
BBqwe BBqwe вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 3
Поблагодарили 1 раз в 1 сообщении
Регистрация: 04.11.2012
По умолчанию 06.11.2012, 19:54

Цитата:
Нестандартность в чем?
Нестандартность в работе, "думке" ИИ. А так нет, игра как была (8х8 и 32 фигуры, конь буквой "Г" и слон по диагонали), так и будет.

Цитата:
Имеется в виду, сколько займет файлик с партией, сохраненной на диск?
Да, именно это я хотел узнать.

Цитата:
Даже интересно, какого аспекта игры касается идея?
Самого процесса игры ИИ. Хочу попробовать свой вариант реализации его "мыслей", по поводу - а какой ход лучше? -

в этом направлении появилась идея, но чтобы её реализовать, мне нужна... "голая программа", то есть, мне нужно понять как работает всё это (объекты, классы и так далее), чтобы реализовать свою идею для ИИ.

Знаю, это очень сложно, сейчас сложность заключается сделать программу. Простую программу, которая могла бы просто переставлять фигурки по доске. Пока что мне большего не надо
Ответить с цитированием
  (#10 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,453
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 07.11.2012, 07:42

Готовый движок шахмат Stockfish с открытыми исходниками.
Ответить с цитированием
Пользователь сказал cпасибо:
BBqwe (07.11.2012)
  (#11 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 07.11.2012, 08:36

Примерно понятно.
На самом деле, графическая оболочка и игровой "движок" - совершенно не связанные друг с другом программы, создавая одну, можно ничего не знать об устройстве другой, знать нужно всего лишь язык, на котором они друг с другом общаются. Т. е. такой подход просто позволяет целиком сосредоточиться на создании думающего алгоритма, этот алгоритм будет оформлен как отдельная законченная независимая программа, не заботясь о картинках и интерфейсе. Чтобы понять, о чем речь, скачайте вот это
http://www.kikrtech.com/files/crafty-23.5-32bit.exe.zip
запустите и наберите в консольном окошке e2-e4<Enter> - увидите интересную картину. Надоест ждать - в этом же окошке набираете команду force и смотрите результат. Далее вводите свои ходы согласно общепринятым правилам (например, Ng1-f3), ждете, вводите force. И т. д. - повторяете, пока не надоест. Как надоело - набираете команду quit и программа завершает свою работу. Эти команды и есть команды протокола xboard, все очень просто (только сейчас узнал, что он собой представляет). Вот это самое консольное приложение как раз и интегрируется в оболочку, хотя с ним можно точно так же играть и в консоли.

А начать Вы конечно же можете с создания картинок и интерфейса: нарисовать доску, фигуры, создать двумерный массив 8x8, связать содержимое массива с изображением на доске, научить фигуры двигаться, чтобы изменения позиции происходили в массиве и при этом отображались на доске на экране. Это тоже интересно и по-своему увлекательно, позволит придать процессу разработки наглядность, к тому же многому научитесь.

Хотите попробовать реализовать собственные идеи, не похожие на общепринятый подход, о котором я Вам рассказал, - это тоже хорошо и правильно, независимо от того удастся ли попытка или потерпит полное фиаско. Пробуйте! Даже если удастся получить пусть и очень слабую, но действительно играющую программу (а не просто делающую бессмысленные ходы наугад) - это будет огромным успехом, уверяю Вас.

Вот еще нашел пару ссылок:
1. Crafty Chess - шахматный "движок" Crafty, алгоритм работы, естественно, классический, переборный. Проект оpen-source, можно скачать и посмотреть исходники, чтобы понять, как все это работает.
2. Chess Engine Communication Protocol - протокол обмена информацией XBboard.

А так, думаю, информации для начала предостаточно. В Интернете, особенно на английском, при желании найдете еще больше. Решайте, интересно Вам этим заниматься или нет. Хотите попробовать реализовать собственный подход в игровой логике, отличный от традиционного, - пробуйте. В любом случае, такую попытку можно только приветствовать. Хотите начать с графики и картинок, - это тоже нормально. Работайте так, как считаете нужным, главное, чтобы Вам было интересно.

Последний раз редактировалось Matematic; 07.11.2012 в 08:49
Ответить с цитированием
Пользователь сказал cпасибо:
BBqwe (07.11.2012)
  (#12 (permalink)) Старый
BBqwe BBqwe вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 3
Поблагодарили 1 раз в 1 сообщении
Регистрация: 04.11.2012
По умолчанию 07.11.2012, 12:38

Цитата:
Сообщение от Rius Посмотреть сообщение
Готовый движок шахмат "ссылка" с открытыми исходниками.
Отлично, я скачал, чуть позже буду смотреть.

недавно читал интервью старшего программиста "Google Russian",
процитирую:

Цитата:
4. Помимо обязательно учебной программы нужны ли какие-то дополнительные знания и навыки? Где их можно получить?

Учиться самому – учиться, учиться и учиться, читать статьи в интернете, говорить со знающими людьми, читать чужой код (это одно из главных, кстати!).
Большое спасибо за "исходники", думаю, они мне будут очень полезны, если я ещё смогу разобраться о чём ведём речь в них
Ответить с цитированием
Ads
  (#13 (permalink)) Старый
BBqwe BBqwe вне форума
Новичок
 
Сообщений: 5
Сказал(а) спасибо: 3
Поблагодарили 1 раз в 1 сообщении
Регистрация: 04.11.2012
По умолчанию 07.11.2012, 12:43

Цитата:
Сообщение от Matematic Посмотреть сообщение
Примерно понятно.
Хотите попробовать реализовать собственные идеи, не похожие на общепринятый подход, о котором я Вам рассказал, - это тоже хорошо и правильно, независимо от того удастся ли попытка или потерпит полное фиаско. Пробуйте! Даже если удастся получить пусть и очень слабую, но действительно играющую программу (а не просто делающую бессмысленные ходы наугад) - это будет огромным успехом, уверяю Вас.

Вот еще нашел пару ссылок:
1. ССЫЛКА - шахматный "движок" Crafty, алгоритм работы, естественно, классический, переборный. Проект оpen-source, можно скачать и посмотреть исходники, чтобы понять, как все это работает.
2. ССЫЛКА - протокол обмена информацией XBboard.

А так, думаю, информации для начала предостаточно. В Интернете, особенно на английском, при желании найдете еще больше. Решайте, интересно Вам этим заниматься или нет. Хотите попробовать реализовать собственный подход в игровой логике, отличный от традиционного, - пробуйте. В любом случае, такую попытку можно только приветствовать. Хотите начать с графики и картинок, - это тоже нормально. Работайте так, как считаете нужным, главное, чтобы Вам было интересно.
Да, я не говорю, что мне нужно сделать это за месяц-другой, за год хотя бы, минимум, поэтому, я буду медленно и усердно изучать-изучать-изучать все эти исходники, протоколы и прочее, что, думаю, будет даже плюсом! (ну, не повезло в шахматах, повезёт где-нибудь ещё, главное будут знания и опыт\практика )


Большое Вам спасибо! Помогаете, хоть направляете куда и как.
Тему не заброшу - будут коды, буду выкладывать. Не говорю, что завтра, ну через неделю-другую, месяц-два что-нибудь да буду уже "программировать"
Ответить с цитированием
Пользователь сказал cпасибо:
Matematic (07.11.2012)
  (#14 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,453
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 07.11.2012, 12:51

Цитата:
Сообщение от BBqwe Посмотреть сообщение
Учиться самому – учиться, учиться и учиться, читать статьи в интернете, говорить со знающими людьми, читать чужой код (это одно из главных, кстати!).
Только начинать-то проще с низкого уровня сложности, и постепенно его повышать в соответствии с опытом. От исходников превосходящей программы мозг закипит.
Ответить с цитированием
  (#15 (permalink)) Старый
Matematic Matematic вне форума
Member
 
Аватар для Matematic
 
Сообщений: 388
Сказал(а) спасибо: 31
Поблагодарили 8 раз(а) в 8 сообщениях
Регистрация: 15.01.2007
По умолчанию 12.11.2012, 01:46

Покапался в сети и нашел несколько интересных материалов. Может, пригодятся.

1. Описание на русском языке (с точки зрения пользователя) графических шахматных оболочек XBoard и WinBoard.
XBoard на русском
Справка XBoard
WinBoard на русском
Общие положения установки программ в оболочку Winboard
Общие положения установки программ в оболочку Winboard

2. Сайт sdchess. Оболочки и большое количество движков, в т. ч. с открытыми исходниками. Никаких материалов по шахматному программированию на сайте, похоже, нет, правда имеется форум, на котором общаются российские разработчики шахматных движков.
http://www.sdchess.ru/

3. Программа "Стрелка", разработанная Ю. Осиповым.
ссылки на sdchess - архив одной из версий программы идет вместе с исходником:
Strelka Юрия Осипова, Россия
Итервью с Юрием Осиповым автором "Стрелки"
Итервью с Юрием Осиповым автором "Стрелки"
Download engines
личная страничка автора:
Главная страница

4. Личная страничка и ftp-архив R. Hyatt'а, автора "Crafty". Можно скачать разные выпуски программы, ее исходники, а также на сайтах есть несколько статей, объясняющих основные особенности работы данной программы.
Crafty Chess
Dr. Robert Hyatt's home page
ftp://ftp.cis.uab.edu/pub/hyatt

5. GNU Chess. Проект с открытыми исходниками.
GNU Chess &mdash; GNU Project &mdash; Free Software Foundation (FSF)

6. Fruit. В свое время одна из сильнейших в мире шахматных программ, выпущенная вместе с исходниками. Более поздние версии стали коммерческими с закрытым исходным текстом. Сейчас программа опять доступна бесплатно, но исходники последних версий остались закрытыми. Развитие программы прекратилось в 2007 году.
Fruit - pure playing strength
Fruit
Сайт версии 2.1. Все архивы, доступные для скачивания, содержат исходный текст программы:
Fruit Chess Engine by Fabien Letouzey

7. Книги на русском языке. Многие из них представляют уже в большей степени исторический интерес, но некоторые для новичка будут интересны и с чисто практической точки зрения.
а) Книга авторов "Каиссы".
б) Книги Ботвинника, автора так и не реализованного "Пионера", с альтернативным подходом к алгоритму перебора, отличающемся от общепринятого (в чем его суть, не знаю). Спорные, но интересные идеи.
в) Книга Корнилова
г) Другие книги, часть из которых относятся к программированию шахмат, а часть нет. Какие-то, наверное, хорошие, какие-то хлам, как это всегда и бывает, не разбирался.

Последний раз редактировалось Pasatiji; 09.06.2013 в 23:04
Ответить с цитированием
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Зависание компа "намертво" при просмотре видео на youtube или во время игры Lokos Любые вопросы от новичков 8 10.03.2012 12:55
Ставлю систему "с нуля" после сбоя. Какие "работы" по тестированию железа полезны? russcand Любые вопросы от новичков 14 01.09.2011 00:27
Ошибка при авторизации игры онлайн "Поднебесье" myshkawww Вопросы начинающих программистов 3 11.03.2011 16:05
Создание игры "Эпилогика" St. Jimmy Prolog 9 19.05.2010 01:50
На ноутбуке "тормозят" игры даже при самых минимальных настройках. Микки Размикович Любые вопросы от новичков 2 25.03.2010 23:06
Закрываются игры, появляется ошибка: "0xbe8787ba" или "0x3e89ce89" . ASUSTeK Техническая поддержка 42 19.02.2009 01:38
При установке игры выскакивает ошибка данных "CRC" Дмитрий Техническая поддержка 5 13.04.2008 22:17
С чего начать разработку игры "Сокобан" IIITAK Вопросы начинающих программистов 0 08.01.2008 01:19
Исходник сетевой игры "крестики-нолики" yura_korepin Вопросы начинающих программистов 1 17.12.2007 22:05
Где найти алгоритм хода компьютера игры "Балда" N0RtAn Вопросы начинающих программистов 15 11.05.2005 13:05
Как сделать чтобы вместо кнопок "Да" и "Нет" высвечивалось украинсие "Так" и "Ні" Форсаж Delphi 5 19.07.2003 19:30
Создание программы на С++, "Структура данных и Алгоритм"" Curt Вопросы начинающих программистов 1 30.05.2003 12:17



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов