Ответы:
Прорыв
Простая игра, так как вам не о чем беспокоиться (это массив значений кирпича - если у вас только один цвет кирпича, это массив флагов), ИИ не существует, и вы можете сделать немного физики, чтобы заставить шар отскочить правильно.
Пасьянс
Правила немного сложнее, чем Breakout, и интерфейс к ним сильно отличается. Это заставляет вас думать о различных методах реализации игры. то есть то, что работает в одной игре, не обязательно то, что вы бы использовали в другой.
Pac-Man
Это хорошо, потому что вы начинаете работать над искусственным интеллектом. Когда призраки следуют за игроком (но не слишком хорошо - вы хотите, чтобы у игрока был шанс), это может быть быстро реализовано, и у вас будет небольшая забавная игра, которую вы можете настроить и показать друзьям и семье (положительные отзывы всегда хорошая вещь, когда вы начинаете).
Я считаю, что если вы ищете вдохновение в ранних видеоиграх, вы можете найти тонны идей, которые относительно просто реализовать. Кроме того, вы можете получить удовольствие от супер простых иллюстраций и звуков, потому что вы все равно копируете что-то очень простое. Это позволяет вам вначале сосредоточиться на основах - настроить игровую петлю и запустить ее, выяснить, как вывести пиксели на экран, воспроизвести звук, вести счет, получить информацию от игрока в игре.
Почти не имеет значения, какую игру вы выберете первой - просто убедитесь, что вы выбрали что-то простое, с чем вы можете получить быстрые результаты, чтобы вы могли перейти на следующий день и сделать еще одну. И другой. И еще одно - чем больше вы зарабатываете, тем больше вы будете подталкивать себя, и в конечном итоге вы будете делать сложные игры, прежде чем узнаете об этом.
Я настоятельно рекомендую начинающим программистам начинать с самой простой игры, которую они действительно хотят написать . Как упоминал Мэтт Рикс, огромная часть написания игры против демо-версии проталкивает эту чертову вещь к завершению - кредиты, меню, игровое тестирование, высокие баллы, пауза, игровое тестирование, уровни сложности, чистые переходы состояния игры, игра тестирование и т. д. Этот материал занимает как минимум половину времени, которое вы собираетесь вставить, и это просто не весело. Это не так. Так что, если вы не любите концепцию и не по-настоящему мотивированы, вы должны сдаться и двигаться дальше, прежде чем игра станет игрой .
Если вы хотите написать RPG, найдите простейшую и наиболее управляемую концепцию RPG, которую вы можете придумать, и которую вы хотите сделать. То же самое, если вы хотите сделать научно-фантастический шутер, или платформер на тему ужасов, или что-то еще. Выберите что-то, что вы закончите, что вам все равно захочется закончить после того, как все веселье будет сделано, но вы все еще смотрите на десятки часов работы, прежде чем вы действительно закончите.
Лучшая игра, чтобы "заработать свои крылья"? Тот, который вы завершили. Меня не волнует, сколько наполовину готовых демоверсий PONG / Breakout / Galaga / Tetris вы написали, вы не разработчик игры, пока не выпустите реально законченную игру.
Кроме того, никто не хочет играть в еще одну версию этих 40-летних игр, и, по крайней мере, некоторые из вопросов написания игр - для людей, чтобы играть , верно?
Я разместил эту лестницу на TIGsource некоторое время назад. Начинается от самого основного до очень сложного.
Самое важное правило обучения игровому программированию: учиться программированию сложно. Изучать игровой дизайн сложно. Научиться создавать хорошие игровые произведения или аудио сложно. Попытка сделать все эти вещи одновременно - рецепт неудачи. Учиться одной вещи за раз.
Следствие: запрограммируйте игру, в которой дизайн, искусство и звук уже сделаны. Делайте клоны, а не оригинальные игры.
На своих занятиях я всегда рекомендую запускать эти игры по порядку:
1) тетрис. Искусство это цветные прямоугольники, которые можно нарисовать даже в Microsoft Paint. Вам не нужен звук. Программирование относительно простое, но все же требует нескольких ключевых вещей: понимание разницы между внутренним состоянием игры и тем, что нарисовано на экране; возможность рисовать на экране, точка (вероятно, с участием спрайтов и блиттинга); возможность принимать пользовательский ввод в реальном времени, а не просто с помощью getch () или scanf (), где их нужно ждать.
2) Прорыв / Арканоид. Искусство по-прежнему цветные прямоугольники, и вам все еще не нужен звук. Используются все основные понятия тетриса, а также некоторые базовые средства обнаружения столкновений и 2D физики, поскольку мяч должен плавно двигаться и отскакивать.
3) Gradius / R-Type. Вы можете найти некоторые бесплатные наборы плиток, чтобы сделать это. Здесь фон прокручивается, поэтому вам нужно больше узнать о том, как работает графическая память, используя такие методы, как перелистывание страниц и двойная буферизация, а также рисование вне границ видимого экрана. У вас также есть склонность к динамическому появлению врага и пули, поэтому вам нужно научиться убирать за собой (то есть избавляться от врагов и пуль, которые покидают экран, чтобы ваша игра не теряла память как сито).
4) Super Mario Bros. Аналогичен предыдущему проекту прокрутки, за исключением того, что прокрутка теперь находится под контролем игрока, а не автоматически. Вы также должны иметь дело с гравитацией и всеми забавными столкновениями, которые сопровождают ее (например, не провалиться сквозь пол только потому, что вы были на несколько пикселей выше в последнем кадре и хотите перейти на несколько пикселей ниже в следующем кадре). ). Также обратите внимание, что гравитация условна: она влияет на игрока и некоторых врагов, но обычно не на платформы или плавающие монеты или что-то еще, что немного отличается от реального мира.
Если вы можете сделать все четыре из них, вы сможете сделать практически любую 2D-игру, какую захотите; все инструменты есть. Если вы хотите создать 3D-игру ... сначала изучите 2D, потому что это намного проще, и вам не нужно углубленно понимать математику, и вам все равно нужно разбираться в 2D-вещах ... а потом, когда вы начните работать с некоторыми базовыми инструментами 3D (библиотеками, такими как Torque или Unity, или играми с открытым исходным кодом, такими как Doom и Quake).
Удачи!
Теперь это действительно хороший вопрос. Я не знаю, где вы, поэтому я собираюсь взлететь до небес и предположить, что вы никогда не писали ни одной строчки кода в своей жизни. Отрежьте любую часть носа, оскорбляющую вас, чтобы оскорбить фразу.
Я думаю, что на самом деле я собираюсь ответить на несколько иной вопрос, чем тот, который вы задали, и я приведу примеры, чтобы удовлетворить вопрос, который вы задали на месте. Причина, по которой я делаю это таким образом, небольшая, но я считаю, что существенная разница во взглядах: важны не только конкретные игры, но и образ мышления, который эти игры приносят дизайнеру.
Вы знаете, как люди говорят о том, что вы должны изучать различные языки программирования, чтобы съесть их образ мыслей, их сердца и печень, и таким образом обрести их могущественную силу? В этом есть реальная правда - после вашего первого чистого или почти чистого языка программирования, даже на императивных языках, вы в конечном итоге будете писать функции, в основном свободные от побочных эффектов, потому что они намного лучше определены, и все, что вы пишете даже на языках не той формы будет лучше для него. Не имеет особого значения, какой это язык - шаблоны haskell, ml / ocaml / smlnj, Formone, c ++ и т. Д. - вы все равно будете учиться тому, как выполнять много классов работы, не полагаясь на состояние побочного эффекта. В первый раз, когда вы выучите прочный, машинный язык программирования, вы собираемся узнать об абстракции типа размера. В первый раз, когда вы изучите декларативный или ограничивающий язык, вы узнаете об ограничении как о дискреционном инструменте. В первый раз, когда вы изучите поисковый язык, вы научитесь молиться, я! Ia! C'thulhu F'tagn Nagn !, а затем мы снова едим сердца и печень, и круг жизни завершается.
Дизайн игры ничем не отличается. Вам не обязательно нужно изучать какую-то конкретную игру параллельно с конкретным языком, а скорее изучать какую-то символическую репрезентативную игру, которая обрабатывает это мышление, например семейства языковых характеристик. Кроме того, есть много печени и сердец. Получите перец крекер.
Загвоздка здесь (как я понимаю, по крайней мере) заключается в том, что вы хотите охватить большой список тем. Это все равно что отмечать умения на листе персонажа - вы предоставляете себе больше механизмов, с помощью которых можно справиться с данной ситуацией. Да, они способны к уровню, но наличие одного-двух пунктов во всех возможных вещах означает, что когда приходит время использовать один из них, вы начинаете не с нуля и знаете, какая тактика доступна для вас, чтобы увеличить.
Итак, смотри.
Сначала вы хотите порезать зубы. Они также полезны, когда вы учитесь ориентироваться на новую платформу или восстанавливаетесь после амнезии. Это должно быть быстро, а не круто.
Для того, чтобы:
После того, как вы разберетесь с ними, вы будете готовы к выбору платформы, и обучение может начаться.
Это не в определенном порядке. Вы можете переставить их, как считаете нужным. Я собираюсь привести несколько примеров с каждым, но они не являются нормативными; если другая игра дает вам такой же опыт, и она достаточно мала, чтобы быть частью серии уроков, не стесняйтесь менять ее. По практическим соображениям полезно быть опытным в отрисовке экрана и вводе данных относительно быстро; ты собираешься использовать их много. Подождите несколько игр, прежде чем пытаться писать классы абстракции; Вы не хотите быть пойманным в наивной абстракции.
... эх. Мне стало скучно.
Tetris
Очень распространенная игра, множество клонов с открытым исходным кодом, которые можно разорвать, если вы застряли. Преподает основы 2D-графики, обработки ввода, оценки и т. Д.
Затем возьмите эту оригинальную идею и раскрутите ее. Я изучил основы 3D-графики / opengl, написав 3D-версию Tetris для своего класса компьютерной графики в колледже.
В GameDev.net есть хорошая статья, в которой рекомендуется продвигать игры, чтобы постепенно узнавать о разработке игр. Мой любимый совет из списка - на самом деле полировать эти игры. Полностью закончить, до высвобождаемого состояния.
Список выглядит следующим образом (некоторые из них приведены в других ответах):
Мне нравится начинать всех моих парней с Монополии. Я обычно использую монопольную «код-ката» Бретта Шухерта в качестве основы упражнения, но я добавляю в нее многое. Есть несколько причин, почему мне действительно нравится это делать.
Я глубоко забочусь о хороших методах кодирования (шаблоны проектирования, TDD, SOLID, непрерывная интеграция и т. Д.) И налагаю много ограничений на моих разработчиков, когда они выполняют это упражнение.
Практически все знают правила Монополии, и вся игра может быть завершена за один день. Это дает новым разработчикам быструю победу и действительно повышает их заинтересованность.
Начальные требования начинаются с элементов управления клавиатуры, но затем я добавлю требование для элементов управления мышью. Это заставляет разработчиков задуматься о нескольких вещах: о том, как реорганизовать существующий код, программировать замену частей системы на интерфейсы вместо конкретных классов, более качественные / правильные абстракции, что нужно для модульного тестирования, что не для модульного тестирования, ПОЧЕМУ для модульного тестирования и что делает для хороших юнит-тестов.
Иногда мы подключаем более сложный ИИ, иногда нет. Иногда мы работаем с другими настольными играми с немного более сложной логикой, такой как «Лотки» и «Лестницы» или что-то в этом роде. Иногда мы полностью отрываемся от настольных игр и играем в покер или блэкджек.
Для меня очень важно то, что люди быстро выигрывают и видят, насколько гибко вы можете создавать программное обеспечение, если вы следуете хорошим стандартам программирования. Эти упражнения очень быстро укрепляют уверенность. Иногда более опытным разработчикам нравится делать это самостоятельно, просто чтобы отдохнуть от более сложных проектов или отработать новую технику, которую они только что изучили (закон Деметры?).
Выбрать-Your-приключение
Получил этот совет от друга, который начал программировать, создав игру, очень похожую на книгу по приключениям . По сути, это простая текстовая приключенческая игра с таким выводом:
You are standing in a forest clearing in the middle of the night. You hear
some wolves howl in the distance. Should you:
a) make camp for the night
b) go further north
> _
Создание такой игры должно научить вас делать геймплей, базовый консольный ввод и базовые сценарии. Это довольно просто реализовать и легко освоить новичку, поскольку для написания игры вам не нужен графический движок . Опытные новички, вероятно, написали бы скриптовый движок.
По моему опыту работы с начинающими программистами, прогрессирование обычно выглядит примерно так:
Прорыв, Понг или Астероиды.
Существует огромная разница между игрой и прототипом игры . Если вы серьезно относитесь к завершению игры своей мечты, то вы должны закончить свои игры «начального уровня» по пути. Создание игровой части игры - это только полдела. Все дополнительные вещи, такие как меню и высокие баллы, часто упускаются из виду или игнорируются, но занимают гораздо больше времени, чем кто-либо мог ожидать.
В других ответах есть несколько хороших предложений, но я просто хочу подать свой голос за: Начните с того, что кажется слишком бесполезным для решения.
Понг хороший пример.
Цель состоит в том, чтобы сделать дизайн игры и правила настолько мертвыми, что вы могли бы сосредоточить все свое внимание на изучении новой вещи, которую вы изучаете (язык, платформа, API), и вам не придется постоянно делайте перерывы, чтобы понять, как работает игра.
Как только вы начнете, вы обнаружите, что понг на самом деле немного сложнее, чем кажется на первый взгляд. (Я учу парня программированию, и он использует понг в качестве учебного проекта. Мы добавили некоторые функции, и теперь он отвлекается от обучения программированию, изучая, как выполнять все эти интересные функции :)
После того, как вы сделали приложение № 1 до тех пор, пока оно не будет готово отдать / продать другим, ТОГДА возьмите что-то немного более сложное (тетрис, приключение или что угодно), но, чтобы начать изучать новую технологию, То, что вы программируете до смерти просто.
Другие примеры:
Но, опять же, начните с чего-то слишком легкого, чтобы вы могли действительно что-то завершить, оглянуться назад и посмотреть, что с этим связано. Разница между написанием ОДНОГО приложения на языке / платформе / SDK / движке и написанием ZERO-приложений огромна . Разница между 1 и 2 или 2 и 5 намного меньше, поэтому вы можете делать большие шаги, но сделайте шаг от 0 до 1 крошечным; это будет больше, чем вы думаете!
Flappy Bird
Изучение языка / технологии" - аналогично. Как профессиональный программист, это работа во второй половине дня (ну, выходные, чтобы получить ее «хорошо»), но, обучая другого программированию, мы узнали, что на самом деле у нее много маленьких сложностей. Опять же, один опыт гораздо больше, чем ноль, и, когда он у вас есть, у вас будет гораздо лучшее представление о том, как двигаться вперед.
Посетите этот веб-сайт: 12 идей компьютерных игр
Некоторые из этих игр включают то, что говорили другие:
Но это также говорит о некоторых других играх, которые вы можете попробовать сделать, таких как:
Кроме того, он дает представление о том, что вы должны попытаться сделать в первую очередь, поскольку он дает ощущение сложности для каждой игры (и, следовательно, план того, как вы должны решать игры):
Многие люди начинают с Breakout, потому что он имеет:
Самая сложная часть в написании игры - или любого программного обеспечения - это выяснить, что делать. Вам абсолютно необходима спецификация! Это забавная часть создания клона существующей игры: спецификация уже существует. Ваша спецификация - «Продукт должен делать все, что делает другой продукт», и если у вас есть копия другой игры под рукой, это довольно легко проверить.
После того, как вы выяснили, что вам нужно делать, выяснить, как это сделать, на самом деле не так уж сложно, если вы компетентный программист. Я не имею в виду опытного или опытного программиста; это будет означать, что вы уже знаете, как сделать большую часть того, что вы пытаетесь сделать. Но вы должны понимать, как мыслить в абстракциях, и иметь навыки решения проблем и логического мышления, которые являются фундаментальными для программирования. Если вы можете сделать это, то вы можете сделать что-нибудь.
Сказав это, я не согласен с тем, что большинство людей говорят о попытке научиться писать игры, написав что-то действительно простое. Награда прямо пропорциональна усилиям, которые вы вложили в нее. Если вы научитесь писать игры, написав действительно простую игру, в конце концов вы поймете, как писать действительно простые игры, и это не принесет вам большой пользы.
С другой стороны, если вы начнете с чего-то ошеломляющего, вы никогда не закончите это. Поэтому начните с чего-то умеренно сложного, что заставит вас справиться с серьезными проблемами. Создание 2D RPG в стиле консоли или платформера с боковой прокруткой - очень хороший способ изучить реальные концепции программирования игр.
Это действительно зависит от вашей текущей компетенции. Если вы относительно новичок в программировании, тогда выбирайте одну из конкретных игр, предложенных людьми. В противном случае вам следует подумать о том, какие игры позволят вам эффективно использовать свой опыт.
Когда я начинал свою первую игру, у меня не было опыта разработки игр, но я занимался разработкой приложений для предприятий и бизнес-направлений в течение нескольких лет. Моим первым игровым проектом была пошаговая стратегическая игра, и с точки зрения архитектуры она не сильно отличалась от корпоративных приложений. Он использовал систему клиент / сервер, и связь осуществлялась через дуплексный сервисный канал WCF. Большинство операций игрока были поставлены в очередь как «заказы» и отправлены на сервер в конце хода. Вся обработка хода происходила на сервере, после чего обновления игровой вселенной отправлялись каждому клиенту.
Этот первый проект позволил мне продвинуться в разработке игр и начать знакомство. По мере развития проекта я научился думать больше как разработчик игр, а не как разработчик корпоративных приложений. Конечный результат работал довольно хорошо, и он был немного более впечатляющим, чем Battleship или Tic-Tac-Toe :).
Относительно простой ИИ, Графика, Геймплей, Элементы управления, и они не должны иметь звуковые эффекты или музыку, если вы не хотите добавить это. Я начал с этих двух, когда учился программировать в QBasic для MS-DOS, и я думаю, что они отличные первые игры. Pac-Man был бы моим другим выбором.
Великолепные игры в стиле Moonlander (где у вас есть космический корабль, на который влияет гравитация, игроки контролируют направление и тягу, ограниченное топливо при использовании тяги). Получить опыт реализации очень простой физики и системы столкновений может быть довольно примитивно. Не нужно беспокоиться об ИИ, а главное о его веселье и привыкании :)
Космический шутер с видом сверху вниз, такой как Galaga, довольно прост и достаточно хорошо учит обнаружению столкновений! Он также может различаться по сложности, от уровня со стационарными врагами, до нескольких уровней, которые улучшают оружие и врагов, которые перемещаются по специальным паттернам.
Что-то вроде Gauntlet, потому что вам нужна система сущностей, искусственный интеллект противника, пикапы, карты тайлов, обнаружение столкновений, подсчет очков и т. Д. У него все есть, но не так, как это подавляет.
Мини-клон Zelda хорош и обладает некоторыми навыками, которые здесь не упоминались. Прокрутка большой карты тайлов и простое управление движением в 8 направлениях полезно знать. Бонусные баллы, если вы можете сделать врагов, но я бы не стал слишком беспокоиться об этом.
Я сделал больше, чем несколько клонов тетриса. Каждый раз, когда я делал это, я делал это немного иначе. В настоящее время я обычно делаю что-то вроде клона астероидов. Я также сделал больше, чем несколько дополнительных доходов от Missile Command.
Я начал с основного игрового процесса, а затем перешел к добавлению новых вещей, бонусов и т. Д. К нему.
Я всегда начинал с игры Танки / Гориллы / Черви. Он позволяет вам выполнять упражнения с простым графическим отображением и чтением пользовательского ввода, а также игровой цикл, применяющий гравитацию к снаряду и тестирование на обнаружение столкновений.
После этого должна появиться игра, похожая на очень простой платформер или стрелялку, в которой вам нужно читать ввод пользователя в режиме реального времени, а не операторы INPUT, которые работают для горилл :)
Пасьянс (или, на самом деле, любая карточная игра) - хорошая игра, чтобы запачкать руки новой системой пользовательского интерфейса, так как она использует множество механизмов обратной связи для взаимодействия виджетов и контроллеров, которые вам необходимо использовать. Плюс логика для этого проста и однозначна, так что вы можете сосредоточиться на обучении, а не на дизайне игры.
Для игр-симуляторов в реальном времени я бы всегда рекомендовал Понг в качестве хорошей простой отправной точки, опять же, потому что дизайн прост, как и интерфейс контроллера, так что вы можете получить представление о сути системы - физическом моделировании.
Я всегда утверждал, что если вы программист игры, у вас должна получиться какая-то форма Space Invaders . Черт возьми, игра достаточно проста, чтобы вы могли делать графику и сами.
Наличие в вашем портфолио небольших игр в качестве дополнительного преимущества от того, что они весьма полезны, например, если я изучаю новый язык программирования или фреймворк, я часто портирую одну из моих простых игр, чтобы увидеть, как новый способ делать вещи совпадают с тем, как они были написаны в оригинале.
Это действительно зависит от того, какие навыки у обычного программиста у вас уже есть. Ваша математика нуждается в работе? Ваши графические знания? У вас есть оба под завязками?
Хотя в целом я думаю, что тетрис и прорыв будут моими стартерами. Все, что проще, не дает достаточно стимулов. Тетрис является хорошим тестом для разметки ваших данных в качестве алгоритма. Прорыв - это легкий пример математики. Я всегда говорю людям ставить высокие цели, цель - застрять и найти решение.
После этого небо - предел. Опять же, цель высоко. Попробуйте платформер с наклонным рельефом, парралаксом, и вы получите хорошую сумку 2d tech handy. Добавьте пинбол (приготовьтесь расстраиваться), и ваша математика улучшится.
Оттуда перейдите в третье измерение, изучите основные навыки (анимация, рендеринг), и вы должны быть относительно хорошо экипированы, чтобы справляться с большим разнообразием игр.
Моей первой игрой было что-то вроде Super Mario.
Передвигаться, избегать препятствий, прыгать. И все эти задачи могут быть легко выполнены без каких-либо физических расчетов.
Идеально взять простую двумерную вещь, так как вы не будете сильно полагаться на конкретную реализацию / фреймворк / движок.