Category: игры

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

nyaload

memory game

Леонардо Ди Каприо (Доминик Кобб) в фильме «Начало» всегда с собой таскал маленькую юлу, чтобы отличать сон от реальности.
Я использую игру "найди пары одинаковых карточек" в телефоне, чтобы понять насколько я устал и отупел. Когда я бодр и в хорошем состоянии, то я могу удерживать в голове позицию каждой карточки. Открывая вторую карточку я почти всегда могу указать где первая (что интересно - неосознанно). Когда же я устал - то делаю массу ошибок, и туплю: у меня чувство дежавю, точно была, но не могу вспомнить где, вроде бы была где-то, но не уверен.
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

Cражения происходят на ринге, а войны ведутся на доске

Оказывается есть такой вид спорта - шахбокс. Два соперника по очереди играют то в шахматы, то бьют морды. В четных раундах - бокс на ринге, в нечетных - игра в шахматы. Можно победить как нокаутом, так и сделав мат противнику на доске. Боец должен быть мультиклассовым, с большим и intelligence, и strength :)
статья в википедии
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:
Со свиньями был связан, кстати, ещё один баг, из-за которого игра падала
кенгуру, перегруппировавшись, появились из-за холма и выпустили тучу стингеров по злополучным вертолетам