Category: игры

Category was added automatically. Read all entries about "игры".

nyaload

Conway's game of life

Совершенно невероятные конструкции из правил "жизни Конвея" (на первой минуте - текст с описанием правил, интересное после 1-й минуты):

nyaload

«....ааа что, вы и есть за меня будете?! - Ага!!»

Игрушка на http://godville.net укрепила меня во мнении, что борьба с ботами - это от слабости геймдизайна. Зачем игрокам писать ботов, если конфеты интересней есть самому?

PS. фраза заголовка - из «Вовка в тридевятом царстве», можно на ютубе глянуть, если прошло мимо детства.
nyaload

DOT (овалы со стрелками)

Иногда при копании в текстовых файлах, в которых хранится дерево зависимостей или граф, хочется получить наглядное представление этого файла. Это могут быть зависимости между данными или промежуточное состояние программы при отладке сложного алгоритма на графе/дереве.
Есть простой инструмент, DOT language, который по текстовому файлу сгенерирует рисунок.
Например, по описанию

digraph graphname {
  a -> b -> c;
  b -> d;
}


будет построен рисунок:

Collapse )
nyaload

AI должен красиво отдаваться.

Наш лид-программер, orvind, ездил недавно на GDC. У нас в компании решили организовать лекции, с пересказом интересного, от участвовавших в GDC.

Выступаю испорченным телефоном, пересказываю со слов orvind идеи Сида Мейера в Цивилизации 5.

Если есть рандом, то он не должен быть честный. Если мы попадаем с вероятностью 50%, то после промаха игрок ожидает попадание. Дадим же его с более высокой вероятностью. А не ещё плюс два промаха подряд с вероятностью 1/4.
Из комментов: В Heroes5 было свойство incorporeal - промах с 50% вероятностью.
Постоянно ставили баги что рандом бажит: как же так, промахнулся 5 раз подряд?
Объяснения, что да, иногда и так бывает, что монета падает 5 раз подряд решкой, не воздействовали. Никак не мог доказать, что 1/32 != 0.
Пришлось прикручивать счетчик промахов, чтобы не больше трех раз подряд, только тогда успокоились.
В интерпретации дизайнеров это звучало так: "у нас в Heroes 5 рандом тоже сначала бажил".


Что бы играть было интересней, замедлим слишком быстрые сейвы-лоады. Вообще, игрока надо спасать от себя - интерес в обмен на удобство/эффективность игры.

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

Несмотря на ожидания игровых журналистов и игроков-интеллектуалов - AI не должен быть непредсказуемым. Действительно неожиданный непредсказуемый AI будет выбешивать. Игроку будет приятно предсказать (адекватное) поведение противника и победить.

Награда игроку - это не обязательно новый контент (модели, текстуры, анимации). В игре заменили сообщение "Посол предлагает мир, не нападайте" на "Посол предлагает мир, не нападайте, в знак лояльности он преподносит дар: семь танцующих медведей". И это реально изменило соотношение ответов игрока. Хотя никаких анимаций или моделей медведей нет.
У игроков есть воображение, этим надо пользоваться, они сами могут улыбнуться и представить себе танцующих медведей :)
nyaload

C++, Именованные параметры функций в С++. Спрайты в 2d движках.

Блог же у меня вроде про программирование и разработку игр? И про C++?

Тут я изложу свой опыт того, как надо организовывать основную API-функцию 2d-игр: вывод прямоугольных спрайтов. Это основая функция, игра наполовину состоит из неё :) Остальная половина - игровая логика и чуточку прочего, вроде сейвов, звука, мат-библиотеки.
А, ещё билд ресурсов, шрифты, плавная анимация тоже важные темы, работа с которыми у программиста будет сильно влиять на скорость разработки.

Не знаю насколько, это будет полезно. Для PC лучше взять скриптуемый готовый движок, или флеш и положить игру в Facebook/вконтакт :)
Но если вдруг окажется, что начинаете возиться с таким низким уровнем, да ещё и на C++, тут можете увидеть советы, как сделать жизнь гейм-кодера слаще. Остальные могут увидеть удобный приём для языков с ООП (C++, Java, C#, JavaScript, Python, ...).

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

Ещё один важный момент. Сортировка спрайтов по Z. .
Collapse )

см . так же сжатие графики для спрайтов
nyaload

Paranormal Agency

Недавно шипнулась моя казуальная игрушка, Paranormal Agency, в которой я очень много сделал, как по программированию, так и по организации. Запросом в гугль можно найти и другие инсталляторы, более привычные (не онлайновые) чем у БигФиша.

