Динамические эффекты

Предварительная подготовка

Эффекты форматирования

Графические объекты

Движение объектов

Ожившие графики

Другие варианты

Вентильные схемы

Автоматизация тестирования

Автоматизация оценки

Проект "Машина времени"

Игра "Жизнь"

Заполнение аттестатов

На главную

Игра «Жизнь»

Первое приближение

Второе приближение

Третье приближение

 

Сворачиваем торВизуализацияБорьба с рутинойНовые проблемыМаскировкаМинимизация

Второе приближение

Сворачиваем тор

Настала очередь решения проблемы безграничности. Представим себе поле, на котором разворачиваются основные события, в виде эластичного листа. Свернем лист в трубку, для чего состыкуем его верхний и нижний края, а затем согнем трубку в кольцо и «склеим» ее концы. Получившийся в результате тор и есть та самая безграничная поверхность, на которой обычно реализуется игра «Жизнь».

Операцию стыковки и склейки выполним в три этапа:

Рис. 2. «Склеиваем» стороны и вершины

– Поместим курсор в ячейку C4 на внешней стороне основного поля и, введя с клавиатуры знак равенства, сделаем ссылку на клетку C44 – первую слева в последней строке «арены». Затем, схватившись за маркер автозаполнения, протянем ее вправо до последней ячейки. Склеивание верха и низа завершим аналогичными действиями: выделив ячейку С45, поместим в нее формулу =C5, которую протянем в ту же сторону до ячейки AP45.

– На следующем этапе склеим левую и правую стороны образовавшегося цилиндра. Сначала через протягивание вниз формулы =AP45 из ячейки B5 на внешней левой стороне основного поля, затем формулы =C5 из ячейки AQ5.

– В завершение в четыре шага состыкуем вершины вводом во внешние угловые ячейки ссылок на диагонально противоположные угловые клетки «арены», связав: B4 с AP44, AQ4 с C44, AQ45 с C5 и, наконец, B45 с AP5.

Наша «арена» превратилась в воображаемый тор, но «нулики» по периметру, да и в самом поле не очень ее украшают.

Сначала займемся периферией. Здесь видится, по крайней мере, два варианта решения: скрыть соответствующие строки и столбцы, соприкасающиеся с внешними сторонами основного поля, или выбрать цвет шрифта в этих ячейках таким же, как и фон, то есть белым. Первый вариант предпочтительнее, так как гарантирует от случайных изменений содержимого. Есть и третий вариант, но о нем несколько позже.

Визуализация

Что-то уж слишком скромно смотрятся единички «жизни» на фоне зануленной «пустыни». Хорошо бы проявления «жизни» сделать более заметными, а «пустыню» не такой пестрой. Прежде всего расправимся с засильем нуликов. Выделив весь диапазон основного поля, окрасим ячейки в какой-либо желтый оттенок (под цвет пустыни), а заодно выберем тот же цвет для шрифта. Теперь замаскировались не только нулики, но и единички. Не спешите снимать выделение. Чтобы «жизнь» выглядела подобающим образом, воспользуемся условным форматированием: Формат – Условное форматирование… В открывшемся диалоговом окне выбираем в списках «значение», «равно», затем в следующее поле заносим единицу и, нажав на кнопку «Формат» на вкладке «Шрифт» диалогового окна «Формат ячеек», выбираем цвет зеленый и на вкладке «Вид» для заливки ячеек указываем тот же цвет.

Рис. 3. Задаем условный формат ячеек

Наша «арена» сразу же преобразилась. Теперь на неброском фоне «пустыни» ярко зазеленели ростки «жизни».

Борьба с рутиной

Но не все так хорошо, как бы хотелось. Как акт первоначального заселения, так и процедура переноса из «роддома» на «арену» однообразны и затратны по времени. Хорошо бы их усовершенствовать. Для автоматизации рутинных операций в MS Excel есть такое мощное средство как макросы.

Щелчком правой кнопки мыши на любой из верхних панелей вызовем контекстное меню и отобразим панель Visual Basic.

Рис. 4. Паель Visual Basic

Нажав на кнопку  – «Записать макрос», выполним копирование диапазона, соответствующего «родильному отделению», и, переместившись в левую верхнюю клетку основного поля, вставим его через меню Правка – Специальная вставка… – «значения». Сразу же после этого завершим создание макроса кликом по появившейся вместо предыдущей кнопке  – «Остановить запись».

Теперь для вызова на «арену» очередного поколения будем щелкать по кнопке  – «Выполнить макрос» и в диалоговом окне «Макрос», выбрав нужную строку, нажимать кнопку «Выполнить» или, через кнопку «Параметры», назначив для запуска только что созданного макроса сочетание клавиш, использовать эту возможность.

Рис. 5. Выполняем макрос

Последний прием требует меньше действий и выглядит предпочтительнее. Но можно уменьшить хлопоты и без использования клавиатуры, сократив их до щелчка по кнопке. Для этого, открыв контекстное меню на любой из панелей, отобразим панель «Формы».

Рис. 6. Выбираем кнопку

Щелкнем на ней по элементу  – «Кнопка» и, перейдя на рабочий лист, создадим под основным полем протягиванием вправо-вниз при нажатой левой кнопке мыши изображение нужного нам элемента подходящего размера. При отпускании кнопки мыши появляется диалоговое окно «Назначить макрос объекту», в котором уже выделен единственный пока макрос. Нам остается только нажать кнопку «ОК».

