Искусственный Интеллект. Часть первая

Сегодня я хочу затронуть достаточно интересную и объемную тему ИИ в играх. Я думаю, что каждый, кто хотя бы раз пытался написать свою игру, или даже просто интересовался, как устроены игры, обязательно задумывался: как же монстры мыслят!?

Итак, с чего бы начать-то!? Искусственный Интеллект — это достаточно интересная штука! Представьте только, вы придумали смешного монстра, пусть это будет гоблин с дубиной. Он очень не любит пещерных человечков, потому что они воруют у него вкусные ягоды, но помимо пещерных человечков он ужасно боится грибов мутантов и не умеет прыгать, вот ему обидно, наверное. Зато у него есть дубина, которой он может расшибать большие булыжники.. эмм, вы наверное уже вспомнили голубого гоблина из игры Грибник? :) В общем, монстр с такими умениями выглядит достаточно интересно, хотя бы потому, что у него есть уникальные особенности, которые делают его не просто монстром, а настоящим персонажем, который живет своей жизнью в игровом мире. Но в большинстве игр умения монстров сводятся к ожиданию героя с последующими попытками съесть его. И тут стоит отметить, что даже базовые возможности врагов у некоторых разработчиков вызывают сложности в реализации.

Базовые мысли врагов

Предположим, что у нас есть враг, пусть это будет зомби, ведь его поведение это и есть базовое поведение для всех врагов: бродит по уровню, если видит героя, то преследует, атакует. Какие мысли у вас возникают в первую очередь, чтобы запрограммировать его действия? Правильно! У нас получается три состояния: idle, pursuit и attack. Пишем код:

public function update():void
{
  if (seeEnemy() && canAttack())
  {
    doAttack();
  }
  else if (seeEnemy() && !canAttack()) 
  {
    doPursuit();
  }
  else if (!seeEnemy())
  {
    doIdle();
  }
}

Вот он мозг какой! Все просто и понятно. Конечно, содержимое методов я упускаю, так как это все условность. Но давайте поместим монстра с таким "мозгом" на поле действий: монстр видит врага и может атаковать — он атакует, если монстр видит врага, но не может атаковать (враг слишком далеко от него), то он пытается его преследовать. Ой, а если преследуемая цель скрылась за углом, это что получается, что монстр сразу потеряет к ней интерес и будет бездействовать как ни в чем не бывало? Скукота, а не монстр. Давайте добавим таймер тревоги в течение которого монстр будет пытаться преследовать игрока, даже если он скрылся из виду.

var _isAlert:Boolean;
var _alertInterval:int;

public function update():void
{
  if (seeEnemy() && canAttack())
  {
    doAttack();
  }
  else if (seeEnemy() && !canAttack()) 
  {
    doPursuit();
     _isAlert = true;
    _alertInterval = 100;
  }
  else if (!seeEnemy() && _isAlert)
  {
    doPursuit();
    _alertInterval--;
    if (_alertInterval <= 0)
    {
      _isAlert = false;
    }
  }
  else if (!seeEnemy())
  {
    doIdle();
  }
}

Ну вот, теперь монстр будет преследовать игрока еще некоторое время, даже если тот скрылся за углом. И возможно для зомби этого будет даже достаточно. А если это более разумный монстр, у которого есть огнестрельное оружие, который может атаковать в рукопашную, ломая предметы, и перепрыгивать ямы? И вот тут уже приходит понимание того, что приведенный пример — это не мозг, а лишь рефлексы для пушечного мяса. Для настоящего монстра нужен не просто мозг, а настоящий командный центр, который на основе игровой обстановки должен принимать верные и интересные решения, и тогда игрок уже не заскучает.

Командный центр или супермозг!

Давайте для начала пофантазируем: представьте себе, что вы робот. Вы стоите себе в комнате и ваша основная задача уничтожать все живое, что заползет в комнату. Ну, и конечно, долго ждать не надо, что-то живое заползает, первым делом получаем обстановку: вижу живое (флаг тревоги), атаковать не могу (далеко), могу идти, могу стоять. На основе полученной обстановки принимаем решение, переключаем свое состояние с «ожидание» в «движение» и движемся к цели. Живое на то оно и живое — не будет ждать, пока его замочат, и прячется в ящик в противоположном углу комнаты. Преследуя цель, мы теряем её из виду, что делать? Получаем новую обстановку: цели не вижу (но флаг тревоги), последний раз цель была у ящика (за ящиком), могу идти, могу стоять. Ну раз режим тревоги, идем туда, где последний раз была цель. Подходим к ящику и получаем новую обстановку: цели не вижу (но флаг тревоги), препятствие, могу разрушить, могу стоять. Принимаем решение: если тревога и припятствие и могу разрушить — ломаем ящик. Получаем новую обстановку: вижу живое, могу атаковать, могу идти, могу стоять. Принимаем решение: атаковать цель. Ура! Слизняк повержен в неравном бою с супермозгом! :)

Итак, какие выводы из этого наглядного примера мы можем сделать?

  1. У нас есть текущее состояние, в котором мы находимся: стою, иду, атакую.
  2. Для каждого состояния у нас есть набор действий, например, для состояния иду: переключить анимацию в режим ходьбы (одноразовое действие и включить мотор для колеса/ног), отслеживать достижения определенной точки (постоянное действие). При достижении цели набор действий будет считаться выполненным.
  3. Так же у нас есть условия, на основе которых принимается решение о том, в какое состояние переключиться и какой набор действий выполнить. Условия генерируются обычно на основе окружающей обстановки, что робот видит или чувствует сенсорами. Например: вижу врага, могу атаковать, могу стоять, могу идти, могу сломать, препятствие.
  4. Кроме всего этого для некоторых наборов действий должны быть прерывания — это те же условия, которые генерируются роботом на основе окружающей обстановки, но позволяющие экстренно завершить текущий набор действий. Например, робот получил координаты точки, в которую ему нужно попасть, успешно переключился в состояние "двигаться" и выполняет соотвествующий этому состоянию набор действий, но тут внезапно на его пути возникает препятствие или вражеский юнит — значит текущий набор действий должен быть экстренно прерван, и на основе сложившейся обстановки принято новое решение.

 

В итоге, выглядит все немного заумно, но при этом весьма доступно, правда? Давайте посмотрим, как это может выглядить с точки зрения условного кода:

Состояния:

const STATE_STAND:uint = 1;
const STATE_WALK:uint = 2;
const STATE_ATTACK:uint = 3;

Условия:

const CONDITION_SEE_ENEMY:uint = 1;
const CONDITION_CAN_ATTACK:uint = 2;
const CONDITION_CAN_STAND:uint = 3;
const CONDITION_CAN_WALK:uint = 4;
const CONDITION_CAN_OBSTACLE:uint = 5;

Наборы действий:

// Список всех наборов действий
var _schedules:Object; 
// Текущий набор действий
var _currentSchedule:Schedule;

// Инициализация набора действий ожидания
var stand:Schedule = new Schedule();
// Добавляем прерывания
stand.addFewInterrupts( [ CONDITION_SEE_ENEMY, CONDITION_CAN_ATTACK ] );
// Добавляем задачи
stand.addFewTasks( [ onInitStand, onStand ] );