Выводы:
1) Не делать игру про сюжет и диалоги, на чужом языке. Игру блеймят за плохую грамматику и орфографию, не смотря на то было потрачено масса сил на вычитку, перевод текста, организацию вычитки и перевода скриптов диалогов. И всё равно никто не читает. Я взял на себя ответственность зафичекатить некоторые текстовые фишки игры, вроде "энциклопедии привидений", "журнала про паранормальные явления" со статьями выдраными из википедии, считаю что я прав. Сколько-то сил это сэкономило. Игры должны быть без текста, если это не про Гарри Поттера и Звёздные Войны, иначе это просто ненужная и неблагодарная работа. Или это Visual Novell, которая только про текст, и в которой текст это суть "геймплея".

2) В фичи надо тыкать пользователей носом, а лучше что бы их было много, так что не наткнуться нельзя. Во всех обзорах и отзывах написано "скушно, нет изюминки". Изюминка - это миниигры в офисе по левой нижней кнопки, НО С ПЯТОГО УРОВНЯ в маленькой незаметной коробочке внутри офиса. Так же миниигры должны быть с самого начала, а не с 9-го уровня. И они не должны быть мозгодробительным перебором вслепую (гирьки). Увы, этот дизайнерский недочёт я не исправил. На этот офис было потрачено 2/3 усилий, но только 10% игроков туда попало, и только 10% от этих 10% заметило коробочку с минииграми с 5-го уровня. В этом же офисе есть всякие секретки...

3) Не делать перспективное деление в казуальных играх. Не смотря на мои усилия, объекты уровней отрисованные с делением на W на каких-то редких видеокартах или не рисуются, или рисуются некорректно.

4) Не выпускать клон удачной игры (Mystery Case Files) спустя год.

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

<Zeux> CEMEH, рассказывай
<Zeux> как матерый профессионал бы решил проблему теней
<CEMEH> Сказал бы - солнцу не двигаться.
nyaload

Armed Pig Pattern

При программировании, при тупом кодировании, при выборе имён переменных, при выборе места вставки очереднй заплатки вроде if (объект != NULL) - важно разобраться в себе, чего же ты на самом деле хочешь, понять законы вселенной в которой живёт предметная область, и сделать исправления именно в пространстве этой вселенной.

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

Важно понимать, где нам писать if (посетитель == Дженифер) и if (IsWoman(посетитель)) (а может на самом деле, мы хотели написать, if ( ПосетительОдетВЖенскуюОдежду(посетитель)) ?, не смотря на то что пока этот персонаж только один - это эквиваленты.

Программисты же новички часто пишут не то что хотят, а то что в данный момент является эквивалентом того что они хотят. А потом эта эквивалентность ломается. И они потом по всему коду всё равно заменяют на if (посетитель == Дженифер || посетитель == Барбара). Или наоборот, if (IsWoman(посетитель) && посетитель != Барбара). Хотя надо было в начале написать IsWoman(посетитель) и посетитель == Дженифер, и тогда при добавлении Барбары не пришлось бы менять код.

Кстати, часто это касается не программистов, а заказчиков/дизайнеров. Тогда надо разбираться не в себе, а в них и в их вселенных :)

updated:
Со свиньями был связан, кстати, ещё один баг, из-за которого игра падала
кенгуру, перегруппировавшись, появились из-за холма и выпустили тучу стингеров по злополучным вертолетам
nyaload

КРИ 2008, доклад Б.Б.

Доклад Бориса Баткина "Особенности приготовления брюквы".

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

http://narod.ru/disk/163174000/kri2008_batkin.wmv
nyaload

(no subject)

Посмотрел "300". Орки-андеды против людей, если по изображению. Orcs vs Undead, если по сюжету (We.. Are... Free!). Спецэффектненько, очень похоже на CG-ролики от Blizzard. For the Horde! For the Lich King! Так что всем любителям Warcraft - смотреть, если ещё не.
Сами спартанцы похожи на помесь дварфов и эльфов крови.
Collapse )
Да-да! Фаерболлы тоже наличествуют!
Collapse )
Collapse )
Зачем спартанцам из фильма шлемы - непонятно.
Ах да, Подвиг тоже наличествует, но по уж очень пафосен, по голливудски.
Вот тут - про Евпатия Коловрата, который крут как Леонид, только родом из Рязани, а не из Спарты.