Допустим, вы хотите создать кривую уровня/опыта, показывающую, сколько очков опыта должен набирать игрок для перехода на следующий уровень. Вы решили, что эта кривая будет треугольной с некоторым постоянным множителем: чтобы перейти на уровень N, игрок должен набрать N(N – 1)K очков опыта, где K — некоторая константа. Вы еще точно не знаете, какую константу здесь лучше использовать, поэтому хотели бы представить эти данные в виде, позволяющем легко с ними поэкспериментировать в электронной таблице до тех пор, пока не удастся привести все цифры в порядок.
То есть вам нужно получить что-то вроде следующей таблицы (рис. 29.1).

Рис. 29.1
Обычно в случае, когда требуется многократно выполнять определенную задачу, стоит автоматизировать эти действия, чтобы их не приходилось делать вручную. Если вам нужно многократно вводить одну и ту же формулу, вы легко можете набрать ее неправильно, что исказит все цифры (и это не говоря о том, насколько утомительно тратить время на многократный ввод одной и той же информации). Учитывая сказанное, как мы можем создать кривую уровня/опыта с наименьшими усилиями и повторениями?
Столбец Level (Уровень) здесь должен содержать последовательный ряд чисел от 1 до 20. Существует несколько способов получения этого результата, не требующих вводить каждое число по отдельности.
• Введите число 1 в первую ячейку (в данном случае это B5). В расположенную ниже ячейку введите формулу =B5+1 (что дает в результате 2). Затем скопируйте ее в остальные ячейки с помощью команды Fill Down (Заполнить вниз). При этом формула будет автоматически корректироваться в каждой ячейке так, чтобы ссылка указывала на предыдущую ячейку. Чуть позже мы поговорим об этом подробнее.
• Как и в предыдущем случае, сначала введите число 1 в первую ячейку и добавляющую единицу формулу в расположенную ниже ячейку. Затем скопируйте вторую ячейку, используя сочетание клавиш Ctrl+C. После этого выделите остальные 18 пустых ячеек и выполните вставку с помощью сочетания клавиш Ctrl+V. В результате скопированная ячейка будет вставлена во все выделенные ячейки с такой же автоматической корректировкой формулы в каждой ячейке, которая произошла при автозаполнении.
• Внимательно присмотревшись, вы увидите в правом нижнем углу рамки выделения маленький квадратик. Если после выделения одной или нескольких ячеек вы щелкнете на нем и перетащите его в нужном направлении, то электронная таблица попытается продолжить исходный паттерн. Например, если вы введете число 1 в ячейку B5 и число 2 в B6, а затем, выделив эти две ячейки, перетащите квадратик вниз, программа автоматически продолжит последовательность. (Обычно этот трюк срабатывает лишь при простых последовательностях, таких как 1, 2, 3 и т.д., и дает сбой, если нужно получить что-то более сложное. Тем не менее он может существенно сэкономить время, когда требуется простейшая последовательность чисел.)
Теперь давайте займемся столбцом XP (Опыт). В ячейку C5 мы должны ввести формулу =B5*(B5-1)*C2. Это, как и следовало ожидать, дает в результате 0. А что произойдет, если мы скопируем эту формулу в остальные ячейки с помощью функции автозаполнения? В расположенной ниже ячейке C6 при этом появится формула =B6*(B6-1)*C3. Но нам совсем не нужно, чтобы она ссылалась на пустую ячейку C3! Нам требуется, чтобы по мере движения вниз программа заменяла ссылку B5 на B6, B7, B8 и т.д., но чтобы ссылка C2 при этом оставалась такой же, как в исходной формуле.
В электронных таблицах есть два вида ссылок — абсолютные и относительные. До сих пор мы использовали только относительные ссылки. Это значит, что если формула в ячейке C5 ссылается на ячейку C2, то на самом деле она ссылается не на ячейку C2, а на ячейку, расположенную на три позиции выше ее текущего положения. Если при этом вы скопируете ячейку C5 и вставите ее в ячейку H9, то новая формула в ячейке H9 будет ссылаться не на ячейку C2, а на ячейку, расположенную на три позиции выше (H6). Сходным образом при копировании содержимого ячеек с помощью команд Fill Down (Заполнить вниз), Fill Right (Заполнить вправо) или буфера обмена любые относительные ссылки на ячейки корректируются таким образом, чтобы отправной точкой служила та новая ячейка, в которую вставляется формула.
Однако вы можете создать и абсолютную ссылку на ячейку. При этом ссылаетесь на конкретную именованную ячейку электронной таблицы, и эта ссылка не изменяется при перемещении исходной ячейки или ее вставке в другие ячейки посредством автозаполнения, копирования или через буфер обмена. Чтобы создать такую ссылку, нужно поставить знак доллара перед обозначением строки и столбца — $C$2 вместо C2.
Чтобы в рассматриваемом случае получить нужный результат, мы должны записать в ячейку C5 и продублировать до ячейки C24 следующую формулу: =B5*(B5-1)*$C$2. Теперь изменение значения в ячейке C2 будет приводить к соответствующему изменению всех значений в столбце количества очков опыта.
На рис. 29.2 можно заметить еще одну интересную деталь: ячейка C2 имеет не такой цвет, как другие. Чтобы изменить цвет фона любой отдельной ячейки или нескольких ячеек, нужно выделить их, щелкнуть на значке инструмента заливки и выбрать нужный цвет. Такое изменение никак не сказывается на функциональности и служит исключительно для улучшения внешнего вида документа. Подобно тому как программисты используют тот или иной стиль кодирования, геймдизайнеры могут применять тот или иной стиль электронных таблиц, обозначая различные типы данных определенными цветами. Например, вы можете выделить одним цветом все вычисляемые ячейки, чтобы сразу было видно, какие ячейки не следует изменять, и взять другой цвет для тех ячеек, со значением которых, наоборот, следует немного поиграть. В разные цвета можно окрашивать также целые строки или столбцы, чтобы отличать друг от друга некоторые общие категории (например, одним цветом могут быть обозначены издержки и ограничения, другим — преимущества и достоинства). В игровой индустрии нет стандартной схемы использования цветов, вы сами должны выбрать для своих таблиц типовую и, самое главное, единообразную цветовую схему. Подробнее мы поговорим об этом в главе 33.
Цвет далеко не единственное средство донесения информации. В компьютерном программировании код часто трудно расшифровать, просто взглянув на него, и то же самое можно сказать об электронных таблицах со сложными формулами или нестандартным расположением данных. Чтобы сделать свой код понятнее, программисты часто снабжают его комментариями, в которых дают дополнительные пояснения. В электронных таблицах есть два основных способа добавления комментариев.