// Инициализация набора действий ходьбы
var walk:Schedule = new Schedule();
// Добавляем прерывания
walk.addFewInterrupts( [ CONDITION_OBSTACLE, CONDITION_CAN_ATTACK ] );
// Добавляем задачи
walk.addFewTasks( [ onInitWalk, onWalk ] )

// Инициализация набора действий для атаки
var attack:Schedule = new Schedule();
attack.addFewTasks( [ onInitAttack, onAttack ] );

// Добавляем все наборы действий в список
_schedules = { stand:stand, walk:walk, attack:attack };

// Устанавливаем текущее действие
_currentSchedule = _schedules.stand;

Итак, что у нас получилось: первым делом мы задали константы, символизирующие состояния и условия, потом инициализировали наборы действий. Не пугайтесь, класс Schedule — это примитивный менеджер задач, выполняющий переданные в него методы до тех пор, пока все они не вернут true, или не сработает условие на прерывание. Его устройство вы можете посмотреть в исходниках примера. После инициализации наборов действий мы их сохраняем в одном месте и устанавливаем текущее действие по умолчанию. Инициализация набора действий обычно выполняется один раз при создании юнита. Теперь метод update() у нас может выглядить следующим образом:

public function update():void
{
  _thinkInterval--;
  // Настало время подумать
  if (_thinkInterval <= 0)
  {
    // Получаем обстановку
    var conditions:Array = getConditions();

    // Если текущий набор действий завершен
    if (_currentSchedule.isCompleted(conditions))
    {
      // Выбираем новый набор действий
      selectNewSchedule(conditions);
    }
    _thinkInterval = 5;
  }

  // Выполняем текущий набор действий
  if (_currentSchedule != null)
  {
    _currentSchedule.update();
  }
}

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

  1. Все задания в списке tasks выполнены.
  2. Содержимое переданного массива условий (conditions) совпало с установленными прерываниями (interrupts).В общем, если текущий набор действий завершился, либо был прерван, значит нужно выбрать новый набор действий на основе все тех же условий.

Далее в методе update() выполняется процессинг текущего набора действий. Надеюсь, пока все понятно, далее перейдем пожалуй к самому интересному — это собственно выбор нового набора действий на основе условий. Метод selectNewSchedule():

public function selectNewSchedule(conditions:Array):void
{
  switch (_state)
  {
    case STATE_STAND :
      // Если вижу врага и могу атаковать
      if (conditions.indexOf(CONDITION_SEE_ENEMY) &&
        conditions.indexOf(CONDITION_CAN_ATTACK))
      {
        _state = STATE_ATTACK;
        _currentSchedule = _schedules.attack;
      }
      // Если вижу врага и нет препятствий
      else if (conditions.indexOf(CONDITION_SEE_ENEMY) &&
        !conditions.indexOf(CONDITION_OBSTACLE))
      {
          _state = STATE_WALK;
        _currentSchedule = _schedules.walk;
      }
      // Если вижу врага, есть препятствие и могу его сломать
        else if (conditions.indexOf(CONDITION_SEE_ENEMY) &&
        conditions.indexOf(CONDITION_OBSTACLE) &&
        conditions.indexOf(CONDITION_CAN_BREAK))
      {
        _state = STATE_ATTACK;
        _currentSchedule = _schedules.attack;
      }
      // Если нет препятствия и могу идти
        else if (conditions.indexOf(CONDITION_CAN_WALK) &&
        !conditions.indexOf(CONDITION_OBSTACLE))
      {
        _state = STATE_WALK;
        _currentSchedule = _schedules.walk;
      }
      // Могу стоять
      else if (conditions.indexOf(CONDITION_CAN_STAND))
      {
        _state = STATE_STAND;
        _currentSchedule = _schedules.stand;
      }
   break;
    
   /* Для остальных действий аналогичный список условий для принятия решения, но их отличие может быть в последовательности условий, то есть в приоритетности действий. */
   case STATE_WALK :
     /* Например, если в состоянии ожидания более приоритетным является состояние перемещения (предпоследнее условие), то в состоянии перемещения для монстра будет более приоритетное состояние ожидания. Таким образом действия ходьбы и ожидания могут сменять друг-друга, пока монстр не видит ничего подозрительного. */
      //...
    break;

    case STATE_ATTACK :
      //...
    break;
  }
}

Вот тут то и спрятался командный центр, который принимает решение о том, какой набор действий использовать. Выглядит все достаточно читаемо и просто, правда? Легко отлаживать и расширять возможности ИИ. Для полной ясности осталось только разобраться с генерацией условий и выполнением непосредственно самих действий. Рассмотрим метод getConditions():

public function getConditions():Array /* of int */
{
  // Новый список условий
  var conditions:Array = new Array();

  // Выполяем визуальную проверку
  getVisionConditions(conditions);

  // Выполняем сенсорную проверку
  getSenseConditions(conditions);

  // Ходить и стоять можно почти всегда
  conditions.push(CONDITION_CAN_STAND);
  conditions.push(CONDITION_CAN_WALK);
  
  // Возвращаем список полученных условий
  return conditions;
}

Тут мы первым делом проверяем объекты, используя зрение. Например, получаем все игровые объекты вокруг монстра, выбираем из них вражеские объекты и строим для каждого из них луч (линия), проверяем пересечение луча со стенами и другими объектами. Если луч не пересекается ни с чем, значит вражеская единица в поле зрения монстра и мы добавляем соответсвующее условие: conditions.push(CONDITION_SEE_ENEMY);

Вторым делом мы проверяем объекты, используя сенсоры — это те объекты, которые находятся непосредственно перед монстром или вовсе касаются его. Здесь мы проверяем наличие препятствий и получаем условие CONDITION_OBSTACLE и CONDITION_CAN_BREAK если препятствие разрушаемое. А так же условие CONDITION_CAN_ATTACK если вражеская единица в непосредственной близости.

Я надеюсь, что тут тоже все достаточно просто и понятно. Ну и дело осталось за малым — это разобраться с командными методами. Хотя они уже не имеют практически никакого отношения к ИИ. Рассмотрим методы onInitStand(), onStand():

private function onInitStand():Boolean
{
  // Переключаем анимацию
  switchAnimation("stand");

  // Сбрасываем скорость
  speed.set(0, 0);

  // Устанавливаем время бездействия монстра до принятия следующего решения
  _interval = Math.random() * 100 + 50;

  // Метод инициализации выполнен, возвращаем true чтобы менеджер задач перешел к следующей задаче, а именно к onStand
  return true;
}

private function onStand():Boolean
{
  _interval--;
  if (_interval <= 0)
  {
    // Время вышло, пора что-нибудь еще сделать
    return true;
  }

  return false;
}

Набор действий для состояния ожидания состоит всего из двух действий: первое действие инициализации состояние выполняется один раз, потому что сразу же возвращает true, второе действие выполняется до тех пор, пока не выйдет заданный интервал или не сработает прерывание. Рассмотрим теперь действия для движения:

private function onInitWalk():Boolean
{
  // Переключаем анимацию
  switchAnimation("walk");

  var target:Point = new Point();

  // Вражеская единица для преследования
  if (_enemyTarget != null)
  {
    target.x = _enemyTarget.x;
    target.y = _enemyTarget.y;
  }
  else
  // Иначе просто куда-нибудь сходим
  {
    target.x = this.x + Math.random() * 20 - 10;
    target.y = this.y + Math.random() * 20 - 10;
  }
  
  // Здесь рассчитываем угол относительно цели и устанавливаем векторную скорость.
  speed.set(1, 0);
  
  // Метод инициализации выполнен, возвращаем true чтобы менеджер задач перешел к следующей задаче, а именно к onWalk
  return true;
}

