Дневник разработчика шахматной программы

на главную страницу

 

Дневник разработки шахматной программы
на языке джава

Saturday, March 12, 2005

Начал дня три назад.

1 Размеры доски

отступ слева = 8
отступ справа = 8

размер картинки клетки = 32 на 32

размер доски =32*8 = 256

от края 256+8 = 264

---------------------------------------------

Sunday, March 27, 2005

И так первый этап пройден.
Я сделал визуализацию доски и правила первого уровня.
Это такие правила, для которых хватает текущей позиции.
За бортом остались: взятие на проходе, рокировка, шах и мат.
И конечно нет перебора, нет игры движка.
На это потребовалось 18 дней.

Теперь, как всегда, временная остановка, комментирование, шлифовка, тестирование.

---------------------------------------------


вторник, 29 Марта 2005 г.
Случилась катастрофа. Я хотел кардинально улучшить программу, а вместо этого все обрушил. Она перестала работать и я не смог тестировать новые модули
Кое-как восстановил, создав новый проект. Все таки надо быть поосторожнее.


---------------------------------------------
воскресенье, 10 Апреля 2005 г.

Что-то мне моя программа совсем не нравиться, особенно блок ходов и перебора.
Тем более что перебор совершенно не работает.
Хочется выкинуть эту программу на помойку и писать по новой.
Но это конечно фигня, потому что новая программа скоро дойдет до той же стадии.
Прежде всего, нужно прояснить общий скелет программы, а уже потом двигаться дальше.
И конечно независимость и работа через интерфейсы! Продуманность интерфейсов, прежде всего!

---------------------------------------------

вторник, 12 апреля 2005 г.

1 Я хотел оптимизировать правила и сделал, так что классы фигур выдают только можно ли ходить на указанное поле. Но, как правило, нам нужно знать все возможные ходы данной фигуры. Так что оптимизация получилась неудачная. Следует переписать данные классы заново.

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

---------------------------------------------

четверг, 14 апреля 2005 г. 14.04.2005 20:50

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

Через это нашел странность с массивом доски после клика. Как будто ходимой фигуры нет на доске.
Исправил. Дело было в том что позже писал очищение по старому адресу фигуры.
Сейчас начинаю переписывать классы фигур на новой основе. (Rook_2)

---------------------------------------------

суббота, 16 апреля 2005 г. 16.04.2005 17:33

И так класс правил я полностью переписал вместе с входящими классами фигур. Теперь дело за просчетом
Позиций т. е. организовать перебор вариантов.

---------------------------------------------

вторник, 19 апреля 2005 г. 19.04.2005 18:53

С этим движком опять напутал так что сам ничего не понимаю.
Это какой то кошмар! Я никак не могу сделать даже простейший движок.
Будем пытаться дальше овладевая сложностью через инкапсуляцию.

---------------------------------------------

среда, 20 апреля 2005 г. 20.04.2005 20:10


Постепенно разбираюсь с рекурсивными функциями. В частности какие параметры сохраняются при вызове
Как ведут себя массивы и объекты и т.д.

---------------------------------------------

четверг, 21 апреля 2005 г. 21.04.2005 21:18

движок вроде написал но он выдает какую то гадость. Надо тестировать чтобы понять что не так.

---------------------------------------------

среда, 27 апреля 2005 г. 27.04.2005 20:20

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

Надо сделать запись партии, полные правила и более грамотную оценку.
---------------------------------------------

вторник, 10 мая 2005 г. 10.05.2005 15:17

Программа опять получается какая то корявая так что и доделывать ее не хочется. Вроде все нормально а в целом
как то сложно.
Сегодня переделаю директорию, почищу лишнее.
В итоге раскидал все классы на три директории:
Engine – классы связанные с перебором,
Figure – классы связанные с фигурами и правилами игры,
Mine – классы костяка игры.

Привел в порядок вид программы при открытии эксплорером.
Конечно над строкой сообщений еще работать и работать!

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

