Эх, эти три пункта мне надо делать, потому как есть наметки, может тогда завтра или посмотрю сегодня если легко поправить. Если честно, от кода игры уже немного подташнивает. Мне перед тобой действительно очень неудобно.Андрей писал(а):Что нужно реализовать:
- Иногда при вскрытии ряда Компьютером на некоторых кнопках проступает # (не всегда)
- Когда компьютер не угадывает фигуру - не видно какую клетку он атакует, просто появляется сообщение "не угадал". Возможно, нужен 3-й цвет.
- Поправить "глюк ФСФ"* двойное засчитывание фигуры при открытии и далее открытии её ряда.
Мое творчество. Игра Шахматный сапёр
-
Михаил Киселев
- Сообщения: 716
- Зарегистрирован: 22 дек 2017, 13:55
- Благодарил (а): 159 раз
- Поблагодарили: 69 раз
Re: Мое творчество. Игра Шахматный бой
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный бой
Михаил Киселев, ничего страшного, как я сейчас пойму назначение твоего массива - я овладею последней terra incognita в твоей программе. Так что жди до выходных моих улучшений, если хочешь.
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный бой
Андрей писал(а):Вопрос к Михаилу: можно из массива узнать цвет данной клетки, не обращаясь к свойству кнопки? Где хранится инфа о цветах клеток поля?
Немного не то. Мне нужно понять, если я бью в клетку повторно - как понять, что она уже открыта (зелёная), и неважно что там 0 или X.Михаил писал(а):На своем поле в массиве mb[x,y],
если первые два знака #!
Клетка будет окрашена в оранжевый цвет, если (# ) решетка, пробел.
Клетка будет окрашена в зеленый цвет (+ 10 очков если комбинация первых трех знаков массива (# X) решетка, пробел, икс.
На поле противника в массиве eb[x,y],
если первый знак К,Ф,Л,С,k - Клетка будет окрашена в оранжевый цвет,
если первый знак 0 - Клетка будет окрашена в зеленый цвет,
также если первый знак X (икс латиницей) клетка будет окрашена в зеленый (+10 очков, потому как битое поле). Вроде так.
Это требуется при вскрытии ряда человеком, там бьётся 1-8 клетки подряд.
То есть, теоретически решив проблему "запрет бить повторно зелёную клетку" решится и проблема вскрытия ряда,
а так да, для отладки супер-фишка.
-
Михаил Киселев
- Сообщения: 716
- Зарегистрирован: 22 дек 2017, 13:55
- Благодарил (а): 159 раз
- Поблагодарили: 69 раз
Re: Мое творчество. Игра Шахматный бой
Посмотрел код, к сожалению информация, где хранится инфа о цветах клеток поля противника, находится лишь в свойствах button, в массивах ее нет.Андрей писал(а):Андрей писал(а):Вопрос к Михаилу: можно из массива узнать цвет данной клетки, не обращаясь к свойству кнопки? Где хранится инфа о цветах клеток поля?
Немного не то. Мне нужно понять, если я бью в клетку повторно - как понять, что она уже открыта (зелёная), и неважно что там 0 или X.
Это требуется при вскрытии ряда человеком, там бьётся 1-8 клетки подряд.
То есть запрет повтора бить уже открытую клетку можно, думаю, сделать лишь условием if ( клетка окрашена) then....
-
Андрей Карпишин
- Архитектор
- Сообщения: 9195
- Зарегистрирован: 06 май 2015, 14:10
- Откуда: Чехов, МО
- Благодарил (а): 1214 раз
- Поблагодарили: 556 раз
Re: Мое творчество. Игра Шахматный бой
Эту проблему я уже решил созданием массива ebr того же типа что и mbr - MyBoardColor.
В массиве ebr - EnemyBoardColor хранится инфа о зелёных клетках (=1), закрытых клетках (=0).
Подскажи, что вот это такое:
и вот это:
Когда я эти строки убираю, начинает чёрти чего происходить. Компьютер ряд не открывает, а хаотично доску портит.
В массиве 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) решетка, пробел, икс. -> ?
если первые два знака (#!) -> фигура
если (# ) решетка, пробел -> помеченная клетка
если комбинация первых трех знаков массива (# X) решетка, пробел, икс. -> ?
-
Михаил Киселев
- Сообщения: 716
- Зарегистрирован: 22 дек 2017, 13:55
- Благодарил (а): 159 раз
- Поблагодарили: 69 раз
Re: Мое творчество. Игра Шахматный бой
Андрей писал(а): Подскажи, что вот это такое:--- это означает запись, что на данной клетке mb[y,x] была найдена фигура.Код: Выделить всё
mb[y,x]:='#!'+mb[y,x];
и вот это:-- А это означает, что если фигура на данной клетке не найдена, она просто отмечается как помеченая. Потом иногда, если предполагаемый ряд компьютерному игроку не нравится, он просто затирает первые два символа. А эти символы и есть (# ). Если убрать их добавление, комп будет затирать 2 других первых символа из клетки массива и конечно черти что произойдет.Код: Выделить всё
if (copy (mb[y,x],1,2))<>'#!' then mb[y,x]:='# '+mb[y,x]; //был пробел
Последний раз редактировалось Михаил Киселев 22 янв 2018, 22:33, всего редактировалось 1 раз.
-
Михаил Киселев
- Сообщения: 716
- Зарегистрирован: 22 дек 2017, 13:55
- Благодарил (а): 159 раз
- Поблагодарили: 69 раз
Re: Мое творчество. Игра Шахматный бой
--значит твоя клетка открыта и она находится под боем какой либо из фигур. (# XX) - двух фигур. (# XXX) - трех.Андрей писал(а):Ещё раз поточнее:
если первые два знака (#!) -> ? --значит твоя клетка открыта и на ней стоит какая-либо из фигур.
если (# ) решетка, пробел. -> ? --значит твоя клетка открыта, но на ней точно никакой фигуры не стоит.
если комбинация первых трех знаков массива (# X) решетка, пробел, икс. -> ?
-
Андрей Карпишин
- Архитектор
- Сообщения: 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, если в ней приходилось обрабатывать кирилические знаки, вот и приходилось изголятся.