private function onWalk():Boolean
{
  this.x += speed.x;
  this.y += speed.y;

  // Условное условие на достижение цели :)
  if (this.x == target.x && this.y == target.y)
  {
    // Ура, мы это сделали! 
     return true;
  }

  return false;
}

Ну что, методы onInitAttack() и onAttack() наверное уже нет особого смысла рассматривать так, там будет все примерно тоже самое :) Лучше один раз увидеть это на реальном примере:

Можно кликать мышкой чтобы создать нового боевого бота случайного цвета :)

Ссылка на исходники — CS4, *.zip, 1.47Мб.

Недостатки

Да, и у этого подхода к созданию ИИ, оказывается, есть свои недостатки. Предположим мы сейчас запрограммировали бота, который воюет в ближнем бою, но вам вдруг захотелось сделать еще бота, который может стрелять. Что первым делом приходит на ум? Правильно, скопировать первого бота и быстренько внести пару изменений и добавить новое действие — логично, ведь теперь можно легко и просто расширять и дополнять ИИ. А если потом еще захотелось сделать бота, который бы смог перепрыгивать препятствия - опять копи-паст и несколько небольших изменений в коде! Супер! Но потом выясняется, что изначальный бот имел баг в наборе действий движения, и в итоге у нас три бота с одним багом, который у всех нужно править и всех тестировать. И это уже не порядок. К тому же получается много повторяющегося кода... ай-яй-яй. Три класса юнитов с почти одинаковым кодом.

Но этот недостаток легко устранить, применив паттерн стратегия. Или, проще говоря, сделать ИИ конструктор, отделив от юнитов их мозг и действия. Но как это сделать красиво я расскажу во второй части статьи. А в третьей части статьи я расскажу как используя такой подход можно сделать управление.

Спасибы!

В первую очередь хочу выразить огромную благодарность камраду RaymondGames, который нашел информацию о таком вот методе построения ИИ с использованием условий, наборов действий и т.п. и написал хоть и сумбурную, но весьма доступную статью на FlashGameBlogs. О программировании Shedule Based AI на движке Source от Valve (собственно с которого все это и пошло), вы можете почитать здесь, но понимание затруднено тем что там идет погружение в специфику движка.


Индикаторы: Action Script 3, Уроки
Постоянная ссылка

 

 

Отличная статья, как раз начал делать для одной игрушки ИИ, стейтовые машины уже давно надоело писать - ближе к окончанию проекта, где они используются, в код ИИ смотреть страшно, не говоря уже о мучениях при правках - то мертвые юниты вставать начинают, то своих атакуют - зомби-апокалипсис :) . Всегда нравилось как в первом Half-Life монстры начинали локальные войны - теперь становится ясно как это все красиво сделано. Такой подход, кстати, позволят легко связать уровень игровой логики с сетевым взаимодействием, особенно для игрушки, подобной предоставленному примеру - достаточно поубирать всякие рандомные действия, немного уменьшить частоту обновления игровой логики(но не анимации) - и клиенту останется только отправлять сообщения вида "юнит типа MyUnit создан в точке х, у". Касательно паттернов - ты говоришь о создании набора типовых функций-действий(или классов) с логикой определеннного действия/задачи - Tasks в терминологии Valve? Похожий подход использовал когда тестировал Lua и PascalScript - логика поведения юнита была вынесена во внешний скрипт, который можно было подключить к любому юниту.

Cпасибо за статью, с нетерпением жду продолжения :)

C4
23 Марта 2012
— 04:35
#

Интересно было бы спроектировать это максимально гибко, чтобы можно бы компоновать экземпляр AI разными типами поведения. Например:

var enemy:Enemy = new FlyingTurret();
var brain:AI = new AI([AI_BASIC_ENEMY, AI_AGRESSIVE, AI_FLYING, AI_DISTANT]);
enemy.put_Brain(brain);

red-agent
23 Марта 2012
— 08:17
#

Отличная статья, в превью просто влюбился)

ждем с нетерпением продолжения

o_OKazan
23 Марта 2012
— 12:44
#

Очень ждем продолжения, спасибо!

gltrinix
23 Марта 2012
— 13:40
#

Отличная статья! Великолепный пример :)

Иван
23 Марта 2012
— 14:36
#

Арт просто супер, как всегда =)

whilesocold
23 Марта 2012
— 15:14
#

Спасибо за статью. Как всегда очень интересно и познавательно.

:)
23 Марта 2012
— 15:17
#

Не устану пиарить книгу Programming Game AI By Example. Там есть отличный подход к проектированию ИИ - GADB.

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

Используем все что там описано сейчас в большом проекте, с кучей NPC, укладывается отлично.

Советую почитать :).

James Nouk
23 Марта 2012
— 18:26
#

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

aNI[526]
23 Марта 2012
— 19:37
#

@C4, паттерн будет использоваться для отделения логики принятия решения и непосредственно всех выполняемых действий от сущности юнита, что упрощает разработку, сокращается количество повторяющегося кода ну и добавляет гибкости для добавления новых игровых юнитов в игру :)

Ant.Karlov
23 Марта 2012
— 20:00
#

@red-agent, о гибкости создания AI я подробно расскажу в следующей статье. Действия и логика принятия решений, а так же сами сущности юнитов будут максимально разделены и не будут знать о существовании друг-друга, таким образом одни и теже действия можно будет применять к разным типам юнитов, или даже вовсе использовать в других проектах.

Ant.Karlov
23 Марта 2012
— 20:04
#

@James Nouk, спасибо за рекомендацию книжки! Эта книга существует на русском языке? А то мой английский не достаточно хорош для чтения таких книжек :)

Ant.Karlov
23 Марта 2012
— 20:06
#

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

Dmitry2705
23 Марта 2012
— 22:21
#

@Ant.Karlov, Это понятно, мне интересно как это реализовать максимально гибко :) Постарался разобрать примеры...IMHO, слабое место этой системы - выбор новой задачи(которая Schedule). По сути - та же стейтовая машина получается, с кучей if-then-else. Можно вытянуть этот функционал в отдельный класс, вместе с формированием мнений на основе методов юнита, под-задачи также в отдельные классы - я так понимаю, об этом ты и говоришь. Плюс некий сборщик моделей поведения - чтобы можно было переключатся между ними(для установки сложности бота, или стиля поведения: агресор, защитник, трус, и т.д. - в зависимости от области применения). Уверен, у тебя есть интересные идеи :) .

C4
24 Марта 2012
— 05:57
#

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

Только у меня получилось так, что вся логика ИИ в
родительском классе NPC, от которого я порождаю всех видов монстров, и этот класс получился очень большой.

С удовольствием почитаю следующие статьи :)

Orbit
24 Марта 2012
— 09:23
#

@C4, да, под паттерном стратегия как раз подразумевается отделение действий, от системы принятия решений, а так же от самой сущности юнита, что позволяет одни и теже действия использовать для разных юнитов. С таким подходом получается максимальный реюз кода :)

