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

Видео, книги, журналы, научные статьи, (по тематике форума), наше творчество
Михаил Киселев
Сообщения: 716
Зарегистрирован: 22 дек 2017, 13:55
Благодарил (а): 159 раз
Поблагодарили: 69 раз

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

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

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

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

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

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

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

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

Андрей писал(а):Вопрос к Михаилу: можно из массива узнать цвет данной клетки, не обращаясь к свойству кнопки? Где хранится инфа о цветах клеток поля?
Михаил писал(а):На своем поле в массиве mb[x,y],
если первые два знака #!
Клетка будет окрашена в оранжевый цвет, если (# ) решетка, пробел.
Клетка будет окрашена в зеленый цвет (+ 10 очков если комбинация первых трех знаков массива (# X) решетка, пробел, икс.

На поле противника в массиве eb[x,y],
если первый знак К,Ф,Л,С,k - Клетка будет окрашена в оранжевый цвет,
если первый знак 0 - Клетка будет окрашена в зеленый цвет,
также если первый знак X (икс латиницей) клетка будет окрашена в зеленый (+10 очков, потому как битое поле). Вроде так.
Немного не то. Мне нужно понять, если я бью в клетку повторно - как понять, что она уже открыта (зелёная), и неважно что там 0 или X.
Это требуется при вскрытии ряда человеком, там бьётся 1-8 клетки подряд.

То есть, теоретически решив проблему "запрет бить повторно зелёную клетку" решится и проблема вскрытия ряда,
а так да, для отладки супер-фишка.
Михаил Киселев
Сообщения: 716
Зарегистрирован: 22 дек 2017, 13:55
Благодарил (а): 159 раз
Поблагодарили: 69 раз

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

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

Андрей писал(а):
Андрей писал(а):Вопрос к Михаилу: можно из массива узнать цвет данной клетки, не обращаясь к свойству кнопки? Где хранится инфа о цветах клеток поля?

Немного не то. Мне нужно понять, если я бью в клетку повторно - как понять, что она уже открыта (зелёная), и неважно что там 0 или X.
Это требуется при вскрытии ряда человеком, там бьётся 1-8 клетки подряд.
Посмотрел код, к сожалению информация, где хранится инфа о цветах клеток поля противника, находится лишь в свойствах button, в массивах ее нет.
То есть запрет повтора бить уже открытую клетку можно, думаю, сделать лишь условием if ( клетка окрашена) then....
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

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

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

Эту проблему я уже решил созданием массива ebr того же типа что и mbr - MyBoardColor.
В массиве ebr - EnemyBoardColor хранится инфа о зелёных клетках (=1), закрытых клетках (=0).

Подскажи, что вот это такое:

Код: Выделить всё

mb[y,x]:='#!'+mb[y,x];
и вот это:

Код: Выделить всё

if (copy (mb[y,x],1,2))<>'#!' then mb[y,x]:='# '+mb[y,x]; //был пробел
Когда я эти строки убираю, начинает чёрти чего происходить. Компьютер ряд не открывает, а хаотично доску портит.
Аватара пользователя
Андрей Карпишин
Архитектор
Сообщения: 9195
Зарегистрирован: 06 май 2015, 14:10
Откуда: Чехов, МО
Благодарил (а): 1214 раз
Поблагодарили: 556 раз

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

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

Ещё раз поточнее:
если первые два знака (#!) -> фигура
если (# ) решетка, пробел -> помеченная клетка
если комбинация первых трех знаков массива (# X) решетка, пробел, икс. -> ?
Михаил Киселев
Сообщения: 716
Зарегистрирован: 22 дек 2017, 13:55
Благодарил (а): 159 раз
Поблагодарили: 69 раз

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

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

Андрей писал(а): Подскажи, что вот это такое:

Код: Выделить всё

mb[y,x]:='#!'+mb[y,x];
--- это означает запись, что на данной клетке mb[y,x] была найдена фигура.
и вот это:

Код: Выделить всё

if (copy (mb[y,x],1,2))<>'#!' then mb[y,x]:='# '+mb[y,x]; //был пробел
-- А это означает, что если фигура на данной клетке не найдена, она просто отмечается как помеченая. Потом иногда, если предполагаемый ряд компьютерному игроку не нравится, он просто затирает первые два символа. А эти символы и есть (# ). Если убрать их добавление, комп будет затирать 2 других первых символа из клетки массива и конечно черти что произойдет.
Последний раз редактировалось Михаил Киселев 22 янв 2018, 22:33, всего редактировалось 1 раз.
Михаил Киселев
Сообщения: 716
Зарегистрирован: 22 дек 2017, 13:55
Благодарил (а): 159 раз
Поблагодарили: 69 раз

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

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

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

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

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

Зачем такая излишняя запись везде:

Код: Выделить всё

if (mb[1,1]>'!') and (mb[1,1]<'$')
ведь достаточно

Код: Выделить всё

if mb[1,1]='#'
Михаил Киселев
Сообщения: 716
Зарегистрирован: 22 дек 2017, 13:55
Благодарил (а): 159 раз
Поблагодарили: 69 раз

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

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

Андрей писал(а):Зачем такая излишняя запись везде:

Код: Выделить всё

if (mb[1,1]>'!') and (mb[1,1]<'$')
ведь достаточно

Код: Выделить всё

if mb[1,1]='#'
?
Это не излишняя запись после # может еще много чего быть.
(#!К), (#!Ф)... (# X).
Старая версия Лазауса 0.9 не поддерживала корректную обработку string, если в ней приходилось обрабатывать кирилические знаки, вот и приходилось изголятся.