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

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

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

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

Надо будет отключить пользовательский интерфейс для начала.

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

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

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

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

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

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

Похоже, есть один баг в версии <= 2.66.

После выстрела в чужую клетку, если ответ ещё не успел прийти - не блокируется возможность стрелять в другие клетки соперника. Сегодня играл с новичком и получил такой лог с Сервера:
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 (Андрей)
В принципе, понятно как это закрыть, но нужно будет протестировать с быстрым компом Afan или Мишином стационарнике.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

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

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

Это сетевая разновидность старого бага от "04 фев 2018":
Андрей писал(а):
04 фев 2018, 21:08
Также, я нашёл ещё один глюк. Человек может, быстро щёлкая мышью, открыть 6-7 клеток, не дожидаясь хода Компьютера, в то время, как Компьютер успеет сделать всего один ход.
Причём, я не думал, что процедура может открываться несколько раз, даже будучи уже однажды запущенной. Но это так. Она застревает в ожидании ответа в середине процедуры, но по нажатию кнопок на поле комп создаёт всё новые экземпляры этой процедуры. Исполняемый код как бы разветвляется или даже размножается.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

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

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

Полностью закрыта возможность атаковать 2 клетки подряд. Если не пришёл ответ - небольшое ожидание с блокировкой всех кнопок, а потом разрешение на повторную стрельбу с характерным звуком buzz.wav.

Список того, что нужно будет доработать:

- уйти от ShowMessage полностью в сетевой игре (они запрещают сетевой обмен, пока активны) - вместо этого надпись на Button + звук
- добавить при сетевом соединении на форму КРУПНЫЕ ИМЕНА ИГРОКОВ, чтобы понятно было кто с кем играет
- убрать ещё 2 бесконечных цикла до получения сетевого ответа (из-за этого люди иногда не могли закрыть программу)
- добавить кнопку после окончания сетевой партии "В ЛОББИ" либо сделать её на кнопке "ПОДКЛЮЧИТЬСЯ"

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

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

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

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

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

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

Компьютер не угадал 5 РАЗ ПОДРЯД!

710O.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Михаил Киселев
Сообщения: 716
Зарегистрирован: 22 дек 2017, 13:55
Благодарил (а): 159 раз
Поблагодарили: 69 раз

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

Сообщение Михаил Киселев »

Андрей писал(а):
10 июн 2020, 15:18
Компьютер не угадал 5 РАЗ ПОДРЯД!
У меня один раз недавно тоже такое было.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

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

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

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

Остальные идеи с предыдущей страницы уже воплощены в коде.

Ещё в версии 2.70 быстрее открывается Серверная, и закрывается тоже. Звуки изменены на асинхронные, ранее они чуть мешали процессу.

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

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

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

Сегодня получилась патовая ситуация в движке:
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 > Михаил: заново?
Насколько я помню эту ситуацию, пакет с ответным рядом 4 в 16:24:24 потерялся по пути от Андрея к серверу. Через 7 секунд Михаил повторил атаку ряда 4 и получил ответ в эту же секунду. Спустя ещё 8 секунд Андрей пошёл 4,4 и тут же получил ответ на 4,4. Дальше всё встало.

В принципе, да, нужно делать в рядах тот же механизм, что и в клетках.