Я не специалист в области ИИ и не очень понимаю почему стейт машина считается слабым звеном. Возможно я не достаточно хорошо изучал эту тему, но принятие решение все равно же нужно каким-то образом описывать? Стейт машина как раз и позволяет определять приоритетность действий в зависимости от текущего состояния. То есть фактически мы пишем некий скрипт в котором в зависимости от условий выбираем набор действий. На мой взгляд, это наиболее оптимальный способ для реализации ИИ в небольших играх.

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

Я ознакомился с книгой Programming Game AI By Example — книга шикарная, и затрагивает действительно интересные аспекты проектирования ИИ. Но блииин! На английском мне её не осилить :)

Ant.Karlov
24 Марта 2012
— 22:58
#

@Orbit, это конечно логично помещать основные методы в родительский класс. А если понадобится расширить логику принятия решений, или для разных типов юнитов добавить какие-то уникальные атаки и способы перемещения? В таких случаях лучше применять уже не наследование, а композицию ;)

Ant.Karlov
24 Марта 2012
— 23:02
#

В надежде найти перевод книги "Programming Game AI By Example", я случайно наткнулся на вольный перевод нескольких глав из другой книги, про управление поведениями. Правда это больше имеет отношение к математики чем к ИИ, но все равно интересно и познавательно:

Управление поведениями (Steering behaviors). Часть 1
Часть 2
Часть 3

Ant.Karlov
24 Марта 2012
— 23:08
#

@Ant.Karlov

К сожалению, как вы уже и обнаружили, книги на русском нет :).

Я тоже ее медленно и мучительно прочитал, потом просто портировал из исходников структуру целей, и управление ими на as3/unity, и нечеткую логику (хотя нечеткая логика есть в реализациях и на as3, гораздо более заточенная).

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

James Nouk
25 Марта 2012
— 13:02
#

Возможно Я что то не так понял про книу по ИИ, но есть вот такой вариант: Алекс Дж. Шампандар, Искусственный интеллект в компьютерных играх. Как обучить виртуальные персонажи реагировать на внешние воздействия

http://www.ozon.ru/context/detail/id/3384783/

Garibaldus
26 Марта 2012
— 08:26
#

Антон, а исходничков камрада RaymondGames нет, которые он прикладывал к статье? Там ссылка из статьи уже не работает

Summer
26 Марта 2012
— 08:57
#

Очень интересная статья, спасибо большое! Буду ждать второй части) Возможно исполнится мечта детства, создать мини игруху)

pidlisnyit
26 Марта 2012
— 17:32
#

@Summer, есть! Надо же, они даже у меня сохранились. А некоторое время назад искал и не нашел. И все-таки Spotlight в Mac великая вещь, архив с исходниками нашелся на компьютере по нику "RaymondGames" :)

Ссылка на пример от RaymondGames...

Ant.Karlov
27 Марта 2012
— 00:58
#

Благодарю, Антон

Summer
29 Марта 2012
— 00:59
#

Классная статья получилась)

MXPain
29 Марта 2012
— 06:48
#

Антон давно читаю твой блог. Статьи получаются замечательными. Но.
Насчёт уроков. Мог бы ты выпускать видео уроки. С чего начать как продолжать. ну для самых самых новичков.
Вот конкретно я. мне 16 лет. и с 10 я занимаюсь программированием. начинал с Basic, потом Pascal ABC. Сейчас я учу java, попутно изучаю GML - они похожи. Так вот, я работал в 5 средах разработки, но никогда не пробовал Flash. GameMaker, тоже классно, но игры разработанные на нём, невозможно продать. То же самое и с Tululoo - разработка HTML 5 игр. Поэтому я считаю, что стоит начать Flash - разбираться в нём. Но во Flash я никогда не работал - и даже не видел работы в нём. Мне будет трудновато.
Поэтому прошу - попробуй выпускать видео уроки для Чайников. Может в будущем пересечёмся на каком нибудь из Flash GAMM.

game review
29 Марта 2012
— 12:42
#

Уже создал несколько игр, которые действительно многим нравятся, Но они написаны на java в среде разработки Tululo. И им нет движения(((. Да и заработать на них не получится. Сам я программист, но рисовать не умею, к счастью мне повезло с товарищем, у которого талант от его дедушки. Он мне рисует графику и анимирует ёё. Я думаю рано или поздно, мы всё равно выйдем на Flash. Но хотелось бы начать сейчас. А что бы было проще, прошу тебя выпускать такие уроки.

game review
29 Марта 2012
— 12:49
#

смотрю я на темп раннего развития нынешней молодёжи и думаю, вот сыну почти 2 года... к 6-ти наверное и игру первую сделает :)

"Вот конкретно я. мне 16 лет. и с 10 я занимаюсь программированием" я вот в шоке лично! в 16 (я уже молчу о 10ти) я думал о чём угодно, но не о ремесле) Если то, что ты пишешь == true, то респект тебе!

Komizart
29 Марта 2012
— 15:37
#

@Komizart:
Вы смотрите на все со своей колокольни. Темп развития ничуть не изменился (даже ухудшился), ваши ровесники начинавшие с первых персоналок и ZX-Spectrum развивались в своем ремесле намного быстрее и знания их были более качественными. Но такие личности были редкостью.

@game review:
Есть у меня для вас несколько советов, отнеситесь к ним серьезно, если не хотите превратиться в 30 летнего быдлокодера. Начните изучать программирование на C++, найдите нужные книги (именно книги, а не всякую хрень вроде статей, могу посоветовать "Полный справочник по С++" Герберта Шилдта), установите Visual Studio или Visual C++, найдите простейший движочек под Си для работы с графикой и минимальной периферией (клавиатура, мышь), могу посоветовать HGE или Irrlicht. Разберитесь как устроены программы под Windows, как система взаимодействует с приложением (окна, обработчики событий). Изучите основные динамические структуры хранения данных (стек, списки, деревья). Разберитесь с хранением данных на носителях (простенькие программы вроде той что прячет текстовые данные в пикселях изображения или читает данные с COM порта, могут стать настоящим откровением для любителей называть себя программистами).
Начните свой первый серьезный проект - графический редактор (паинт с блек-джеком и шлюхами вполне сойдет). Потом займитесь криптографией, реализуйте несколько алгоритмов шифрования (тот же DES или RSA сойдут). Потом напишите простое клиент-серверное приложение (попробуйте библиотеку http://enet.bespin.org/).
Все это не принесет вам денег, но полученные знания и опыт могут сделать из вас настоящего, сильного программиста, для которого не будет разницы, на какой платформе работать и на каком языке программировать.

К моменту, когда закончите школу, смело ищите учебное заведение с кафедрой высшей математики, кстати спустя 5 лет вы так и не станете математиком и не надейтесь (по этой причине не стоит поступать на МехМат МГУ или на профильный факультет СПбГУ, вмеесто этого выберите лучший областной технический вуз, готовящий востребованных технических специалистов, например энергетиков, у них всегда есть кафедры ВМ). Математическое образование внесет неоценимый вклад в правильное понимание и осмысление задач с которыми вам как программисту придется сталкиваться каждый день, а в качестве бонуса вы научитесь эти задачи легко и лаконично решать.
Математика - это язык тех, кто создал "Программирование".

Много букв, кто дочитал тот молодец. :)

BuxomBerry
29 Марта 2012
— 17:36
#

Не надо слушать BuxomBerry!
Он походу под кайфом, и пишет полную фигню.

1)Получать ради программирования высшее математическое образование - бред. Лет 30 назад может это и имело смысл.

2)В 16 лет планировать на 15 лет вперед - смешно. Я в детстве хотел стать программистом, а когда поработал, то мне не понравилось. Сейчас программирование это мое хобби.

3)Человек четко сформулировал свое желание - он хочет писать игру + по возможности на ней заработать. Самай простой способ реализации - писать игру на AS3. При чем тут C++ и прочее. Я пробовал писать под C++ на HGE - Flash в разы проще.

2game review ты бы прочитал книжку про AS3, например "Колин Мук - ActionScript 3.0 для Flash", знания в книгах структурированны и усваиваются полнее, чем из видео.

orbit
29 Марта 2012
— 21:19
#

Komizart - Спасибо за респект), это действительно правда.
BuxomBerry - Да я пожалуй соглашусь с orbit"ом".
Математика мне не даётся, наверно потому что я её и не учил никогда. А вот языки программирования идут хорошо, даже замечательно. Что сказать относительно C#, C и С++ - на данный момент в основном используются, как языки написания офисных и т.п. программ.
Меня интересуют именно КАЗУАЛЬНЫЕ проекты. Так как по ходу светит мне и моему товарищу, инди команда.
Поэтому я и прошу помочь с началами во flash. Какой именно использовать и т.п.Как в нём работать. и далее и далее. Мы составляем идею он рисует графику, я пишу код и вуаля. так было и так будет.
Я хочу стать ИНДИ РАЗРАБОТЧИКОМ КАЗУАЛЬНЫХ ИГР. Разговора о чём то более серьёзном, чем SuperMeatboy и быть не может. Там другое время создания, да и пишут то целые компании. Всё решено. Я учусь в техникуме на программиста, а товарищ в колледже на дизайнера.
Так вот я и прошу Антона выпускать видео уроки для чайников.
И да может кто знает, а ещё лучше пробовал продавать игры, созданные на GM, и игры созданные на HTML5. Может и на них получится зарабатывать.

game review
29 Марта 2012
— 23:23
#

orbit - я понимаю что книги дают возможность усвоить больший объём информации, но.
Я вообще пока даже не пробовал работать с flash. А он там ещё и разный оказывается бывает MXы всякие и т.д. Потом, это изучение языка в книгах - само собой. Но ведь во флеш есть кадры всякие, и где код писать, в персонаже или отдельно нужно создавать управление. Или сразу и то и другое. И нужно ли писать в одном кадре или объединять в нескольких кадрах. вот что хотелось бы узнать и понять.

game review
29 Марта 2012
— 23:28
#

@orbit:
У вас есть высшее математическое образование? Если есть, то ваши слова меня удивляют. А если нету, то не нужно говорить о том, чего не знаете. Математика для программиста такой же инструмент, как паяльник для радиолюбителя.

Если он хочет создать игру, то почему он не возьмет Game Maker и не слепит на нем свою сраную поделку? Ах да, возможностей маловато (корованы грабить нельзя). У Flash конечно побольше возможностей то, особенно по сравнению с существующими движками на С++ (не забудьте уловить сарказм).

BuxomBerry
29 Марта 2012
— 23:43
#

@game review тогда тебе нужно вариться вот тут,
а не только у Антона на блоге( хотя может ты уже там ыы)
http://flashgamedev.ru/
http://flashgameblogs.ru/
ну и совсем азы тут http://easyflash.org/
и конечно http://www.google.com!!!

Komizart
30 Марта 2012
— 00:03
#

@game_review
Делаю FACEPALM, настоятельно рекомендую забыть все что я сказал и слушать кого хотите, но только не меня.

BuxomBerry
30 Марта 2012
— 00:26
#

BuxomBerry, не ну просто ты рассматриваешь это как технарь, а кто-то просто хочет делать игры

Komizart
30 Марта 2012
— 00:41
#

@Komizart, и как же их делать, не зная тех основ?

dizlv
30 Марта 2012
— 00:44
#

BuxomBerry - вы простите вообще программированием занимаетесь?
GM - возможностей достаточно просто игры созданные на нем не имеют будущей перспективы и их не получится продать и разместить как Flash игры. На GM создана куча и поверьте НЕ сраных поделок.
Матом тут ругаться нельзя да? НУ ладно.
Какая математика? зачем? логику развивать? какая там логика формулы выучить? что это?
dizlv - какие основы C++ - это прикол да? Да это разные совершенно вещи. Как говорит мой отец - всё познаётся в сравнении. Покажите мне браузерную игру на C, или динамичную мини игру на C. Что нету? А может покажете мне хоть одну игру на C в какой нить соц сети? Что опять нету? Айяйяй. . А ведь этот бизнес развивается и будет развиваться всегда. Людям нужны игры которые дают возможность отдохнуть или просто провести 10-15 минут ожидания чего либо с удовольствием.
Вы поймите что flash можно сравнить с веб программированием, а C - это серьёзные программные пакеты. Небо и земля - ЧУЕТЕ?
А ваш так называемый сарказм имеет большую часть правды. Нука скажите что может С а flash не может?

game review
30 Марта 2012
— 01:34
#

Komizart - снова выражаю благодарность. По ходу только вы и orbit меня поняли.

game review
30 Марта 2012
— 01:36
#

@game review, лучше не позорьтесь. Потому что вы действительно сами не понимаете, о чем говорите и пытаетесь еще что-то доказать программистам, а не скрипткиддсам.

Я не знаю, что за игры вы там клепаете, но, если там нет математики, то это полное дерьмо, скажу я вам.

Говоря про основы, я имел в виду математическую основу, алгоритмы.

С++ - действительно хороший инструмент. Задумайтесь, почему его используют ведущие разработчики ПО мира.

Так же советую поинтересоваться, на чем пишется серверная часть "браузерок".

Дальше подумайте, почему недовольны игроки оказуаливанием самой крупной ММО мира.

На счет "СЕРЬЕЗНЫХ ПРОГРАММНЫХ ПАКЕТОВ" - вообще детский лепет какой-то.

Про сарказм я тоже ничего не понял.

А на счет "может": напишите драйвера на флеше. Ну и попробуйте сравнить скорость выполнения программ.

Впрочем, это возраст. Уверен, если пойдете по правильному пути, вам будет стыдно за эту чушь, что вы тут понаписали.

dizlv
30 Марта 2012
— 01:48
#