---------------------------------------------

четверг, 12 мая 2005 г. 12.05.2005 20:25
Сегодня сделал флажки глубины хода.
Подправил кнопки.
Сообщение о том что движок думает.
Внешне нужно сделать еще что бы при обдумывании доска перерисовывалась.
Это я сделал посредством запуска потока.
Так же сделал автоответ.

---------------------------------------------

пятница, 13 мая 2005 г. 13.05.2005 22:09

Сделал другую отмену выделения фигуры. Сейчас просто кликаешь на нужную.
Слегка изменил отображение отмены выделения фигуры.
Убрал лишнее присвоение в классе правил.
Нужно еще убрать лишнее присвоение в движке но это потом.

---------------------------------------------

воскресенье, 15 мая 2005 г. 15.05.2005 20:35

оказалось что в пятницу с отменой выделения фигуры я перемудрил сегодня
за место взятия она брала другую фигуру, все вернул как было.
Сделал копирование массивов через arraycopy, но эффект незаметен.
Движок довольно запутанный, так что ничего улучшить пока не получается
В классе клик тоже какой то кошмар. Непонятно куда что ветвится.
В общем пока мои потуги сделать программу более читабельной и простой терпят неудачу.
Мне кажется кардинально упростить движок я смогу только перейдя от минмакса к негативу.
И так я недоволен нечитабельным кодом, значит его надо упрощать разбивая на подпрограммы.
Методы будем отделять начало ===, конец ***** , просто блоки так ------
Почти все классы так и переоформил.

---------------------------------------------

понедельник, 16 мая 2005 г. 16.05.2005 20:25

Сегодня провернул грандиозную модернизацию. Сделал для массивов доски матричные шаблоны
в результате при вызовах массивов пришлось менять х и у местами. Это затронуло почти все классы .
в принципе это не нужно но прикольно.
Теперь нужно будет вплотную заняться рокировкой и т.д.
Поймал еще один баг в пешках это все после грандиозной модернизации :)
Усложнил функцию оценки. Сделал матрицы для пешек.
169000 поз в сек

---------------------------------------------

воскресенье, 22 мая 2005 г. 22.05.2005 16:29

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

---------------------------------------------
среда, 25 мая 2005 г. 25.05.2005 22:04

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

---------------------------------------------
четверг, 26 мая 2005 г. 26.05.2005 23:14
сегодня ввел рокировку
когда сам переставляю то все нормально а вот движок считать перестал
он попросту зависает и в чем тут дело я не понимаю
надо будет тестировать и разбираться.
Все понятно это из за расширения массива в результате при передаче по ссылке
массив усекался. Все исправил.
В массиве цветов фигур я ввел девятую строку куда записываю ходила ли фигура.
В движке все цветные массивы пришлось расширить.

----------------------------------------------
среда, 8 июня 2005 г. 08.06.2005 22:06
сегодня прочел свой дневник.
открытием для меня явилась нерегулярная работа над программой.
Я то думал что пишу ее каждый день а на деле заглядывал по разу в
неделю а то и реже хотя были какие то проблески регулярности
в целом я работаю над ней около 20 дней.
пока она далека до завершения но я надеюсь ее все же доделать.
Самое интересное что после некоторого перерыва приходится все вспоминать
по новой. И тут все решают грамотные комментарии. Пишу их как для другого
человека и потом читаю как будто писал их кто то другой :) Причем комментарии
нужны не только локальные но и в целом по идеям и концепции программы.

------------------------------------------------------------
четверг, 9 июня 2005 г.09.06.2005 14:47
просматривал классы в пакете Mine. Создал класс описания пакета подкорректировал
описалово в самих классах. В коде ничего не менял кроме нескольких косметических
моментов. В них пока ничего менять не буду хотя вывод надо сделать в стандартное поле
а то эта зеленая рамка смотрится как то доморощенно :) ну и были пожелания вставить
другой курсор но это не принципиально как и вставка координат в доску.

