&НаКлиенте
Процедура НачатьИгру(Команда)
Элементы.НачатьИгру.Картинка = Элементы.ИграНачалась.Картинка;
СоздатьИгровоеПоле();
ЗаполнитьПолеМинами();
ЗаполнитьПолеЦифрами();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
// Вставить содержимое обработчика.
КонецПроцедуры
&НаКлиенте
Процедура РежимСложностиПриИзменении(Элемент)
НастроитьВидимостьПараметров();
КонецПроцедуры
&НаКлиенте
Процедура НастроитьВидимостьПараметров()
Если Объект.РежимСложности = "Особые" Тогда
Элементы.ПараметрыИгровогоПоля.Доступность = Истина;
Иначе
Элементы.ПараметрыИгровогоПоля.Доступность = Ложь;
КонецЕсли;
ОпределитьПараметрыИгровогоПоля();
КонецПроцедуры
Процедура ОпределитьПараметрыИгровогоПоля()
Если Объект.РежимСложности = "Новичок" Тогда
Объект.ВысотаИгровогоПоля = 3;
Объект.ШиринаИгровогоПоля = 3;
Объект.КоличествоМин = 3;
ИначеЕсли Объект.РежимСложности = "Любитель" Тогда
Объект.ВысотаИгровогоПоля = 7;
Объект.ШиринаИгровогоПоля = 7;
Объект.КоличествоМин = 10;
ИначеЕсли Объект.РежимСложности = "Профессионал" Тогда
Объект.ВысотаИгровогоПоля = 9;
Объект.ШиринаИгровогоПоля = 9;
Объект.КоличествоМин = 30;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьИгровоеПоле()
Для НомерКолонки = 1 по Объект.ШиринаИгровогоПоля цикл
Колонка = НоваяКолонка(НомерКолонки);
Для НомерСтроки = 1 по Объект.ВысотаИгровогоПоля цикл
ДобавитьЯчейку(НомерКолонки, НомерСтроки, Колонка);
// Конструкция попытка - исключение
Попытка
ИмяЭлемента = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
ПунктМеню = Элементы.Найти("Пункт1_" + ТекущийЭлемент.Имя);
ПунктМеню.Доступность = Истина;
ПунктМеню = Элементы.Найти("Пункт2_" + ТекущийЭлемент.Имя);
ПунктМеню.Доступность = Ложь;
Исключение
Элемент = Элементы.Найти(ИмяЭлемента);
ПунктМеню = Элементы.Добавить("Пункт1_" + ИмяЭлемента,
Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
ПунктМеню.ИмяКоманды = "ПоставитьФлажок";
ПунктМеню = Элементы.Добавить("Пункт2_"+ИмяЭлемента,
Тип("КнопкаФормы"), Элементы.КонтекстноеМеню);
ПунктМеню.ИмяКоманды = "УбратьФлажок";
ПунктМеню.Доступность = Ложь;
КонецПопытки;
// Конструкция попытка - исключение
КонецЦикла;
КонецЦикла;
УдалитьЛишниеЭлементы();
КонецПроцедуры
Функция НоваяКолонка(Номер)
ИмяЭлемента = "Колонка" + Номер;
Элемент = Элементы.Найти(ИмяЭлемента);
Если Элемент = Неопределено тогда
Элемент = Элементы.Добавить("Колонка" + Номер, Тип("ГруппаФормы"),Элементы.ИгровоеПоле);
//Элемент = Элементы.Добавить("Колонка" + Номер, Тип("ГруппаФормы"),Элементы.ИгровоеПоле);
Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
Элемент.ОтображатьЗаголовок = Ложь;
Элемент.ЦветФона = WebЦвета.Орхидея;
Элемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
КонецЕсли;
Возврат Элемент;
КонецФункции // НоваяКолонка()
Процедура ДобавитьЯчейку(НомерКолонки, НомерСтроки, Группа)
ИмяЭлемента = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
Элемент = Элементы.Найти(ИмяЭлемента);
Если Элемент = Неопределено тогда
Элемент = Элементы.Добавить("Ячейка_" + НомерКолонки + "_" + НомерСтроки, Тип("ДекорацияФормы"), Группа);
Элемент.Вид = ВидДекорацииФормы.Картинка;
Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Выпуклая, 2);
Элемент.Высота = 1;
Элемент.Ширина = 2;
Элемент.Гиперссылка = Истина;
Элемент.УстановитьДействие("Нажатие", "ОткрытьЯчейку");
Элемент.Заголовок = "";
ПунктМеню = Элементы.Добавить("Пункт1_" + ИмяЭлемента,
Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
ПунктМеню.ИмяКоманды = "УбратьФлажок";
ПунктМеню.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
Процедура УдалитьЛишниеЭлементы()
ТекущаяШирина = Элементы.ИгровоеПоле.ПодчиненныеЭлементы.Количество();
Если ТекущаяШирина = 0 Тогда
ТекущаяВысота = 0;
Иначе
Колонка = Элементы.ИгровоеПоле.ПодчиненныеЭлементы.Получить(0);
ТекущаяВысота= Колонка.ПодчиненныеЭлементы.Количество();
КонецЕсли;
//Начинаем удаление колонок ячеек
//Обходим с правого нижнего угла
НомерКолонки = ТекущаяШирина;
Пока НомерКолонки > 0 Цикл
НомерСтроки = ТекущаяВысота;
Пока НомерСтроки > 0 Цикл
Если НомерСтроки > Объект.ВысотаИгровогоПоля тогда
Элемент = Элементы.Найти("Ячейка_" + НомерКолонки + "_" + НомерСтроки);
Элементы.Удалить(Элемент);
КонецЕсли;
НомерСтроки = НомерСтроки - 1;
КонецЦикла;
Если НомерКолонки > Объект.ШиринаИгровогоПоля Тогда
Элемент = Элементы.Найти("Колонка" + НомерКолонки);
Элементы.Удалить(Элемент);
КонецЕсли;
НомерКолонки = НомерКолонки - 1;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьЯчейку(Элемент)
Элемент.Гиперссылка = Ложь;
Если Элемент.Заголовок = "ЭтоМина" Тогда
Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 0);
Элемент.Картинка = Элементы.Взрыв.Картинка;
ПоказатьПредупреждение(,"Вы проиграли");
Иначе
Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Вдавленная, 2);
Элемент.Картинка = КартинкаЯмки(Элемент.Заголовок);
Если Элемент.Заголовок = "0" Тогда
ОткрытьСоседниеЯчейки(Элемент);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьПолеМинами()
Генератор = Новый ГенераторСлучайныхЧисел();
ОсталосьМин = Объект.КоличествоМин;
Пока ОсталосьМин > 0 Цикл
НомерСтроки = Генератор.СлучайноеЧисло(1,Объект.ВысотаИгровогоПоля);
НомерКолонки = Генератор.СлучайноеЧисло(1, Объект.ШиринаИгровогоПоля);
Элемент = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
Элемент = Элементы.Найти(Элемент);
Если Элемент.Заголовок = "ЭтоМина" Тогда
Продолжить;
КонецЕсли;
Элемент.Заголовок = "ЭтоМина";
ОсталосьМин = ОсталосьМин - 1;
//Картинка мины
//Элемент.Картинка = БиблиотекаКартинок.Удалить;
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьПолеЦифрами()
Для НомерСтроки = 1 по Объект.ВысотаИгровогоПоля Цикл
Для НомерКолонки = 1 по Объект.ШиринаИгровогоПоля Цикл
ИмяЭлемента = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
Элемент = Элементы.Найти(ИмяЭлемента);
Если Элемент.Заголовок = "ЭтоМина" тогда
Продолжить;
КонецЕсли;
Элемент.Заголовок = КоличествоМин(НомерСтроки, НомерКолонки);
//Элемент.Картинка = Новый Картинка();
//Элемент.ТекстНевыбраннойКартинки = Элемент.Заголовок;
//Элемент.Шрифт = Новый Шрифт (Элемент.Шрифт,,,Истина);
//Элемент.ЦветТекста = WebЦвета.СветлоГрифельноСерый
КонецЦикла
КонецЦикла
КонецПроцедуры
Функция КоличествоМин(НомерСтроки, НомерКолонки)
Результат = 0;
Для Шаг = 1 По 8 Цикл
ИмяЭлемента = "Ячейка_";
Если Шаг = 1 тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки-1);
ИначеЕсли Шаг = 2 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки-1);
ИначеЕсли Шаг = 3 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки-1);
ИначеЕсли Шаг = 4 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки);
ИначеЕсли Шаг = 5 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки);
ИначеЕсли Шаг = 6 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки+1);
ИначеЕсли Шаг = 7 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки+1);
Иначе
ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки+1);
КонецЕсли;
СоседнийЭлемент = Элементы.Найти(ИмяЭлемента);
Если СоседнийЭлемент <> Неопределено
и СоседнийЭлемент.Заголовок = "ЭтоМина" Тогда
Результат = Результат + 1;
КонецЕсли;
КонецЦикла;
Возврат Результат
КонецФункции // КоличествоМин()
Функция КартинкаЯмки(МинВокруг)
Если МинВокруг = "0" Тогда
Возврат Элементы.Ямка.Картинка;
Иначе
ИмяКартинки = "Ямка"+МинВокруг;
Возврат Элементы[ИмяКартинки].Картинка
КонецЕсли;
КонецФункции // КартинкаЯмки()
&НаКлиенте
Процедура ОткрытьСоседниеЯчейки(Элемент)
Координаты = СРЕД(Элемент.Имя, 8);
ПозицияРазделителя = Найти (Координаты, "_");
НомерКолонки = Число (ЛЕВ(Координаты, ПозицияРазделителя-1));
НомерСтроки = Число (СРЕД(Координаты, ПозицияРазделителя+1));
Для Шаг = 1 По 8 Цикл
ИмяЭлемента = "Ячейка_";
Если Шаг = 1 тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки-1);
ИначеЕсли Шаг = 2 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки-1);
ИначеЕсли Шаг = 3 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки-1);
ИначеЕсли Шаг = 4 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки);
ИначеЕсли Шаг = 5 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки);
ИначеЕсли Шаг = 6 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки+1);
ИначеЕсли Шаг = 7 Тогда
ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки+1);
Иначе
ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки+1);
КонецЕсли;
СоседнийЭлемент = Элементы.Найти(ИмяЭлемента);
Если СоседнийЭлемент <> Неопределено
и СоседнийЭлемент.Заголовок <> "ЭтоМина" и СоседнийЭлемент.Гиперссылка = Истина Тогда
СоседнийЭлемент.Гиперссылка = Ложь;
СоседнийЭлемент.Картинка = Новый Картинка();
СоседнийЭлемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 0);
Если СоседнийЭлемент.Заголовок = "0" Тогда
СоседнийЭлемент.ТекстНевыбраннойКартинки = "";
ОткрытьСоседниеЯчейки(СоседнийЭлемент);
Иначе
СоседнийЭлемент.ТекстНевыбраннойКартинки = СоседнийЭлемент.Заголовок;
СоседнийЭлемент.Шрифт = Новый Шрифт(СоседнийЭлемент.Шрифт,,,Истина);
СоседнийЭлемент.ЦветТекста = WebЦвета.КрасноФиолетовый;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УбратьФлажок(Команда)
ПунктМеню = Элементы.Найти("Пункт1_" + ТекущийЭлемент.Имя);
ПунктМеню.Доступность = Истина;
ПунктМеню = Элементы.Найти("Пункт2_" + ТекущийЭлемент.Имя);
ПунктМеню.Доступность = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ПоставитьФлажок(Команда)
ПунктМеню = Элементы.Найти("Пункт1_" + ТекущийЭлемент.Имя);
ПунктМеню.Доступность = Ложь;
ПунктМеню = Элементы.Найти("Пункт2_" + ТекущийЭлемент.Имя);
ПунктМеню.Доступность = Истина;
КонецПроцедуры
ПоказатьПомогите с кодом, тут где-то ошибка
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(19) Модель попросили найти ошибку в коде, она ее НЕ нашла, поэтому написала бред, который вы протранслировали сюда, т.к. не имеете практики программирования в 1С, а просто прокачиваете свой уровень в OpenAI.
Для того что бы подтвердить свою правоту не надо оправдываться, просто приложите код который подтвердит вашу версию, как это делаю я.
Для того что бы подтвердить свою правоту не надо оправдываться, просто приложите код который подтвердит вашу версию, как это делаю я.
Прикрепленные файлы:
(20) Нет. Я гоняю o1 на примерах, которые беру на форумах, потому что:
1. мне самому интересно
2. мне надо перейти на следующий уровень в сервисе OpenAI, а для этого надо потратить некоторую сумму.
Вот как потрачу, останется только п.1 и вы меня уже так часто здесь не увидите. Потерпите
1. мне самому интересно
2. мне надо перейти на следующий уровень в сервисе OpenAI, а для этого надо потратить некоторую сумму.
Вот как потрачу, останется только п.1 и вы меня уже так часто здесь не увидите. Потерпите
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот