Обновить
220.3

Разработка игр *

Разработка игр

Сначала показывать
Порог рейтинга
Уровень сложности

Verlet.js — физический движок на основе метода Верле

Время на прочтение1 мин
Количество просмотров39K
Метод численного интегрирования Верле издавна использовался для вычисления траекторий частиц. Сам метод был впервые использован ещё в 1791 году французским астрономом Жаном-Батистом-Жозефом Деламбром. В 1907 норвежский математик и физик Карл Штёрмер использовал его для моделирования движения частиц в магнитном поле, поэтому иногда этот метод называют методом Штёрмера. Современное название этот алгоритм получил от имени французского физика Лу Верле, который в 1967 году использовал его в моделировании молекулярной динамики. В последнее время метод Верле применяется и в разработке компьютерных игр.
Читать дальше →

Как я писал Pacman'a, и что из этого получилось. Часть 1

Время на прочтение7 мин
Количество просмотров62K
Здравствуйте, уважаемые хабралюди!
Последние несколько месяцев, в свободное время, я занимался разработкой клона знаменитой игры Pacman для ОС Android. Как это было, и что из этого вышло я хочу рассказать.

Читать дальше →

Игровая механика: давайте разберём ядро игры по косточкам

Время на прочтение11 мин
Количество просмотров116K
Термин «игровая механика» имеет много значений, но сегодня я буду говорить об игровой механике как об абстракции, определяющей состояние игры. Очень упрощённо это выглядит вот так:



Есть только два фактора, которые определяют любое текущее состояние игры: механика (правила) и игроки своими действиями.

Уровень ядра


Такт 1: определение состояния
Всегда есть некое текущее состояние системы (например, начало хода). Оно определяется на первом такте инициализирующей последовательностью, когда игроки «загружают» игру, раскладывая поле, выбирая фишки, распределяя начальные ресурсы и так далее. Затем оно меняется в зависимости от происходящего в игре.
Читать дальше →

Labyrus: 3D лабиринт

Время на прочтение4 мин
Количество просмотров17K
«У тебя 2 минуты, чтобы создать лабиринт, на выход из которого нужна минута.»
Коб, «Начало»



Примерно год назад мне стало интересно нарисовать лабиринт, на прохождение которого требуется хоть какое-то время. Я долго пытался это сделать, однако столкнулся с множеством проблем:
  1. От выхода такой лабиринт проходился на «раз-два».
  2. Увидеть и понять, идешь ты по правильному пути, или нет, можно было почти всегда.
  3. На рисование лабиринта уходило очень много времени.

Тогда я решил написать программу, которая будет скрывать то, что видеть не положено и, заодно, генерить лабиринты.
А потом поднял лабиринт в 3D с помощью OpenGL.
А затем добавил в него сеть, потоки и этажи.
Итак, встречайте:

Labyrus — открытая кроссплатформенная многопоточная сетевая игра, написанная с использованием OpenGl и Qt.

Читать дальше →

Про переводы

Время на прочтение6 мин
Количество просмотров47K

Это вот «Плаксовая манта» по версии издателя

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

В последнее время скопился небольшой пакет грабель, которые, возможно, пригодятся и вам.

Имена в примерах

Почти все понимают, что в примерах должны участвовать Alice, Bob и другие товарищи по алфавиту. При этом в мнемонической системе ещё есть персонажи Eve и Mallory, которые не ложатся в последовательность, потому что это Eavesdropper и Malicious attacker, то есть пассивный и активный злоумышленники. В нашей мнемонической системе злоумышленника играет Зиновий, что часто придаёт особый шик переводам примеров.
Читать дальше →

В Киеве прошел Kiev Games Night на тему «Как открыть свою геймдев студию»

Время на прочтение2 мин
Количество просмотров17K
Удивительно, что никто так и не осветил это событие. Неделю назад в Киеве прошла сходка-конференция «Games Night». Событие было разбито на две части: блок мини-докладов (по 5-10 минут каждый) и круглый стол, где докладчики отвечали на вопросы аудитории (которой собралось неожиданно много). А так же — свободное общение. Вход был свободный.

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

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

Докладов было 11:

  • Андрей Арутюнян (Colibri Games) — о том, как команда из 3-х человек сделала свою игру
  • Андрей Прохоров (4A Games) — авторы серии игр Metro и т.п.
  • Артем Мироновский (Nival Red) — про то, как команде пойти под крыло гиганта Nival
  • Олег Яворский (Vostok Games) — про то, как авторы S.T.A.L.K.E.R. искали финансирование на сиквел
  • Игорь Карев (Tatem Games) — авторы «Анабиоза» и многих друих игр
  • Кен Ливер (Eastlabs) — инкубатор игровых стартапов
  • Олег Клаповский (GOG.com) — 3-я по масштабу платформа после Steam и Origin
  • Евгений Жуков (Digitilus) — про то, как и когда выходить на Kickstarter
  • Олег Придюк (Unity) — про то, как команда из 3х человек в гараже на деньги одного из родителей написала всемирно известный движок
  • Андрей Ионес (Saber Interactive) — о разработке на консолях
  • Сергей Климов (Daedalic) — про квесты и сторителлинг в играх

Видео выступлений:


Читать дальше →

GameDev и канделябр

Время на прочтение7 мин
Количество просмотров38K
Канделябр — подсвечник, который используется для корректировки формы лица игрока, играющего нечестно.

Наверное, многие помнят карточную игру “Марьяж”, которая манила к ЭЛТ мониторам игроков более десятка лет назад.



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

Читать дальше →

Питер Мольине столкнул два варианта монетизации в Curiosity

Время на прочтение1 мин
Количество просмотров65K
Игра Curiosity от Питера Молинье – это куб, от которого множество пользователей со всего мира отщипывают чешуйки, удаляя слои в надежде добраться до его сердцевины, где скрыта некая тайна.



В последнем обновлении автор добавил во встроенные покупки возможность не только удалять элементы куба, но и наоборот — наращивать их обратно. За разные суммы можно добавить от 10 до 500 тысяч элементов.
Читать дальше →

Как я Quake в браузере делал

Время на прочтение5 мин
Количество просмотров102K

2 месяца назад я выложил на GitHub первую бета-сборку WebQuake — порта первого Quake, работающего в браузере через WebGL.

В этом посте я бы хотел вам рассказать о подробностях разработки и реализации движка: как сделана графика, как работает звук, и так далее.
Читать дальше →

Использование ActiveRecord от Yii в игре тайм менеджере

Время на прочтение6 мин
Количество просмотров7.6K
Всем привет!

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

Напомню, что в проекте используется php(Yii), mysql и memcached. В проекте достаточно много сущностей, для каждой из которой есть своя модель, которая наследуется от CActiveRecord.

Хранятся файлы моделей следующим образом. В папке models создаем папку base. Когда генерируем модель через Gii, то указываем, что ее нужно положить в папку models/base и к имени класса добавляем Base. Затем создаем в models аналогичный класс без Base, который наследуется от базового класса и имеет в себе лишь метод model().

Кстати заранее скажу, что базовые модели наследуем не от CActiveRecord, а от ExtActiveRecord — расширяем CActiveRecord под наши нужды. Но об этом позже. Пока что разницы никакой.

Пример:
models/base/BaseUser.php — стандартный класс, который генерируется через Gii
models/User.php — класс, который наследуется от BaseUser и имеет в себе метод model()
	/**
	 * Returns the static model of the specified AR class.
	 * @param string $className active record class name.
	 * @return User the static model class
	 */
	public static function model($className=__CLASS__) {
		return parent::model($className);
	}
	



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

Не забываем добавить в конфиге 'application.models.base.*'.

Перейдем собственно к теме поста и поставим задачи, которые хотим решить:
  1. Уменьшить количество запросов в базу на обновление
  2. Уменьшить количество запросов в базу на выборку


Читать далее

Успех в инди: руководство для начинающих

Время на прочтение10 мин
Количество просмотров82K
image

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

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

Приятного вам чтения!
Читать дальше →