Рис. 29.2
Первый, самый простой способ сводится к тому, чтобы просто ввести текст в ячейку. Вы можете выделить отдельный столбец для примечаний по дизайну и добавлять их везде, где это нужно. Однако иногда использовать этот способ нецелесообразно или становится неясно, к чему относится тот или иной комментарий. В таком случае можно прикрепить комментарий к конкретной ячейке: щелкните на ней правой кнопкой мыши и выберите в меню команду Insert Note (Вставить примечание) (рис. 29.3).

Рис. 29.3
Теперь введите текст примечания. После этого в углу снабженной примечанием ячейки будет отображаться маленький черный треугольник. Чтобы отредактировать примечание, нужно просто открыть его и, щелкнув на нем, приступить к редактированию. Чтобы удалить примечание, выберите в меню команду Clear Notes (Удалить примечания). Чтобы просмотреть добавленное примечание, откройте его, наведя указатель мыши на ячейку (рис. 29.4).

Рис. 29.4
В большинстве других редакторов электронных таблиц эта функциональность реализована в виде комментариев, а не примечаний. Еще больше запутывает ситуацию то, что в Google Sheets тоже можно вставить комментарий, который ведет себя почти так же, как примечание. Отличие заключается в следующем: поскольку редактор Google Sheets предназначен для совместной работы в онлайн-режиме, каждый комментарий снабжается именем автора и кнопкой Resolve (Отметить обсуждение как завершенное и скрыть), щелкнув на которой вы можете скрыть комментарий. К одной ячейке можно прикрепить несколько комментариев, отображаемых в виде непрерывной беседы. То есть в Google Sheets комментарии являются тем средством, с помощью которого один из членов команды разработчиков может сообщить о появившихся у него вопросах и проблемах своим коллегам, работающим над той же электронной таблицей. Эта функциональность, естественно, отсутствует в большинстве других редакторов электронных таблиц, рассчитанных на применение в офлайн-режиме на локальной машине пользователя.
Наконец, еще одной полезной возможностью является быстрое перемещение в пределах электронной таблицы. Когда у вас так много ячеек, что они не помещаются на экране, что часто бывает после применения функции автозаполнения, иногда требуется быстро перейти от верхней части таблицы к нижней, не проходя последовательно через все множество ячеек. Вы сможете перемещаться гораздо быстрее, если будете удерживать клавишу Ctrl при использовании клавиш со стрелками. Если в этот момент выделена пустая ячейка, то вы перейдете к следующей непустой ячейке (или к последней ячейке рабочего листа, если в выбранном направлении нет непустых ячеек). Если в этот момент выделена непустая ячейка, то программа переместит вас в последнюю непустую ячейку текущей последовательности, позволяя найти конец блока данных. В силу этого обычно рекомендуется располагать все взаимосвязанные данные в соседних ячейках и не разделять их пустыми строками или столбцами для лучшей читабельности, подобно тому как можно разделять строки текста пустыми строками в обычном текстовом документе, — сделав так, вы лишь затрудните для себя перемещение в пределах документа.
Иногда возникает необходимость выделить большое количество ячеек с целью их копирования и вставки через буфер обмена или быстрого удаления. Это можно делать, щелкая кнопкой мыши и перетаскивая указатель, а также нажимая клавиши со стрелками и удерживая нажатой клавишу Shift. И как вы, возможно, уже догадались, использование клавиш со стрелками с одновременным удержанием клавиш Shift и Ctrl позволяет быстро выделять большие блоки данных. Чтобы быстро выделить непрерывный прямоугольный блок ячеек, поместите указатель в один из его углов (или щелкните в любом его месте и перейдите в угловую ячейку, нажимая клавиши со стрелками и удерживая клавишу Ctrl), а затем перейдите в противоположный угол, нажимая клавиши со стрелками с удержанием клавиш Shift и Ctrl.
Массовые многопользовательские онлайн-игры, позволяющие продавать и покупать предметы за внутриигровую валюту на внутриигровом рынке или в аукционном доме, — удивительно хороший пример того, как экономические принципы могут действовать на практике. Допустим, в игре EVE Online в некоторый конкретный момент времени кривая спроса на одну единицу минерала мегацита определялась уравнением y = 500 000 – 50x, а кривая предложения — уравнением y = 45x, где и в первом, и во втором случае x — цена, а y — количество единиц, которое покупатель готов купить или продавец готов продать по этой цене. (Более подробно экономические системы обсуждались в главе 6.)
В электронной таблице создайте ячейки, которые будут представлять эти уравнения. Создайте столбец для переменной x, значения в котором будут возрастать от 0 до 10 000 с шагом 100 единиц, еще один — для значений кривой спроса в каждой точке и третий — для значений кривой предложения в каждой точке. При вводе всех этих данных нужно сначала ввести формулу (даже значение переменной x можно определять добавлением 100 единиц к предыдущему значению), а затем заполнить все 100 строк с помощью функции автозаполнения.
Затем создайте график — либо точечную диаграмму рассеяния, либо линейный, на котором и кривая спроса, и кривая предложения будут представлены одновременно, как было сделано в предыдущей главе. Выполните оформление: сделайте так, чтобы оси X и Y были снабжены подписями «Цена» и «Количество» соответственно, а в верхней части графика отображался заголовок «Мегацит». Также либо удалите создаваемую по умолчанию легенду, либо обозначьте построенные кривые как «Спрос» и «Предложение».