Хмм не думаю что будет стыдно. Мы говорим на разных языках получается. Вы не поняли меня, я не понял вас.
Короче попытаюсь разложить всё по полочкам.
Я говорю про то что хочу программировать во flash, вы мне доказываете что С очень замечательный язык. Да клал я на С, я actionscript учить хочу про С вначале разговора не было.
Мне конкретно мне он нахрен не нужен. И пофигу на то что его используют мегасупер+100500 компании... Не собираюсь я спорить о нём. Объяснить почему? Потому что еса честно я его не учил. Я конечно понимаю что вы хотите меня выше куда то толкнуть, но я туда не хочу. Я не собираюсь в компании. Насчёт java, basic, pascal, html,php, GML - я бы еще поспорил. Но С простите не могу спорить тем более упорно, яж не баран и умею признавать ошибки.
КОРОЧЕ. Сойдёмся на том что пока я не готов для изучения сложных и высоких языков таких как С. Поэтому в свои 16 следующим для изучения будет flash. А вообще спасибо что поправили мозг и дали более правильных знаний.
Просто я хочу сказать что конкретно я хочу изучать flash поэтому наиболее правильно меня понял Komizart. И дал дельных советов спасибо ему за это. Надеюсь теперь я чётко объяснил свою позицию. И больше не буду делаться тролем и продолжать спор.
Да и Komizart. Насколько я понял вы тоже разработчик во flash? можно ваши данные icq например. Просто если будут возникать вопросы, что бы было к кому обратиться.

game review
30 Марта 2012
— 02:24
#

dizlv - я не пытался доказать). Я пытался наиболее правильно выразить свою позицию - но всё равно спасибо. Просто наверно я не хочу учить его так как не вижу своего будущего с языком С++. По крайней мере на данный момент.

game review
30 Марта 2012
— 02:28
#

Да и прошу прощения за порой грубые ответы.

game review
30 Марта 2012
— 02:32
#

@game review, видео уроков по флешу в Интернет полным полно (как платных, так и бесплатных), поэтому я этим заниматься не буду, извините :) Кстати, в книжных магазинах еще полно книжек именно по работе с Flash IDE. А вообще сама среда Flash не сильно сложная, и изучение расположения и предназначения различных кнопок может занять от силы неделю или две. Версия Flash IDE почти никак не влияет на язык AS2/AS3.

Версий Flash много, но Macromedia MX и т.п. — это все сильно устаревшие программы. Рекомендую вам работать не ниже чем Flash CS3 (последняя CS5.5).

Что касается кода в кадрах — это все удел AS2 на изучение которого я не советую вам тратить время. В AS3 тоже конечно можно писать код в кадрах, но это дурной тон (только дизайнеры могут позволить себе такое безобразие:)).

Ant.Karlov
30 Марта 2012
— 02:34
#

Что касается перепалки: взрослые дядьки славно по тролили школьника... :)

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

C++ мощный язык на котором написано большинство игр, начиная от AAA тайтлов, и заканчивая казуалками и инди играми. И то что он не годится для создания игр — это вы погорячились. Другое дело если он не интересен именно вам. И тут конечно BuxomBerry "рубанул с плеча" предложив его изучение :) Но это наверное его просто задело что game review в таком раннем возрасте называет себя программистом.

Ant.Karlov
30 Марта 2012
— 02:49
#

@game review
Некоторые говорят что "Колин Мук - ActionScript 3.0 для Flash" достаточно труден для освоения с нуля и предлагают читать "ActionScript 3.0 Cookbook" обе книги изданны и на русском. Еще если есть опыт написания каких-либо алгоритмов на других языках, от чтения этих книг можно и откозаться и просто использовать Help от самих Adobe. Он кстати тоже есть на русском, а где-то на просторах рунета есть и оффлайн версия.
Про кадры можно особо не заморачиваться, после освоения любой из этих книг вопросов остаться не должно.
Про математику BuxomBerry сказал верно, но я например усваивал (и продолжаю это делать) ее самостоятельно по мере необходимости.

Mufasa
30 Марта 2012
— 05:34
#

game review, возможно заинтересует такая штука как Unity3D - весьма интересная штука, есть видео уроки на русском. По началу может показаться громоздким, но как по мне так даже проще флеша, так как Юнити изначально заточен под создание игр (от браузерных до "сурьезных"). А самое главное программирование логики сводится именно к скриптописанию (писать можно на JavaScript, Boo и C#). И если освоил ActionScript то С# скрипты тоже освоишь. Разница в том что освоив синтаксис С# (порядка 200 страниц) в принципе сможешь и приложения под Windows писать. Да и знания полученные в результате освоения Unity3D в целом полезны если планируешь игры делать.
Я не агетирую, просто предлагаю =)

Garibaldus
30 Марта 2012
— 06:43
#

А для тех кто продвигает С++ для создания "крутых игр" могу сказать что игры делают не только программисты. Еще есть художники 2, 3D, гейм дизайнеры. сценаристы. композиторы и т.д.
И если Я художник который хочет выпустить собственную игру, или гейм дизайнер который хочет проверить игровую логику то кидаться с головой в ООП, шаблоны программирования и прочие страшные слова мне нет смысла.
Опять же про крупные проекты могу сказать что тот же CryEngine 3, позволяет писать игровую логику на Lua СКРИПТАХ, функциональность которых в свою очередь можно расширять за счет C++, но это возможность, а не необходимость.
Незачем стрелять из пушки по мухам

Garibaldus
30 Марта 2012
— 07:09
#

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

А твой сарказм говорит только о том, что ты не в теме.

При программирования игр математика нужна для:
1)3д графики (хотя сейчас есть простые фреймворки, но основы конечно лучше знать)
2)ИИ, хотя можно обойтись стейт-машиной как в статье
3)Поиска пути - ну есть же просто готовые алгоритмы, не обязательнро выдумывать свой
4)Часто нужны тригонометрия/матрицы сдвига/поворота, но это школьная программа, при необходимости осваивается за несколько часов
5)Физика, но это не математика :) опять же школьная программа
6)Умение решать линейные и квадратные уравнения - в школе этому учат
7)Алгоритм сортировки пузырьком - не бином ньютона однако :)

orbit
30 Марта 2012
— 09:28
#

P.S. BuxomBerry давай ссылки на свои крутые игры на С++, ты же наверное их целую пачку написал :)

orbit
30 Марта 2012
— 09:29
#

@Garibaldus:
Посмотрите как программисты обходятся без художников, дизайнеров и сценаристов вот здесь (ссылочки на видео в конце заметки):
http://habrahabr.ru/post/134865/

Для художника такой трюк - почти невыполнимая задача. Ему придется научиться описывать свои идеи языком компьютерных команд.

BuxomBerry
30 Марта 2012
— 09:34
#

@orbit:
Пять лет вас учили, а вы научились только какой-то херне которую можно вычитать в методичке для техников.

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

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

Вы ничему этому не научились, поэтому для вас нет разницы каким алгоритмом поиска пути пользоваться и самое плохое, что вы не способны обосновать корректность выбранного алгоритма в условиях конкретной задачи.

Такие как вы часто заявляют, что "волновой алгоритм" хуже или медленнее "алгоритма Дейкстры", при этом не понимая, что у этих алгоритмов разные условия применения и их эффективность напрямую зависит от этих условий.

BuxomBerry
30 Марта 2012
— 10:11
#

Влезаю в переполох....
...закончил ИАТЭ НИЯУ МИФИ, факультет Кибернетики, специальность 230101 - "Вычислительные машины, комплексы, системы и сети" .


game review
Чувак, пока не отучишься не поймешь ничего, что тебе говорят....общага, лекции, пары, семинары, сессия...это то, что никогда не даст тебе ни одна статья или книга. А сколько знакомств и поводов создать команды!
Засунь гордость в одно место и будешь орать, что ты крут и поливать хамством тогда, когда продашь свою игру хотя бы за 1000 баксов. НЕТ В ИНЕТЕ ТАКИХ УРОКОВ "как сделать вот такую игру чтобы....троль ля ля". Хватай AS3 Колина Мука и штудируй пока не поймешь, там есть все чтобы понять, что такое FLASH и AS3.


