Доброго времени суток. Так заманчиво наблюдать, как шествует по «Хабру» негласный фестиваль в 30 строчек кода. И не только знатоки JavaScript участвуют, но и другие языки программирования присоединяются к этому очень увлекательному шествию. Вот и я не выдержал и решил по участвовать. Но так уж сложилось, что я не знаю сейчас на должном уровне других языков, кроме 1С.
По сему встречайте:
К сожалению из за попыток запихнуть в 30 сток, управление совершенно примитивно. А так же не реализована безграничность поля. Ну и понятно, что не «совсем честно» говорить о том, что здесь лишь 30 строк.
«Кликаем» на поле и выставляем начальный узор клеток, далее просто жмем кнопку «Сделать ход». Вот и все.
Собственно код обработки:
P.S.: Изображение на картинке получено из узора в форме стрелки, а не нарисовано руками.
Ссылка на файл обработки: Life.ert
Почитать про игру «Жизнь» на Википедии: Жизнь (игра)
По сему встречайте:
К сожалению из за попыток запихнуть в 30 сток, управление совершенно примитивно. А так же не реализована безграничность поля. Ну и понятно, что не «совсем честно» говорить о том, что здесь лишь 30 строк.
«Кликаем» на поле и выставляем начальный узор клеток, далее просто жмем кнопку «Сделать ход». Вот и все.
Собственно код обработки:
Процедура Установить(Х,У)
Таблица.Область("R"+У+"C"+Х).ЦветФона(0,0,0);Таблица.Область("R"+У+"C"+Х).ЦветТекста(0,0,0);Таблица.Область("R"+У+"C"+Х).Значение=1;
КонецПроцедуры
Процедура Удалить(Х,У)
Таблица.Область("R"+У+"C"+Х).ЦветФона(255,255,255);Таблица.Область("R"+У+"C"+Х).ЦветТекста(255,255,255);Таблица.Область("R"+У+"C"+Х).Значение=0;
КонецПроцедуры
Процедура Очистить()
Для У=12 По 38 Цикл Для Х=2 По 42 Цикл Удалить(Х,У); КонецЦикла; КонецЦикла;
КонецПроцедуры
Процедура Ход()
сз_Установить = СоздатьОбъект("СписокЗначений");
сз_Удалить = СоздатьОбъект("СписокЗначений");
Для У=12 По 38 Цикл Для Х=2 По 42 Цикл
Итого = Таблица.Область("R"+(У-1)+"C"+(Х-1)).Значение+Таблица.Область("R"+(У-1)+"C"+Х).Значение+Таблица.Область("R"+(У-1)+"C"+(Х+1)).Значение
+ Таблица.Область("R"+(У)+"C"+(Х-1)).Значение+Таблица.Область("R"+(У)+"C"+(Х+1)).Значение+Таблица.Область("R"+(У+1)+"C"+(Х-1)).Значение
+ Таблица.Область("R"+(У+1)+"C"+Х).Значение+Таблица.Область("R"+(У+1)+"C"+(Х+1)).Значение;
Если (Итого=3) И (Таблица.Область("R"+У+"C"+Х).Значение=0) Тогда сз_Установить.ДобавитьЗначение(Х,У); КонецЕсли;
Если ((Итого=2) ИЛИ (Итого=3)) И (Таблица.Область("R"+У+"C"+Х).Значение=1) Тогда Продолжить; КонецЕсли;
Если ((Итого<=1) ИЛИ (Итого>3)) И (Таблица.Область("R"+У+"C"+Х).Значение=1) Тогда сз_Удалить.ДобавитьЗначение(Х,У); КонецЕсли;
КонецЦикла; КонецЦикла;
Для СчетчикЦикла = 1 По сз_Установить.РазмерСписка() Цикл Х = сз_Установить.ПолучитьЗначение(СчетчикЦикла,У); Установить(Х,У); КонецЦикла;
Для СчетчикЦикла = 1 По сз_Удалить.РазмерСписка() Цикл Х = сз_Удалить.ПолучитьЗначение(СчетчикЦикла,У); Удалить(Х,У); КонецЦикла;
КонецПроцедуры
Процедура ПриВыбореЯчейкиТаблицы(Адрес,Значение)
ВремАдрес = СтрЗаменить(Адрес,"R","");
У = Число(Лев(ВремАдрес,Найти(ВремАдрес,"C")-1)); Х = Число(Прав(ВремАдрес,СтрДлина(ВремАдрес)-Найти(ВремАдрес,"C")));
Если (Х<=1) ИЛИ (Х>=43) ИЛИ (У<=11) ИЛИ (У>=39) Тогда Возврат; Иначе
Если Таблица.Область("R"+У+"C"+Х).Значение = 1 Тогда Удалить(Х,У); Иначе Установить(Х,У); КонецЕсли;
КонецЕсли;
КонецПроцедуры
P.S.: Изображение на картинке получено из узора в форме стрелки, а не нарисовано руками.
Ссылка на файл обработки: Life.ert
Почитать про игру «Жизнь» на Википедии: Жизнь (игра)