Выполнив двойной щелчок по кнопке, изменим надпись на ней на «Шаг» и с помощью угловых и боковых маркеров установим подходящие размеры.

Новые проблемы

Сняв выделение с кнопки щелчком в любой ячейке рабочего листа, испытаем систему усовершенствованного вывода молодняка в «свет». Пощелкав по кнопке «Шаг» и с удовлетворением восприняв достигнутый положительный результат снижения трудоемкости, отмечаем ряд недостатков:

– что-то застлалась легкой мглой «арена» жизни;

– а еще сквозь пелену проглядывают нулики и единички;

– к тому ж пелена эта мигает при выполнении макроса;

– да и вокруг «роддома» отвлекающе мерцают «муравьи» пунктирного выделения.

От пелены, а, следовательно, и от демаскировки нуликов можно было бы избавиться, если копирование заменить последовательным присваиванием значений из массива дополнительного поля в соответствующие клетки «арены». Однако практическая проверка такой идеи показала, что в этом случае использование вложенных циклов по строкам и столбцам значительно сокращает скорость смены поколений и заметно портит зрительный эффект. Жизнь не бывает безоблачной, так что с пеленой предлагаю смириться или, если вы предложите другие эффектные способы, буду рад о них от вас узнать.

Маскировка

Для решения проблемы демаскировки воспользуемся ранее заявленным третьим вариантом, который потребует от нас кардинальных преобразований:

– Откажемся от нуликов. Если в клетке нет «жизни», так пусть же признаком этого будет пустота, то есть отсутствие данных в ячейке или пустой текст "". Чтобы одним выстрелом убить сразу двух зайцев, поступим следующим образом: включим запись макросов, выделим весь диапазон «арены» жизни, нажмем клавишу «Delete» на клавиатуре и остановим запись макроса. Так как процедуру очистки основного поля в процессе игры придется выполнять неоднократно, то неплохо бы привязать только что созданный макрос к соответствующей кнопке «Очистка», применив ранее приведенную технологию ее создания и обработки.

– Может это и кощунство, но заселять в клетки будем пробелы, они-то уж точно не будут просматриваться сквозь пелену выделения.

– Электронные таблицы предоставляют огромный арсенал различных функций, так что не стоит зацикливаться на суммировании единичек. Для решения нашей задачи воспользуемся функцией «СЧЁТЕСЛИ(диапазон;критерий)», в связи с чем внесем коррективы в формулу первой ячейки верхнего ряда «родильного отделения». Теперь она будет выглядеть так:

=ЕСЛИ(C5=" ";ЕСЛИ(И(СЧЁТЕСЛИ(B4:D6;" ")>2;СЧЁТЕСЛИ(B4:D6;" ")<5);" ";"");ЕСЛИ
(СЧЁТЕСЛИ(B4:D6;" ")=3;" ";""))

Скопируем ее и, выделив весь диапазон дополнительного поля, вставим.

Следует отметить еще один положительный эффект произведенных преобразований – поле «родильного отделения» также очистилось от нулей и единиц.

После автоматизации процесса переноса поколений надобность следить за обоими полями отпала. Теперь можно обеспечить таинство рождения нового поколения. Попытка скрыть столбцы, содержащие дополнительное поле, приводит к частичному результату, так как от «бегущих муравьев» этим способом избавиться не удается, и они по-прежнему мельтешат, предательски выдавая место зарождения «жизни». Придется «родильное отделение» переместить с глаз подальше за пределы экрана вправо или вниз. Для этого, выделив диапазон, включающий «роддом», вырежем его и, переместившись (например, в ячейку HC5), вставим или, схватившись за край выделения, перетянем его на новое место. Для надежности соответствующие столбцы лучше всего скрыть.

Минимизация

Рис. 7. Панель проводника проекта

Естественно, что сразу же после произведенных преобразований необходимо внести коррективы и в макрос переноса поколений. Для этого щелчком по значку панели «Visual Basic» или сочетанием клавиш Alt+F11 прейдем в окно редактора макросов, где в окне проводника проекта «Project» двойным кликом по строке «Module1» откроем окно кода ранее записанных нами макросов и минимизируем их, откорректировав до вида:

Sub Макрос1()

  Range("HC5:IP44").Copy

  Range("C5").PasteSpecial Paste:=xlPasteValues

  Range("A1").Select

End Sub

Sub Макрос2()

  Range("C5:AP44").ClearContents

End Sub

Проверив действие клеточного автомата после внедрения рационализаторских предложений, убеждаемся, что большая часть изъянов устранена и задачу можно считать решенной во втором приближении, но пока что в нашей игре самой неудобной составляющей является процесс заселения первого поколения. Хорошо бы усовершенствовать и эту процедуру.

Продолжение

На верх

 

Динамические эффекты Предварительная подготовка Эффекты форматирования Графические объекты
&Движение объектов Ожившие графики Другие варианты Вентильные схемы Автоматизация тестирования
Автоматизация оценки Проект "Машина времени" Игра "Жизнь" Заполнение аттестатов

© 2009 Государственное областное образовательное учреждение

"Россошанская школа-интернат для детей-сирот и детей, оставшихся без попечения родителей"