На счет BuxomBerry, товарищи прежде чем на кого-то валить бочки ВЫ бы для начала его блог почитали, сейчас он на ремонте у него, но там были чудесные статьи по архитектуре движка, про моделирование системы частиц as3 и много чего интересного. Человек вкладывал огромный труд в статьи и ему есть чем гордиться!!!

Антон! Спасибо за пост!!!

Vacsa
30 Марта 2012
— 12:38
#

Ндас согласен получилось грубовато, но реально может в силу возраста. Я называю себя программистом? да нет разве что начинающим, но я учусь и пытаюсь ежедневно улучшать свои знания. А вообще спасибо взрослым дядькам что меня на место поставили ХД). И с сегодняшнего дня начал разбираться во flash.

BuxomBerry - я думаю понимание того, какому языку стоит посветить основную часть времени, придёт с опытом, я ведь только начинаю.

Короче всем спасибо, еслиб не вы, я бы может до сих пор мялся начинать учить или нет.
Короче всем выражаю благодарность, за такой буйный спор. Эх люблю я поспорить даже если не уверен в достоверности своих знаний. Вот теперь учусь признавать ошибки. Не думал что это так трудно).
За то теперь знаю к кому обратиться за советом).

game review
30 Марта 2012
— 13:11
#

Vacsa - юло яж извинился за грубость, и да, я не орал что я крут. Я вроде орал что я нуб особенно в С, и AS.
Ох я даже представлять пока не хочу всё это - УНИВЕР ХДД.
А вот насчёт команды((( на самом деле всё печально. Мало сейчас действительно заинтересованных людей. Мало в моём городе интересующихся. Хотя даже место есть, где собираются и говорят о новом, рассказывают о идеях и т.п. А сейчас там никого не увидишь. Даже в технаре с нашего факультета, почти нет тех кому действительно интересно((.

game review
30 Марта 2012
— 13:17
#

2BuxomBerry чувак, ты чо-то путаешь, на матмехе учили алгебрам, геометриям, дифурам и прочим математическим штукам.

>поэтому для вас нет разницы каким алгоритмом поиска пути
ясно, по предметам "гадание по аватару" и "необоснованные заявления" у тебя были пятерки.

ты видать в прошлом году свой техникум закончил? юнишеский максимализм еще не выветрился я смотрю, если уж писать игру, то обязательно MMORPG-убийцу WOW, если уж программировать, то только на С++, если писать "hello word", то обязательно с использования идеальной ООП архитектуры, чтобы можно было потом на этой основе сделать убийцу WOW.

я если честно сомневаюсь,что можно научиться хорошо программировать в ВУЗе. Чтобы хорошо программировать нужен опыт, а опыт можно получить только в реальных проектах.

2Vacsa маладец, возьми с полки пирожок. греет тебя твой корочка по ночам? я вот народ когда брал на работу, что с профильными корочками, что без - одна фигня. если хочешь всех восхитить своей крутостью - давай ссылку на сделанный проект, чё дипломом-то трясти.

засим откланиюсь, не буду больше засорять блог уважаемого Антона.

P.S. BuxomBerry где ссылки на твои игры? языком молоть много ума не надо.

orbit
30 Марта 2012
— 17:42
#

Ах, черт, не могу удержатся, но это точно последний пост :D

BuxomBerry ты просто монстр! я нашел твою игру
http://www.kongregate.com/games/BuxomBerry/space-looter?acomplete=spacelooter

750 просмотров на конге и рейтинг 2.63, просто отлично! Тебе вероятно длительная учеба в ВУЗе на математике и доскональное проектирование супер-пупер архитектуры позволила добиться такого потрясающего успеха?

orbit
30 Марта 2012
— 18:13
#

BuxomBerry
Игра обалденная - респект.

orbit
Очень интересует рейтинг и популярность Льва Толстого в разных гламурных помойках. (вру ничуть не интересует)

А вот что действительно интересует так это - почему дискуссии в рускоммюнити всегда переходят в холивары в стиле - я говно но ты говнистее?
С обязательными элементами:
ты хуй
сперва добейся
и прочими устоявшимися мемами.

И самое интересное, постоянно забывают что подобные холивары это как олимпиада для умственно отсталых — даже если ты выиграл, ты все равно — дебил.

и.о. Капитан Очевидность
30 Марта 2012
— 19:22
#

to--->game review

Для программиста нет никакой разницы на каком языке писать.
Язык это инструмент реализации поставленной задачи, не больше и не меньше.

Алгоритмы и прочие математические абстракции не привязаны ни к одной языковой реализации.

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

И перечитайте рекомендации BuxomBerry хотя бы для того чтоб мне было интересно потрошить вашу игрушку, если таковая случится =).

И на последок еще констатирую несколько фактов, а принимать их к своему сведению или нет, ваше сугубо личное дело.

1) рынок флеш-игр в настоящее время находится в состоянии стагнации - он буквально забит невероятным количеством никому уже не нужного трешняка а форумы забиты вопросами "горе девелоперов" - "как жы так я прочитал блог Вадима (или Жонни или ... подставить по необходимости (блог Антона Карлова не торчит в одном ряду с вышеупомянуыми блогами, читайте его и будет вам счастье)) о том как на коленке наковырять пол миллиона, сделал первую гениальную игру за три дня - и уже три месяца не могу её продать."

2) продать игру сейчас можно только если она:
а) сделана качественно (графика, озвучка, программинг)
б) имеет геймплей интересный не только вам.

3) учиться - придется.

4) работать - придется.

и.о. Капитан Очевидность
30 Марта 2012
— 19:55
#

Да вы реально КЭП.
Да вот насчёт треша не поспорю. один мусор кругом. Трудно найти что то стоящее. Поэтому игры Антона выделяются на остальном плане.
Хотя порой и попадаются вполне хорошие и даже замечательные мини игры.

game review
30 Марта 2012
— 21:26
#

BuxomBerry - игра на самом деле не плохая - особенно уважаю тех программистов которые сами рисуют себе графику.
Но не думаю что игра написана на C++.

game review
30 Марта 2012
— 21:29
#

game review
Компилятор Alchemy позволяет написанное на CC++ компилировать во Flash
Именно так реализовано например вот это
Unreal Demo Flash
(видео - линк на демку не могу найти)

или вот это, тоже от Unreal
Epic Citadel
полноформатная демка работает под версией плейера 11.2

или вот это демо, от Unity
Angry Bot
будет работать в версии плейера 11.1 и может выкаблучиваться в 11.2 =)


Крайне не рекомендую в качестве первого языка осваивать скриптование в Unity или UDK - в голове будет сплошная каша.

и.о. Капитан Очевидность
30 Марта 2012
— 22:35
#

@orbit, попробуйте найти статьи @BuxomBerry и почитать их - это раз. Два - как созданные игры показывают уровень программиста?

dizlv
30 Марта 2012
— 22:41
#

Кэп. Не знал о таком компиляторе. Пичаль.
Вот насчёт каши это да. Я хоть и знаю простые языки, да и те не в совершенстве - хорошо, но не в совершенстве. Но я даже в них путаюсь порой.