А вот что действительно серьезно так это то что я реализовал не все правила. И так в первую очередь
доделаем правила под клик, а уже потом возьмемся за модернизацию движка
делаем: превращение пешек, взятие на проходе, потом шах мат и доделываем рокировку. На этом с
правилами все дальше нужно делать запись партий правила 50 ходов повторяющуюся позицию и т. д.

-------------------------------------------------------------------
пятница, 10 июня 2005 г. 10.06.2005 21:14
закончил начатую вчера эпопею по реализации превращения пешек в фигуры
сюрпризом для меня оказалось то, что дополнительное окно открывается в собственном потоке
так что основная программа продолжала жить своей жизнью, пришлось ее замораживать что бы
пользователь не натворил чего. :)
Теперь есть превращение пешек, далее беремся за взятие на проходе, придется либо дальше расширять
массив цветов фигур либо самих фигур мне, конечно, это не очень то нравится. Ладно. Потом если что переделаю
хотя это довольно тяжело, но все же проще чем делать с нуля.
Изменил звуки. Те меня уже достали, да еще ввел приветствие при загрузке.
Папки с картинками и звуком загнал в папку ресурсы. Вообще с тех времен, когда я последний раз
показывал программу на публике, я ее серьезно доработал, но конечно недостаточно. В последнее время
меня даже берет чувство гордости за программу, а это уже что-то!
К стати что бы реализовать превращения пешек я написал новый класс Frame_Transformation производный
от класса Frame. В котором и реализовал всю функциональность конечно его можно легко улучшить уже
сейчас но я не буду этого делать и без этого дел хватает. Как нибудь потом. Смешно но взятие на проходе это
тоже пешки :)

------------------------------------------------------------------
воскресенье, 12 июня 2005 г. 12.06.2005 19:04
С утра озвучил все ходы! Теперь программа балаболит моим голосом.
сегодня Саня обнаружил очередной баг с рокировкой. В результате я ее переделал. Раньше дополнительную
информацию я хранил на девятой горизонтали массива цвета фигур сейчас я отказался от этой запутывающей
идеи теперь в объекте доски ввел еще один одномерный массив.
Но насколько я понимаю рокировка все равно не работает так как надо. Тут надо протестировать и понять в
чем дело.
Да еще баг с превращение пешки после нее программа не отвечает. Исправил.
Движок иногда по непонятной причине зависает пишет выход за рамки массива. Обычно это происходит в конце
когда черному королю есть угроза в чем дело я не понимаю.

---------------------------------------------------------------
понедельник, 13 июня 2005 г. 13.06.2005 11:41

С утра исправил алгоритм рокировки. Половина была не правильна. Сейчас вроде все правильно. Заодно
прокомментировал код рокировки. Вообще нужно завести еще один документ с описанием решений программы.

---------------------------------------------------------------
вторник, 14 июня 2005 г. 14.06.2005 14:46

Исправил баг из за которого программа подвисала в конце игры. Все дело было в модуле рокировки. В нем
когда король подходил к краю доски выходили за рамки массива.
Седлал звучащую музыку только конвертнутые файлы уж очень большие.(из 2 в 30 !)
Как то напрягает меня дальше совершенствовать программу нарастает какое то внутреннее сопротивление.
Хотя когда я с ней играю она меня делает и это приятно. Надо ее тестировать побольше.
Сегодня вообще чудеса начались. Какой то глюк со ссылкой на массив рокировки исчезнувший хотя
я вроде ничего не делал. Теперь при попытке взять предпоследнюю фигуру черных говорит что ход сделан
но тем не менее возвращает ход назад! Понятно что это все глюки движка но сама постоянная глюконутость
начинает доставать!
Вообще класс генератор производит жуткое впечатление. Его надо переписать но там так все переплетено что
видимо проще будет написать его заново. Тем не менее он работает и только иногда выскакивают непонятные
глюки с потерянными указателями или выходом за границы массива.

