Надо будет отключить пользовательский интерфейс для начала.
Вторым шагом может быть создание буфера приёма, мгновенное его наполнение и лишь дальнейшая обработка - разбор буфера в отдельном, постоянно крутящем цикл, потоке.
Мое творчество. Игра Шахматный сапёр
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный сапёр
Похоже, есть один баг в версии <= 2.66.
После выстрела в чужую клетку, если ответ ещё не успел прийти - не блокируется возможность стрелять в другие клетки соперника. Сегодня играл с новичком и получил такой лог с Сервера:
После выстрела в чужую клетку, если ответ ещё не успел прийти - не блокируется возможность стрелять в другие клетки соперника. Сегодня играл с новичком и получил такой лог с Сервера:
В принципе, понятно как это закрыть, но нужно будет протестировать с быстрым компом Afan или Мишином стационарнике.22:34:53:646 Ход 5,8 (Мари)
22:34:54:552 Ход 5,3 (Мари)
22:34:55:068 Ход 5,1 (Мари)
22:34:55:794 Ответ 5,8=0 (Андрей)
22:34:56:405 Ответ 5,3=x (Андрей)
22:34:56:934 Ход 6,1 (Мари)
22:34:56:944 Ход 7,4 (Мари)
22:34:57:342 Ход 8,4 (Мари)
22:34:57:468 Ответ 5,1=xx (Андрей)
22:34:58:329 Ответ 6,1=x (Андрей)
22:34:59:322 Ответ 7,4=x (Андрей)
22:35:00:266 Ответ 8,4=x (Андрей)
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный сапёр
Это сетевая разновидность старого бага от "04 фев 2018":
Причём, я не думал, что процедура может открываться несколько раз, даже будучи уже однажды запущенной. Но это так. Она застревает в ожидании ответа в середине процедуры, но по нажатию кнопок на поле комп создаёт всё новые экземпляры этой процедуры. Исполняемый код как бы разветвляется или даже размножается.
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный сапёр
Полностью закрыта возможность атаковать 2 клетки подряд. Если не пришёл ответ - небольшое ожидание с блокировкой всех кнопок, а потом разрешение на повторную стрельбу с характерным звуком buzz.wav.
Список того, что нужно будет доработать:
- уйти от ShowMessage полностью в сетевой игре (они запрещают сетевой обмен, пока активны) - вместо этого надпись на Button + звук
- добавить при сетевом соединении на форму КРУПНЫЕ ИМЕНА ИГРОКОВ, чтобы понятно было кто с кем играет
- убрать ещё 2 бесконечных цикла до получения сетевого ответа (из-за этого люди иногда не могли закрыть программу)
- добавить кнопку после окончания сетевой партии "В ЛОББИ" либо сделать её на кнопке "ПОДКЛЮЧИТЬСЯ"
на сервере:
- при перестройке таблицы соединений сбрасывать идентификатор партии у игрока, который потерял пару в любых случаях
Список того, что нужно будет доработать:
- уйти от ShowMessage полностью в сетевой игре (они запрещают сетевой обмен, пока активны) - вместо этого надпись на Button + звук
- добавить при сетевом соединении на форму КРУПНЫЕ ИМЕНА ИГРОКОВ, чтобы понятно было кто с кем играет
- убрать ещё 2 бесконечных цикла до получения сетевого ответа (из-за этого люди иногда не могли закрыть программу)
- добавить кнопку после окончания сетевой партии "В ЛОББИ" либо сделать её на кнопке "ПОДКЛЮЧИТЬСЯ"
на сервере:
- при перестройке таблицы соединений сбрасывать идентификатор партии у игрока, который потерял пару в любых случаях
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный сапёр
А MessageDlg надо закрывать по таймеру через 5-10 секунд после показа:
- запрос о реванше,
- запрос о показе расстановки фигур
- запрос о реванше,
- запрос о показе расстановки фигур
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный сапёр
Компьютер не угадал 5 РАЗ ПОДРЯД!
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
Михаил Киселев
- Сообщения: 716
- Зарегистрирован: 22 дек 2017, 13:55
- Благодарил (а): 159 раз
- Поблагодарили: 69 раз
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный сапёр
В версии 2.69 я не убрал всего 1 бесконечный цикл при ожидании сетевого ответа. После запроса ряда соперника. Теоретически, если пакет с ответом на ряд потеряется - комп открывающего ряд так и не выйдет из цикла. Так как ряды вскрываются редко вероятность этого очень мала. Но в будущем всё равно поправлю. Хотя, по-моему, кнопки рядов не блокируются жёстко - поэтому есть возможность запросить повторно ряд. Тогда нужно сделать такой же механизм как и при атаке клетки. Писать инфу об отправке запроса о ряде и об ответе или потере ответа.
Остальные идеи с предыдущей страницы уже воплощены в коде.
Ещё в версии 2.70 быстрее открывается Серверная, и закрывается тоже. Звуки изменены на асинхронные, ранее они чуть мешали процессу.
Звук изменения состава участников на сервере изменён с "Браво!" на detach.wav.
Остальные идеи с предыдущей страницы уже воплощены в коде.
Ещё в версии 2.70 быстрее открывается Серверная, и закрывается тоже. Звуки изменены на асинхронные, ранее они чуть мешали процессу.
Звук изменения состава участников на сервере изменён с "Браво!" на detach.wav.
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный сапёр
Сегодня получилась патовая ситуация в движке:
В принципе, да, нужно делать в рядах тот же механизм, что и в клетках.
Насколько я помню эту ситуацию, пакет с ответным рядом 4 в 16:24:24 потерялся по пути от Андрея к серверу. Через 7 секунд Михаил повторил атаку ряда 4 и получил ответ в эту же секунду. Спустя ещё 8 секунд Андрей пошёл 4,4 и тут же получил ответ на 4,4. Дальше всё встало.16:24:06:877 > Ход 65 (Андрей)
16:24:08:157 > Ответ 65?xxx (Михаил)
16:24:21:093 > Угадываю K (Андрей)
16:24:21:651 > Не угадал (Михаил)
16:24:24:311 > Открываю ряд 4 (Михаил)
16:24:24:319 CBServ> Открываю ряд 4 (Михаил) - шлю это Андрею
16:24:31:101 > Открываю ряд 4 (Михаил)
16:24:31:109 CBServ> Открываю ряд 4 (Михаил) - шлю это Андрею
16:24:31:155 > Возвращаю ряд 4 (Андрей)
16:24:31:163 CBServ> Возвращаю ряд 4 - шлю это Михаилу
16:24:39:707 > Ход 44 (Андрей)
16:24:39:831 > Ответ 44x (Михаил)
16:24:58:547 > Михаил: несколько раз
16:25:10:404 > Михаил: один и тот же ряд открывал
16:25:21:547 > Михаил: не появилось стрелки
16:25:32:897 > Михаил: внизу под рядами
16:25:41:801 > Андрей: наверное что-то пропало
16:25:56:053 > Андрей: у меня ряд открыт
16:26:05:305 > Михаил: у меня тоже
16:26:12:715 > Михаил: открыт теперь
16:26:16:115 > Андрей: твой ход
16:26:21:285 > Михаил: но не сразу открыт был
16:26:38:040 > Михаил: твой ход
16:26:50:168 > Михаил: ряд открыт соперник ходит
16:27:23:652 > Андрей: видимо я сделал ход пока ты возился с рядами
16:27:45:883 > Михаил: не могу пойти
16:27:58:365 > Михаил: ход мой заблокирован
16:28:27:096 > Михаил: попробуй ты походить
16:29:28:641 > Андрей: не получается
16:29:41:151 > Михаил: у меня тоже
16:30:02:548 > Михаил: заново?
В принципе, да, нужно делать в рядах тот же механизм, что и в клетках.