game review
31 Марта 2012
— 13:12
#

Если автор блога не будет против, а вы game review все еще жаждете программировать на ActionScript 3

держите ссылку на ресурс.
Там много примеров с исходниками.
Емануель Феронато

А тут в картинках — Установка и настройка FlashDevelop
FlexSDK правда можно не качать отдельно - при установке FlashDevelop будет окошко с чекбоками - отметьте там "download FlexSDK" и оно будет автоматически закачано.

и.о. Капитан Очевидность
31 Марта 2012
— 17:33
#

Какой жуткий холивар!
Постоянно читаю Антона, но такое вижу впервые.

@game review
Если вы хотите фигачить игры и рубить бабло, то по сути все равно с чего начинать, но все таки классический С как никакой язык даст вам представление о "программировании". Помните, что почти все, что вы так любите и желаете изучить - flash, java их IDE, библиотеки и расширения были выполнены при использовании С на 90%.
Я сейчас сижу на unity, до этого на as3 (и as2 соответственно), до этого на java и еще бог весть на чем - и тем не менее, когда нужно забодать нетривиальную весчь (или серверную часть) я иду в visual studio и компилю библиотеки на С (С++).
Базовые знания по линейной алгебре, геометрии, основам анализа и т.д. никто не отменял - они так или иначе вам понадобятся.
Помните

zafod
31 Марта 2012
— 23:00
#

@game review Если GameMaker использовал, и даже игру какую-то написал, начни с FlashDevelop + Flixel.
С++ слишком высокий порог входа, слишком долго нужно идти от того момента, когда ты его запустил и до того как у тебя началось получаться хоть что-то. Интерес пропадет очень быстро. Вспомните войну с компилятором (тот же HGE хрен поставишь без гуглинга).
Вообще, какая разница где алгоритмы реализовывать. ИМХО, самое важное, это научиться думать как программист и не сдаваться никогда перед поставленной задачей, какой бы тяжелой она ни была -остальное приложется.

WeslomPo
31 Марта 2012
— 23:38
#

ВСЕМ ВСЕМ!!!
Вышла Rayman Origins для PC!
Рекомендована для всех поклонников игр Антона Карлова. Некоторые части персонажей игры Rayman напомнили некоторые части персонажей из игры Mushroomer )) (глазки грибов например).

Игра даст - идейное вдохновение и конечно же хорошее настроение!

Vacsa
1 Апреля 2012
— 14:35
#

Антон, точно пора тебе свой flashgamedev.ru открывать)

Komizart
1 Апреля 2012
— 19:28
#

Народ всем всем выражаю благодарность. Два дня назад начал разбираться чё почём. Антон был прав в самом flash тяжёлого ничего нет. Вот теперь сижу пыхчу опытным путём учу AS. Даже получается кружки двигать мышью, стрелочками, удалось даже гравитацию смастерить. и отслеживать столкновения.
Вот только не охото мне лицензию покупать - накладно. Залез в копилку а там... ДЫРКА ХД((( Поэтому пока нашёл keygen. Буду разбираться, а если создам что толкового то если не против, выложу ссылку сюда чтоб вы кидались какашками. ))). А там посмотрим. Ещё раз выражаю всем огромную благодарность.

game review
1 Апреля 2012
— 23:38
#

Используй FlashDevelop + Flixel - они бесплатные, и больше на программиста нацелены, не понадобится IDE.

WeslomPo
2 Апреля 2012
— 01:06
#

game review, Я только в Скайпе - Komizart

Komizart
5 Апреля 2012
— 22:53
#

Решился и прочитал большинство комментов... Ну вы блин даёте господа!

Главное это игра, на каких костылях она держится и какая там структура ни игрокам ни спонсорам не интересно( только прогерам и то не всем ). На своём примере вижу что можно не уметь рисовать, не помнить высшую математику, НИ РАЗУ не читать Мука, учиться не технолога двигателей, а получить диплом финансиста, делать игры и продавать их. Я тригонометрию до сих пор методом тыка подбираю)) (хотя и стыдно). Но никто же об этом не знал пока я тут не написал. :)

Конечно же это всё не лишнее и мне бы очень пригодилось, но не главное. Главное это игра. Если игра интересная, её обязательно купят!

Komizart
6 Апреля 2012
— 02:12
#

@Komizart, вот потому Вы никогда не будете зарабатывать миллионы.

dizlv
7 Апреля 2012
— 00:35
#

dizlv, поживём - увидим.

Komizart
7 Апреля 2012
— 12:00
#

@Komizart:
Игра - есть результат большого, ужасного задротства. Чем сложнее выпущенная игра и ее составляющие, тем больше задротства было в нее вложено.
Кстати, ковырять стену в тюремной камере ложкой аналогичный процесс. Согласитесь, дело пошло бы быстрее, если бы у вас в руках отказался отбойный молоток. Знания - это и есть ваш отбойный молоток, а дыра в стене - лишь последствия его применения.
Дырка безусловно главное, но средства иногда решают все.

BuxomBerry
7 Апреля 2012
— 21:09
#

и да и нет) Высокая технологичность != хорошая игра. Это конечно хорошо, но исход не решает. Уверен что большинство успешных флэш инди игр не писали прогеры с звездой во лбу. Просто у людей появилась идея и они воплотили её в жизнь. Может даже к стандартам код не подгоняли

А на счёт ложки и отбойника, то можно и ложку обточить и вскрыть ей замок, а отбойником пробить дыру в комнату охраны. Другими словами успех или фэил могут быть в обоих случаях.

Komizart
7 Апреля 2012
— 22:52
#

и не всегда оно такое большое у ужасное, а иногда очень даже приятное)

Komizart
7 Апреля 2012
— 22:53
#

Ну так задротство же ;)

BuxomBerry
7 Апреля 2012
— 23:38
#

скорее творчество

Komizart
8 Апреля 2012
— 00:20
#

Komizart +1 - творчество.

game review
9 Апреля 2012
— 17:54
#

Смешно читать про ваши "творчество" :D
Это, как художник-нулевик :)

d
10 Апреля 2012
— 00:33
#

Хорошая статья получилась!

Владимир
7 Мая 2012
— 11:48
#

Э Антон Карлов не трать ты этовремя на эту ерунду потом бозобовимся с этими тачиками и тд делай лучьше зомботрон 2 : )

НИКИТА
8 Июня 2012
— 08:23
#

Я как-то пытался сделать игру в Конструкторе, забавно но небольшой платформер получился :)

Лицензионные игры
11 Июня 2012
— 06:42
#

Ждем продолжения, очень интересная тема :)

Pavel
20 Октября 2012
— 19:51
#

Некропост конечно, но все же я верю что продолжение статьи когда-нибудь случится.

Drelizard
7 Августа 2013
— 10:59
#

Антон, привет. А как же вторая часть с паттерном стратегия :)

flahsfoxter
8 Апреля 2014
— 14:32
#

я уже готов задонатить на вторую часть :D уж больно Антон пишет хорошо и с шикарными примерами

Евгений
20 Мая 2014
— 12:15
#

Понимаю, что времени на блог нет, но если выйдет вторая часть статьи - я уверен, что много народа будет благодарны! :)

Анжей
7 Декабря 2014
— 22:50
#