О математике в геймдеве: пара мыслей + разбор задачки
В университете меня грузили кучей математики: матан, линал, ангем, теорвер, дисмат, комбинаторика, теория игр..
И у большинства моих одногруппников возникал стандартный вопрос: а надо ли оно нам?
Прошло.. мм.. 7 лет, я работаю геймдизайнером.
И почти на каждом собеседовании или в тестовом задании меня спрашивают про математику.
Вот пример задачи, которую меня попросили решить недавно:
В пошаговом бою сражаются Голиаф и Давиды.
У Голиафа 1000 очков здоровья, за один раунд он может ударить одного Давида и нанести 1 единицу урона.
У каждого Давида 1 очко здоровья, и за раунд каждый из них может нанести 1 единицу урона Голиафу.
Какое минимальное число Давидов, Х, необходимо для того, чтобы победить Голиафа?
В комментариях я скину решение, но не лишайте себя удовольствия дойти до ответа самостоятельно)
Итак, если вы это сделали (или подглядели решение), вы можете увидеть, что задача решается даже без знания математики, просто логически.
Я не буду называть размер ЗП по той вакансии, для которой эта задача давалась :)
Но, в общем, не мало - для задачи, которую может решить 9-классник.
У меня есть много знакомых геймдизайнеров, и ещё больше - программистов.
Казалось бы, куда без математики?
Однако, на поверку оказывается, что её.. никто не использует.
Все, конечно, при случае могут поумничать на брейнштормах, но по факту: Гугл, Эксель и способность быстро разобраться в незнакомой или забытой теме.
Расчёт физического движка? Написание шейдеров? Внутриигровая экономика?
В реальности всё сильно проще)
Жалею ли я, что слакал на вышмате в ВУЗе? Да, пожалуй.
Повлияло ли это значительно на мою работу? Да не особо.
Надеюсь, кому-нибудь это было интересно)
Для геймдиза (да и для большинства программистов) полезен теовер, матстатистика и отчасти дискретка. Ну и алгебра с геометрией уровня старших классов. Матан, функан и прочие хитрые разделы математики используются в геймдеве примерно никогда.
А вот решение, когда заложить это фундамент, может быть роковым — заранее или в момент принятия задачи.
Как раз изучение математики и тренирует эти возможности.
Помню в Game Maker делал свои танчики, и захотел сделать, чтобы башня поворачивалась со строго определенной скорость по наименьшей дуге за мышкой. И столкнулся с тем, что переменные объектов отвечающие за угол поворота (sprite_angle) спрайта (и направления движения объекта; direction) всегда меньше чем 360. Сидел, додумывался до формулы, т.к. как вбивать в гугол не знаю и по сей день.
Кому интересно вот условия:
Красный пунктир - 0 градусов
0 градусов + 45 = 45 градусов
0 градусов - 45 = 315 градусов
Вам всегда известна позиция башни (x,y) и позиция курсора (x,y)
Задача:
Найти формулу, которая по исходным данным позиции башни и позиции курсора выдает:
-1, если башня будет смотреть в точку курсора быстрее, при вращении против часовой стрелки
1, если башня будет смотреть в точку курсора быстрее, при вращении по часовой стрелки
Нельзя использовать ветвления.
Hint: В формуле фигурировал косинус.
p/s/ Ответ давно покоится в мире погибших хардов.