Мое творчество. Игра Шахматный сапёр

Видео, книги, журналы, научные статьи, (по тематике форума), наше творчество
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

Новая игровая сессия:

500_v223.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Последняя не серверная версия

Сообщение Андрей Карпишин »

Дальнейшие возможные улучшения программы:

1. Создание игрового сервера, чтобы любые клиенты имели возможность соединиться (сыграть) -
пока это возможно обойти установкой программы HAMACHI (Программное обеспечение, предназначенное для построения VPN. Hamachi позволяет создать собственную защищённую сеть из компьютеров, соединённых через интернет, как будто они соединены одной физической локальной сетью).

2. Попытка создать Андроид-версию приложения. -
честно говоря, я не уверен как в Андроиде преобразуются в элементы интерфейса кнопки (Button) и действия - ЛКМ, ПКМ - там же сенсорное управление вместо мыши с кнопками.

3. Доработка HELP -
задача, возложенная на Мишу Киселева. Пока картинки с хелпом очень маленькие. Не всё отражено в помощи. Помощь устарела.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

В версии 2.29 поправлен один старый глюк. Когда человек ПКМ умешьшает шрифт на игровом поле определенной кнопки, в следующей партии шрифт сохранялся маленьким.

Теперь при очистке доски настройки шрифтов всех 64 игровых кнопок возвращаются к стандартным.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Бета-релиз версии, играющей через игровой сервер

Сообщение Андрей Карпишин »

Версии, начиная с 2.50, при нажатии кнопки ПОДКЛЮЧИТЬСЯ могут подключиться либо к оконечному пользователю с БЕЛЫМ IP, либо к промежуточному игровому серверу с БЕЛЫМ IP. Поведение программы разное в обоих случаях. Если на том конце игровой комп, то поведение стандартное: ему идёт запрос на подключение, а вам ответ - "Да, игра" или "Нет игре". Если на том конце СЕРВЕР и вы первый на сервере, она предложит подождать другого соперника, если вы второй на сервере, она высветит таблицу "КТО НА СЕРВЕРЕ" и предложит начать игру с первым оппонентом. Если вы согласились, первому оппоненту придёт звуковое сообщение, что к нему подключился игровой компьютер [ВАШЕ ИМЯ].
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

Анализируя логи сервера, заметил, что идёт излишний трафик по передаче значения таймера от обоих компов, даже если таймер не используется в игре. (=0 всегда). Сделал версию 2.52, но буду тестить на Ноуте.

С версии 2.52 исправлено.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

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

Также версия 2.55 при нажатии кнопки ПОДКЛЮЧИТЬСЯ начинает обмен пингами с СЕРВЕРОМ каждые 20 секунд (начинает мигать чёрный рыцарь). Процесс идёт до тех пор, пока второй подключившийся к СЕРВЕРУ игрок не примет вызов командой "accept". После чего СЕРВЕР переходит в режим моста (ретранслятора), связующего обоих игроков между собой.

Ещё одно улучшение было добавлено в версии 2.55. Возврат значения поля теперь идёт вместе с координатами этого поля. Возможны критические случаи, когда атака и запрос были сделаны на одно поле, а возврат пришёл (из-за чередования доставки пакетов) на другое. В этом случае кнопка "РАЗРАБОТЧИКИ" пропадает для наглядности и на ней высвечиваются расхождения в атакуемых координатах и возвращённых. После чего переприсваивается (берётся) инфа именно о возвращённых координатах (чтобы не было фейковой инфы на открытой клетке - т.е. клетка не отображала инфу, взятую с другой клетки).

===

СЕРВЕР улучшен, добавлен тайминг поступающих команд в логах с точностью до милисекунд.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

Начиная с версии 2.57 решена проблема повторной атаки клетки из-за потери пакетов. Если ранее в этом случае возвращалась ошибочная информация о наличии фигуры в клетке, то теперь всегда возвращается одна и та же точная информация: (пустое, битое, фигура-?-угадай).

Также "пинг" и "понг" между компьютерами начинается только когда не было 20 секунд никакой ОТПРАВКИ пакетов (приём не считается). Это важно при маленьком временном контроле игры, нет лишних пакетов во время игры, меньше возможных наложений пакетов и глюков.

Теперь картинка "чёрный рыцарь" у обоих игроков является индикатором отправки/приёма пакетов. Если последней была отправка - ЧР пропадает, если последним был приём - ЧР отображается. Во время "пинг"-"понг" рыцарь становится отображён на обоих компах. Задержка мигания ЧР показывает, насколько медленно проходит сигнал от отправки до доставки между игроками.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

Начиная с версии 2.60 появилась возможность при подключении к серверу выбирать себе оппонента нажатием на строку с его данными. Если выбираешь самого себя - отказ. Если выбираешь того, кто уже играет - отказ.

Сам код СЕРВЕРА был доработан до поддержки одновременно 1,2,3 пар игроков (теоретически, если хватит его времени реакции). Также если уже идёт игра между двумя - сервер может принимать новые подключения от новых IP, но без уведомления уже играющих (уведомляются только те, кто без пары). После отсоединения игроков от сервера, он чистит таблицу соединений и без перезапуска самого себя готов принимать новые соединения.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

В версии 2.63 реализована полноценная таблица соединений, отображаемая любому игроку, подключающемуся к серверу. Реализовано обновление этой таблицы в реальном времени об изменениях её структуры: +новый игрок, -сущ.игрок, началась партия между 2-мя игроками (голос "Браво!"). Поправлен глюк, когда закрытие игры или нажатие на кнопке "Отмена" в Серверной не удаляли запись об игроке на сервере, либо заставляли повторно всплывать окно Серверной.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

Re: Мое творчество. Игра Шахматный сапёр

Сообщение Андрей Карпишин »

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

При активации TIdUDPServer создает слушающий поток для входящих UDP пакетов. Для каждого принятого UDP пакета, TIdUDPServer возбуждает событие OnUDPRead в главном кодовом потоке, или в контексте слушающего потока, в зависимости от свойства ThreadedEvent.

Когда свойство ThreadedEvent сброшено, то событие OnUDPRead возбуждается в контексте главного кодового потока. Когда свойство ThreadedEvent установлено, то событие OnUDPRead возбуждается в контексте слушающего потока.

Вне зависимости от состояния ThreadedEvent true или false, блокируется обработка других сообщений. Поэтому обработка OnUDPRead по возможности должна быть короткой.

ThreadedEvent - это логическое свойство, указывающее, выполняется ли обработка данных и согласование субопций протокола в контексте TelnetThread или синхронизируется с основным потоком VCL приложения. Обработка данных и согласование протоколов выполняются с помощью обработчиков событий OnDataAvailable и OnTelnetCommand.

Если потоковое событие содержит значение True, уведомления обработчиков событий выполняются в контексте потока Telnet.

Если потоковое событие содержит значение False, уведомления обработчика событий синхронизируются с основным потоком VCL. Установите значение Threaded Event равным False, если обработчики событий не являются потокобезопасными или требуют доступа к классам и подпрограммам, доступным только в основном потоке VCL.

Значение по умолчанию для события ThreadedEvent - False.