Немного Excel (точнее google spreadsheet) и чуть-чуть про разработку игр

Небольшое вступление. Увидел тут пост про эксель, вспомнил, какую "магию" приходилось мне творить. Когда начинаешь делать какую-нибудь игру (в свободное от работы время увлекаюсь этим бессмысленным занятием) обычно нужен какой-нибудь простой и быстрый способ проверки математики, я для этих целей использую банальный эксель (гугловский вариант для быстрого показа другим). Формулы приведены для гугл варианта, у экселя для всего есть аналоги.

Сразу пояснения за используемые операции, для ЛЛ.

VLOOKUP("что ищем", "где ищем", "номер столбца",  false) - поиск строки, начинающейся с "что ищем", возвращает значение из "номера столбца" данной строки.

CONCATENATE - объединение нескольких строк в одну

INDIRECT - позволяет использовать текст в качестве адреса

Смоделируем задачу - нужно придумать крафт оружия, чтобы его можно было делать из разных материалов, но всё оно рассчитывалось по одной формуле, естественно с зависимостями, из какого материала оно было сделано. Проверки "на дурака" не предполагается, делается исключительно для внутреннего теста, предположительно мы знаем, что делаем.

Сначала придумаем сами материалы и их характеристики. Для металлов, допустим, будем такая табличка. Сами параметры пока что можно взять с потолка (ради балансировки всё и делается, в конце концов). Сами листы называем как-нибудь односложно, желательно латиницей (в данном случае - "metal".

Немного Excel (точнее google spreadsheet) и чуть-чуть про разработку игр Microsoft Excel, Google docs, Длиннопост

Теперь сделаем табличку рецептов

Немного Excel (точнее google spreadsheet) и чуть-чуть про разработку игр Microsoft Excel, Google docs, Длиннопост

Где в "тип материала" поставим обязательное условие выбор через "Data validation" (правой кнопкой по ячейкам, внизу пункт будет). Данные названия полностью повторяют названия листов, где находятся необходимые нам материалы. Саму формулу я сейчас не помню, но, когда буду о ней рассказывать, поясню.

Прежде чем перейти непосредственно к крафту, понадобится ещё один лист, для облегчения формул. На него будем динамически выводить используемые в данном рецепте материалы. Хотя, создавать его надо чуть позже листа крафта (но он всё равно будет нужен для формул)

Немного Excel (точнее google spreadsheet) и чуть-чуть про разработку игр Microsoft Excel, Google docs, Длиннопост

Тут в трёх столбцах проводятся проверки, какой тип материала используется в крафте, и выводится таблица с названиями из нужной таблицы.

Теперь непосредственно крафт (и основная магия)

Немного Excel (точнее google spreadsheet) и чуть-чуть про разработку игр Microsoft Excel, Google docs, Длиннопост

Верхняя строчка заполняется вручную, кроме названия, оно выбирается из таблицы крафта. К нему (в данном случае "Двуручный меч") будем обращаться часто.

Теперь по столбцам.

A) Если материал не "пустой" (сравнивается с пустой ячейкой), то, если нужная строчка из таблицы крафта не пустая (хотя, возможно, проверка не нужна), из таблицы крафта выбирается строчка, начинающаяся с названия, которое мы выбрали, и выбирается столбец с нужным нам названием (первое, второе или третье). Если нужна формула, то вот - =if(B2=B90,"Не используется", if(VLOOKUP(B1,Recipes!A1:N46,1,false)>0, VLOOKUP(B1,Recipes!A1:N46,12,false))). Различия в формулах только в сдвиге для последнего поиска (в данной формуле - 12, строками ниже - 13 и 14).

B) Банально выбирается тип материала, используемый для выбранного рецепта, условия чуть проще предыдущего - =if(VLOOKUP(B1,Recipes!A1:H46,1,false)>0, VLOOKUP(B1,Recipes!A1:H46,3,false)), различия опять же только в сдвигах по столбцам.

C) Необходимо для каждого рецепта выбирать свои материалы. Поэтому ставим "Data validation" по тому листу, который мы сделали чуть выше, с 3 столбцами с названиями материалов. Так как лист динамически обновляется, то выбор для каждого рецепта по материалам будет свой.

Немного Excel (точнее google spreadsheet) и чуть-чуть про разработку игр Microsoft Excel, Google docs, Длиннопост

D) Тут всё просто - человеческий ввод количества материала, используемого в крафте

E-J) Ищем по таблицам материалов нужные характеристики и домножаем на "количество материала". Небольшая магия в формуле - INDIRECT(CONCATENATE приводит к тому, что поиск для VLOOKUP будет производиться по непрямому адресу, по той таблице, материал для которого у нас выбран.

=VLOOKUP($C3,INDIRECT(CONCATENATE($B3,"!",ADDRESS(2,1))):INDIRECT(CONCATENATE($B3,"!",ADDRESS(999,13))),2,false)*$D3


ну и финальная часть - итоговые характеристики.

Немного Excel (точнее google spreadsheet) и чуть-чуть про разработку игр Microsoft Excel, Google docs, Длиннопост

Для расчёта кубиков используется дополнительная ячейка с формулой =if(B10="1d4",4, if(B10="1d6",6, if(B10="1d8",8, if(B10="1d10",10, if(B10="1d12",12, if(B10="1d20",20, if(B10="1d100",100,0))))))), в которой заменяем "человеческий вид" кубика (1d4 в данном случае) на численный. Урон подсчитывается сложением построчных умножений "урона материала" на "коэффициент пересчёта". Аналогично для прочности и остального.


Кажется, всё рассказал, что обещал :)

(человеческий язык для меня сложен/неадекватен)

Сама таблица (возможно, частично нерабочая - давно не проверял на правильность, мог что-то изменить)