---------------------------------------------------------------
среда, 15 июня 2005 г. 15.06.2005 20:53
что за ерунда ну почему все новые функциональности входят с таким скрипом?
Почему всегда остаются недоработки портящие все впечатление от программы и кроме того требующие
огромных усилий по доводке ? это что закон такой что ли.
Из за невозможности копирования объектов пришлось писать десятки строк вместо одной что меня
очень сильно разбесило.
Несмотря на все мои старания код получается сырой и требующий изрядной доработки. Не знаю может
так и должно быть.
Сегодня создавал классы записи на жесткий диск. В результате пришел к выводу что в начале надо сделать
выпадающее меню а то кнопок развелось хоть жопой ешь.

---------------------------------------------------------------
четверг, 16 июня 2005 г. 16.06.2005 22:02
целый день писал запись партии и наконец написал ! и все работает ! я пребывал в восторге но до момента
пока не запустил апплет – он не хочет ничего записывать :( я конечно помнил об ограничениях на запись из
апплетов но думал это касается только загрузки из сети. Ну а сейчас я и не знаю что и думать. Если запись не
пройдет это будет очередным камнем в огород джавы. Попробую найти работающий апплет а если не выйдет то
запустить его через майн но это конечно все отстой. Я все больше и больше прихожу к выводу что джава
имеет слишком мало возможностей. Хотя в чем то язык довольно приятный.

----------------------------------------------------------------
пытался запустить апплет из функции майн. Ничего не получилось. Загрузка картинок не работает а это именно
то из за чего я и начал писать в апплете. Может ослабить безопасность в эксплорере и после этого апплет все
же заработает ? в классе доска картинки ввел урл напрямую пришлось изрядно повозиться строк то много.

----------------------------------------------------------------
понедельник, 20 июня 2005 г. 20.06.2005 13:03
и так апллеты меня крайне разочаровали. Больше ничего серьезного я под них писать не буду. Тем не менее закончить
программу я просто обязан.
Контроль за рокировкой в движке я отключил, он и без этого глючный, тем более что эта информация в нем не
используется.
Ничего не получается с дальнейшим улучшением программы. Все я застрял. Я опять не помню что у меня и где. И код
для меня стал просто не подъемным.
В программе 3229 строк. Наверное половина комментариев и того около 1500 строк текста.

------------------------------------------------------------
вторник, 21 июня 2005 г. 21.06.2005 15:59
и так взятие на проходе реализовано . конечно нужно тестировать но это уже доводка!
На этом все правила считаем сделанными. Теперь осталось сделать шах и мат но это отдельный модуль
и с другими он не пересекается. Конечно же это все завтра. Сегодня же ясно что мы все таки доделали правила!!!
И что же весь отпуск ушел на то что бы сделать взятие на проходе ??? но ведь это же маразм! Но вообще-то я сделал
гораздо больше это и превращение пешек и листание партии и озвучивание и взятие на проходе. Кроме того много
задокументировал и закомментировал. Кроме того исправил множество багов. Думаю это не мало!

------------------------------------------------------------
суббота, 25 июня 2005 г. 25.06.2005 18:58
последнее время писал на си++ и тут я начинаю понимать насколько джава прекрасна
как говорится все познается в сравнении!
В следствии этого руки до программы не доходили. Сейчас дошли и отловил баг –выход за пределы
массива при превращении пешки. Конечно ведь движок прогоняет ее до конца и нужен контроль.
Кроме того наблюдается глюк когда остается меньше трех фигур противника ход возвращается назад!
Что это такое я не понимаю.

-----------------------------------------------------------
четверг, 30 июня 2005 г. 30.06.2005 20:37
сложность оказывается реальной проблемой при написании моей программы. Иногда мне кажется что она
очень проста. Но иногда что она неподъемно сложна. Когда надо добавить новую функцию я просто пасую!
Например мне нужно убрать глюк с продвижением и превращением пешки в движке но я не знаю с чего начать.
Также нужно сделать шах и мат. Также нужно сделать инвертирование доски. Непонятно куда что обращается
и где что используется. Честно говоря я уже и не помню какие у меня классы. Конечно главная проблема заключается
в том что изменения в одном классе влечет за собой изменения во многих других. Видимо так быть не должно.
С превращением пешек при игре движка разобрался дело в том что я в условии взял только один выбор и уже отфильтрованные проверял на второй так конечно не годиться , но тут же выскочила проблема не превращение при некоторых ходах игрока. С превращением тоже разобрался все дело в том что по умолчанию фигура не выбиралась и пешка могла просочиться на последнюю горизонталь. Надо еще сделать что бы комп не менял королей.
Пока пытался сделать что бы комп не менял королей но пока что то не понятно получилось ли это у меня.
И еще нашел багги с превращением пешек. Не учел ситуацию когда рубят. Вообще часто я тыкаюсь как слепой
котенок.

-----------------------------------------------------------
пятница, 1 июля 2005 г. 01.07.2005 23:34
сегодня подправил по мелочам. Сделал десейбл кнопок прокрутки во время думания компа. И сделал запись
партии в отведенную папку чего раньше из за расстройства не сделал. Игрой компьютера в общем доволен.
Конечно нужно еще сделать шах и мат. И еще инвертирование доски. но когда я думаю об этом меня берет тоска !

-----------------------------------------------------------
воскресенье, 7 августа 2005 г. 07.08.2005 11:59
да с тех пор много что произошло! А посмотришь времени то прошло всего месяц!
Программу я пишу на eclipse за что спасибо Дмитрию! Он действительно достаточно удобный.
Особенно мне нравится что в нем можно сворачивать методы. А недостаток в нем отсутствие визуальной среды.
Ну а теперь о том что с тех пор было сделано.
Теперь кнопки задаются раньше картинок. Это сделано ради удобства работы  да и понимать стало легче.
Сделал самостоятельное приложение. Надо еще вернуть поддержку апплета. Программа должна запускаться и как апплет и как приложение.
Восстановил звук. Добавил описания. Восстановил запись партий. Ну вот пожалуй и все.
Почему то стал трудно загружать картинки при старте.
И к стати подключая модули eclipse снес программу если бы не копия на работе то хана!

-----------------------------------------------------------
пятница, 12 августа 2005 г. 8/12/2005 2:21 PM

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

Теперь уж точно комментировать больше нечего! :) надо наконец браться за реализацию шаха и мата вот только как?

