Тема: [WIP] mooChess
Показать сообщение отдельно
Старый 09.07.2011, 20:41   #3
shybovycha
ПроЭктировщик
 
Аватар для shybovycha
 
Регистрация: 27.05.2007
Сообщений: 110
Написано 40 полезных сообщений
(для 33 пользователей)
Ответ: [WIP] mooChess

Возможно я немного тороплю события и нарушаю все догмы scrum'а, но все же, сегодня прошел еще один спринт длительностью в почти весь день.

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

Внутренняя логика сервера опять-таки потерпела серьезные изменения. Об этом хотелось бы рассказать немного подробнее.

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

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

С точки зрения сервера, проверка на валидность хода - это и есть попытка совершить ход. Если проверка проходит удачно - в историю ходов добавляется проверенный ход. Если же нет - клиенту отправляется соответствующий результат.

Информация о новом ходе (которую клиент получает при опросе сервера на наличие новых ходов) используется для смены позиции фигуры, сделавшей ход. Смена позиции тривиальна: в ячейку, в которую "сходила" фигура заносится значение ячейки, "из которой она пошла". В последнюю заносится ноль (ячейка опустошается). Рокировка пока не реализована, но для большинства фигур такое действие является аксиомой.

Прим. 1: Информация о ходе представлена в виде "%откуда% %куда%". %откуда% и %куда% - стандартные для шахмат записи вида "[буква][цифра]". Эти же значения нормализуются на сервере, дабы каждый игрок получал их в уже пригодном для использования виде (если белые фигуры ходят с a8 в а6, то этот же ход для черных фигур будет выглядеть как h1 -> h3, учитывая что доска имеет одинаковую разметку для всех: столбцы нумеруются буквами от a до h, слева направо; строки - цифрами от 1 до 8, сверху вниз).


Бэклог (aka Ретроспектива)

Итак, что же на данный момент готово: начало новой игры, поочередность ходов и синхронизация данных игроков.

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

Как всегда, в приложении - скриншот, демонстрирующий синхронизированных два клиента и ссылка на скачивание исходных кодов сервера и клиента.

До нового спринта!
Миниатюры
Нажмите на изображение для увеличения
Название: screen2.jpg
Просмотров: 1040
Размер:	209.6 Кб
ID:	14342  
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо shybovycha за это полезное сообщение:
baton4ik (07.08.2011), Igor (18.07.2011), LLI.T.A.L.K.E.R. (09.07.2011), Randomize (12.07.2011)