Android NDK: OpenSL ES

Время на прочтение9 мин
Количество просмотров24K
Здравствуйте, уважемые хабражители!
Недавно, читая хабр, я увидел статью об Android NDK и OpenAL. А в комментариях был задан вопрос о OpenSL ES. Тогда у меня и родилась мысль написать статью об этой библиотеке. Я занимался этой темой, когда мне понадобилось добавить звуки и музыку в игру под Android, написанную на C++, под NDK. Статья не претендует на полноту, здесь будут лишь основы.

Содержание:
  1. Краткое описание структур OpenSL ES
  2. Инициализация механизма библиотеки и создание объекта для работы с динамиками
  3. Проигрывание PCM(wav)
  4. Проигрывание MP3, OGG
  5. Заключение

Читать дальше →

Метрика #4 — Подкаст о технологиях и проектировании интерфейсов и сервисов

Время на прочтение1 мин
Количество просмотров5.8K
Всем привет! С вами «Метрика» – шоу для тех, кто создает и анализирует продукты и сервисы на различных платформах.

В этом выпуске


Антон Артемов (a_dae), Платон Днепровский (hryusha) и Дмитрий Кабанов (dmitrykabanov) обсуждают игровые UI, их особенности, новинки, и дискутируют о современном понимании игрофикации.
Читать дальше →

Ближайшие события

На Kickstarter идет сбор средств на игру-наследника знаменитого Road Rush

Время на прочтение1 мин
Количество просмотров19K
Сегодня случайно наткнулся на сбор средств на Kickstarter для игры, которую сами разработчики называют «духовным наследником» знаменитой серии Road Rush. Серия игр Road Rush была очень популярна в 90-х (по крайней мере в моей детстве так было) для приставки Sega Mega Drive. Название игры Road Redemption. В процессе просмотр трейлера сразу улавливаются «нотки» той старой олдскульной игры: противников можно бить различными предметами, толкать под встречные машины, ну и сами гонки на мотоциклах никуда не делись. Арсенал стал интересней: появилось огнестрельное оружие, взрывчатка, к оружию ближнего боя из оригинальной игры (в оригинальной версии были кулаки, дубинка, цепь и лом) добавились самурайские мечи, кувалды и много другой арматуры, кроме того в игру обещают добавить полноценный сюжет. Команда создателей подобралась с большим геймдевелоперским и судя по всему геймерским опытом, так что есть все основания полагать, что мы увидим очень неплохую игру.
Читать дальше →

Физический движок для железнодорожного транспорта

Время на прочтение6 мин
Количество просмотров21K
Здравствуйте.
В данной статье представлена концепция написания физического движка для железнодорожного транспорта.
Одна из главных задач, которую должен решать данный физический движок – это расчет взаимодействия между вагонами.
Читать дальше →

Игрофикация – игра как мотивация в бизнесе

Время на прочтение5 мин
Количество просмотров37K


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

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

Вообще, игрофикация или геймификация — это когда игровые механики накладываются на что-то в реальной жизни. В СССР, например, были соревнования смен, доска с лучшими работниками и так далее — всё это хорошие добрые игры, когда работа идёт не ради плана, а ради того, чтобы доказать свою крутость или просто поучаствовать в процессе. Ещё примеры:
  • Хабр. Карма, рейтинг плюс наши бейджи и инвайты: они создают дополнительную мотивацию писать посты.
  • Террористы. На самой лекции также говорилось, что боевики в Аль-Каиде проходят несколько уровней своего рода игры, каждый из которых разблокирует новые возможности в организации.
  • Обучение. Там же приводился пример про школу, в которой все в начальных классах стали играть роли в экипаже космического корабля. Учиться стало интересно уже не потому что так надо, а потому, что это помогало проходить сюжет.
Читать дальше →

Алгоритм Эллера для генерации лабиринтов

Время на прочтение5 мин
Количество просмотров155K
Это топик-перевод статьи Eller's Algorithm. В ней рассказывается о способе программной генерации лабиринтов. Дальнейшее повествование идет от лица автора.

 __ __ __ __ __ __ __ __ __ __ __ __ __ __ __  