-----------------------------------------------------------
среда, 21 декабря 2005 г. 21.12.2005 18:37
На работе я нашел последнюю версию программы которую я доделывал на работе. В ней я отказался от апплетности
для того что бы иметь возможность записывать игры. Конечно запись я до ума еще не довел. Поиграл с программой и хоть я ее выиграл но ее игра мне понравилась! Никаких глюков и даже проводит комбинации!
Это конечно здорово но вот только принцип модульности похоже я до ума так и не довел как и прозрачность программы. К тому же так и не сделал шах и мат.

-----------------------------------------------------------
воскресенье, 8 января 2006 г. 08.01.2006 17:17
сегодня опять взялся за свою программу. Первые три класса меня очень порадовали это
Start, Game_Chess_Button, Game_Chess_Doska, а вот Game_Chess просто привел в ужас! Он слишком запутанный
и с этим надо что то делать!

-----------------------------------------------------------
понедельник, 9 января 2006 г. 09.01.2006 15:12
Что бы как то упростить класс Game_Chess я ввел еще один Game_Chess_Image
куда сбросил отрисовку доски и сообщений. Также переименовал класс Game_Chess_Doska в
Game_Chess_Loading так как в нем мы загружаем файлы картинок и звуков.
Но тут заметил одну проблемку в классе Game_Chess_Loading я создаю объект Chess_Board
а в классе Game_Chess_Image объект Klik_Board но ведь в нем заново создается объект Chess_Board!
А нет все нормально никакого дублирования нет в Klik_Board он не создается. Да подзабыл я программку!
Также правлю общее оформление что бы описание класса было сверху что вполне логично.
Также ввел описание используемых объектов в начале класса по типу где и для чего мы их используем.
Интересно что я уже много месяцев только комментирую и перетасовываю программу не вводя
никакой новой функциональности и причем на это уходит очень много сил и времени тогда
как для пользователя программы вообще ничего не меняется!! Это поразительно но это факт
надеюсь только на то что кто нибудь будет читать исходный код и это позволит ему следить
за ходом моей мысли. В том числе это вполне могу быть и я сам. Конечно же так и будет потому что
наивно думать что моя программа заинтересует кого нибудь еще кроме меня. По крайней мере на
данном этапе своей реализации.
Нужно еще помнить что в наследуемых классах могут быть использованы объекты объявленные в классах
родителях.
Пока что описать класс Game_Chess я не в состоянии хотя я сам его и написал! Будем еще вникать.
Просмотр класса Game_Chess я закончил. Но это ничего не дало потому что это класс интерфейса а
менять его я и не собирался. Нужно работать с классами обработки клика мышкой и правил. Главное конечно
это правила. Там и будем работать.

-----------------------------------------------------------
среда, 11 января 2006 г. 11.01.2006 22:57
сегодня полазил в классе оценщика вроде сделал что бы пешки рвались в бой но конечно не годится в на
чале игры оставлять короля без прикрытия. Также теперь движок не будет есть короля что тоже неправильно
при постановке мата. Короче решения промежуточные и конечной ценности не представляют. Нам нужно делать
шах и мат но на это у меня ума не хватает а жаль! Тут нужно предварительно все обдумать.

-----------------------------------------------------------
суббота, 14 января 2006 г. 14.01.2006 20:12
посчитал что в целом над своей программой я работаю уже 11-тый месяц. Но конечно это работа достаточно отрывистая так сказать налетами. Честно говоря я думал что прошло уже года два :) Два дня мучительных экспериментов принесли результат. Я научился помещать программу в джар файл. Конечно заархивировать ее я смог сразу но вот добиться что бы грузились файлы ресурсов получилось не сразу да и то случайно увидел в статье фрагмент. А мои толстые книжки тут не помогли. Теперь моя прога выглядит как один файл и это очень круто.
Что бы ее запустить нужно только два раза щелкнуть на нее и есть гарантия что файлы не растеряются при копировании и транспортировке. Оказывается что все это время я занимался рефакторингом это когда меняешь внутренность проги не трогая интерфейса т.е. оптимизируешь код пишешь комментарии и т.д. к стати совсем забыл а как будет выглядеть запись партии :) Как я и предположил записи нет это и понятно. Необходимо написать функцию записи непосредственно в архив также как и считывания. Неожиданно легко сделал чтение партии из архива.

-----------------------------------------------------------
воскресенье, 15 января 2006 г. 15.01.2006 12:38
запись в архив сделать не смог. Теперь партию пишу во внешний файл что в общем то правильно особенно
если он станет базой и разрастется. Но конечно как записывать в архив вопрос остается.

-----------------------------------------------------------
суббота, 21 января 2006 г. 21.01.2006 16:22
Сегодня пол дня парился пытаясь сделать шах и мат но что то ничего не получается
все решения оказываются слишком сложными и неподъемными. В связи с этим я думаю
что видимо неправильна сама концепция заложенная в основу программы. В любом случае
еще рано браться за написания шаха и мата необходимо перебрать движок. Сделать его интерфейс
более понятным и дружественным.
К стати если мы в метод передаем целый объект то это гарантия того что без этого объекта мы этот
метод использовать не сможем.
Ну и метод записи в архив я так и не нашел.
-----------------------------------------------------------