|__   |__       __ __|__   |   __|  |  |  |  |
|__   |__   |__|   __ __|   __ __      |     |
|        |  |  |     |  |__      |__|  |  |  |
|__|__|  |  |   __|   __|__   |   __|__|  |__|
|   __|  |     |__ __ __|  |  |__|  |     |  |
|  |  |  |  |__|  |__   |  |   __|__ __|  |  |
|  |__    __    __ __    __|  |   __   |  |  |
|  |  |  |  |      __|  |   __|  |  |__|  |  |
|  |     |     |__   |  |  |  |  |  |__    __|
|  |  |__|__|__ __|  |     |  |  |      __|  |
|__ __|  |  |  |__   |__|   __|     |   __ __|
|   __|  |   __|__      |__   |__|  |__    __|
|  |  |     |  |     |__|  |   __    __|   __|
|   __|  |__ __|__|      __|  |  |     |  |  |
|   __ __   |      __|__|  |__   |  |  |__|  |
|__ __ __|__ __|__ __ __ __ __|__|__|__ __ __|


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

Читать дальше →

А вот я принёс вам настольную игру про космические полёты

Время на прочтение5 мин
Количество просмотров47K

Уже немного обжитый корабль. В экипаже двое людей и инопланетянин.

Уф. Неделю назад мы обещали всем приятный сюрприз на день космонавтики — и сегодня в огромной спешке развозили ещё тёплые коробки настольной игры «Galaxy Trucker» (или «Космические дальнобойщики» в локализованной версии) по магазинам.

В общем, именно сегодня хочу показать вам одну из самых весёлых гиковых штуковин, которые я видел за последние пару лет. И поздравить с праздником.

Для начала вы должны свыкнуться с мыслью, что все космические корабли будущего будут строиться из частей канализации. Почему? Потому что жила-была корпорация, которая зарабатывала только тем, что поставляла детали для бытовых инженерных сетей на отдалённые планеты. Разница технологических уровней позволяла здорово на этом зарабатывать, и при этом не сильно вредить балансу сил в галактике. За несколько веков все ближайшие системы были обеспечены канализацией и инженерными системами на 100%, поэтому приходилось улетать всё дальше и дальше. В итоге полёты стали довольно опасными, а прибыль – не такой уж и большой. Корпорация оказалась на грани банкротства.
И как они выкрутились?

Хабраинтервью с разработчиками «Космических рейнджеров»

Время на прочтение2 мин
Количество просмотров41K
Игра «Космические рейнджеры 2»

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

  • Алексей Дубовой согласился ответить на вопросы по почте.
  • Дмитрий Гусаров от интервью отказался.
  • Команда, которая готовит аддон «Революция» на интервью согласна.

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

Отложенная обработка команд в социальной игре

Время на прочтение4 мин
Количество просмотров11K
Всем привет!

Сегодня я хочу поделиться с вами решением задачи, с которой мы столкнулись при разработке социальной игры. Игровой клиент был написан на flash, а для back-end был выбран php. Игра относится к тайм-менеджмент играм.
Схема работы была выбрана следующая:
  1. игрок совершает действие на клиенте
  2. клиент проверяет возможность совершения действия
  3. отсылает команду на сервер
  4. сервер проверяет возможность совершения действия, выполняет команду, производя изменения в базе
  5. клиент уведомляется о том, что все ок или информируется об ошибке


Все работало отлично, пока не происходило резкое возрастание количества игроков.
Сначала начались тормоза со стороны php. Основная проблема данной реализации заключалась в том, что на каждое действие игрока дергается сервер, который производит довольно много вычислений по обсчету объектов на карте перед выполнением команды. Эта проблема была решена путем добавления дополнительных серверов с обработчиками php.
Потом мы уперлись в производительность mysql. Было слишком много запросов. Так как шардинг не был заложен в систему, то выкручивались как могли. Что-то перенесли в mongodb, где-то улучшили работу с кэшем.

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


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

Какой же?

Вклад авторов