Если бы я хотел сделать игру Pac-Man?

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

Проще говоря: мы с другом из колледжа решили поставить перед собой действительно серьезную задачу, чтобы развить наши навыки в программировании. Через полгода мы хотим показать себе игру Pac-Man. Pac-Man будет управляться ИИ, как Ghosts, и тот Pac-Man проживет дольше всех после серии попыток.

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

Итак, мой вопрос таков: как мне начать готовиться? Я уже начал заниматься векторной математикой, матрицами и прочими забавными штуками. Моя желаемая платформа — DirectX 9.0c; это целесообразно? Имейте в виду, что это предпочтение не только для этого проекта, но я хочу иметь какое-то будущее в разработке графики, поэтому я хочу выбрать платформу, которая будет безопасна в будущем.

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

Больше всего меня беспокоят подводные камни и демотиваторы.

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


person Community    schedule 06.06.2010    source источник
comment
Взгляните на http://www-cs-students.stanford.edu/~amitp/gameprog.html, это может помочь в некоторых темах.   -  person tur1ng    schedule 07.06.2010
comment
Какая крутая страница! Большое спасибо за ссылку!   -  person IAE    schedule 07.06.2010
comment
DirectX-эквивалент Hello World! заключается в том, чтобы нарисовать один треугольник на экране, используя систему рендеринга. Попробуйте выполнить поиск DirectX, чтобы нарисовать один треугольник. ;)   -  person Heath Hunnicutt    schedule 07.06.2010
comment
@tur1ng: добавление этой ссылки в закладки. Спасибо!   -  person chaosTechnician    schedule 09.06.2010


Ответы (7)


Учитывая, что вы еще не пробовали подобные вещи, вот несколько вещей, которые я бы порекомендовал.

Начните с чего-нибудь другого, кроме DirectX (и, предположительно, C++)

DirectX и C++ открывают вам множество низкоуровневых вещей, которые вы можете изучить позже. Сохраняйте простоту и, возможно, попробуйте XNA и C#, которые достаточно близки, вы сможете портировать их позже, но на данный момент это позволит вам пропустить многие вещи, такие как управление памятью и указатели.

Начните с 2D вместо 3D

Оригинальный Pacman 2D, так что вам пока не нужна векторная математика.

Итак, что вы оставляете?

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

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

Я бы пошел по этому пути (приказано, чтобы все было весело и интересно)

  1. Получите отображение экрана - это очень наглядно
  2. Получите Pacman, отвечающий на пользовательский ввод
  3. Заставьте Пакмана запереться в стенах
  4. Получите призрака, отвечающего на вторичный ввод пользователя — вы можете преследовать друг друга
  5. Выяснить некоторые обнаружения столкновений
  6. Получите рендеринг точек и силовых таблеток, чтобы вы могли забивать и есть призрак
  7. Визуализируйте еще несколько призраков и разберитесь с ИИ
  8. Разработайте код для определения завершения уровня
  9. Сделайте изменение карты и сброс состояния при переходе на новый уровень

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

person Community    schedule 06.06.2010
comment
Привет! Спасибо за комментарий, но поясню: я не совсем новичок в программировании игр. Я уже делал защиту башни на ActionScript и уже программировал на XNA C#, так что я хорошо знаком с игровым циклом и некоторыми процессами, хотя и не слишком многими. Причина, по которой я хочу сделать это с C++, заключается в том, что это настоящий язык программирования, используемый в большинстве игр, а также основной язык, который преподают на курсах колледжа. Тем не менее, я ценю комментарий и приму ваши комментарии близко к сердцу ^^ Особенно о 2D-дох! Должен был понять, что векторы могут не вступить в игру. - person IAE; 07.06.2010
comment
Замечательно! Я бы по-прежнему придерживался последовательности, подобной описанной выше, если вы не хотите падать духом. Попытка написать такие вещи, как ИИ, до того, как вы сможете визуально увидеть его в действии, — болезненный процесс;) - person DamienG; 07.06.2010
comment
Да, именно поэтому я моделирую свои алгоритмы поиска пути в Excel, вы можете точно видеть, что происходит (и вы получаете репутацию сумасшедшего парня из Excel в компании). - person Grant Peters; 07.06.2010

Мне пришлось написать игру pacman на Java для класса OO. Я обнаружил, что это очень просто, возможно, за исключением выяснения лучшего способа нанести на карту стены. После небольшого исследования я наткнулся на это: http://javaboutique.internet.com/PacMan/source.html, который использует битовый сдвиг для определения стен. Это выглядит как излишняя сложность, но я нашел это довольно элегантным после того, как немного поигрался с математикой. Помимо этого, pacman — очень дружественная к массивам концепция, так что используйте массив для доски, несколько основных спрайтов, повозитесь со скоростью и обновлением, отслеживайте игровые данные и запускайте их в цикле. Что касается ИИ с призраками, то о них написаны статьи. У каждого призрака есть определенная «стратегия». Или вы можете свернуть свой собственный... вы можете запрограммировать их так, чтобы они были такими же простыми, как всегда, направляющимися к pacman (или его общему местоположению/квадранту), или настолько сложными (кратчайший путь), как вам хотелось бы.

person Community    schedule 06.06.2010

Играй в пакмана! Это первая задача для вашего проекта!

person Community    schedule 06.06.2010

Я бы посмотрел на код сборки оригинального игрового автомата для Pacman и описание того, что он делает. Это настоящее открытие :)

person Community    schedule 16.04.2011

Лично я сделал бы следующее:

  • изучайте игры с открытым исходным кодом, чтобы увидеть, что они делают
  • купите книгу о программировании игр (на самом деле у меня есть книга о программировать игры уже, но вы, вероятно, хотите что-то более свежее)
  • выберите набор инструментов/библиотеку для разработки игр (Sourceforge, Код Google)
  • поработайте с учебными пособиями, которые поставляются с этой библиотекой, возможно, перейдите на другую библиотеку, если API слишком странный
  • подготовить документ с требованиями
  • составьте дизайн первого прохода («планируйте выбросить один»), попросите кого-нибудь проверить его
  • определиться с планом тестирования
  • составить расписание не потому, что я хочу придерживаться графика, а потому, что хочу разбивайте вещи на легко определяемые задачи
  • написать самую маленькую полную игру, которую я мог бы (например, спрайт Pac Man, которым я могу управлять внутри окна: без лабиринта, призраков, очков, жизней, способности умереть и т. д.)
  • добавлять функции в эту игру, пока я не реализовал все это
person Community    schedule 06.06.2010
comment
Это довольно солидные идеи. Только один вопрос, что бы вы определили как странный API? - person IAE; 07.06.2010
comment
Прежде чем делать что-либо из вышеперечисленного, я устанавливал систему контроля версий и знакомился с ее использованием. - person ; 07.06.2010
comment
Поместите это в мой список, спасибо! Можете что-нибудь конкретное порекомендовать, или, скорее, поэкспериментировать и убедиться в этом самому? - person IAE; 07.06.2010
comment
@SoulBeaver Поскольку вас двое, и вы, вероятно, не хотите запускать централизованный сервер, лучшим выбором будет DVCS, такой как Mercurial. Есть МНОГО вопросов о том, какие DVCS? здесь - пожалуйста, не начинайте новый! - person ; 07.06.2010
comment
Вы можете определить странно. Некоторые API исходят из школы мысли MFC (в основном происходят от наших классов, прежде чем вы сделаете что-либо еще, и позволяют нам обрабатывать main()), другие просто предоставляют тонкую оболочку над OpenGL. У других другая основная философия. Вы, вероятно, обнаружите, что с некоторыми API вам легче работать, чем с другими, но вы хотите узнать, не работает ли какой-либо API достаточно рано, чтобы без особых усилий перейти на что-то другое. Я бы хотел API, который обрабатывает такие вещи, как обнаружение столкновений. Вы хотите думать с точки зрения спрайтов, а не графических примитивов. - person Max Lybbert; 07.06.2010

Звучит как хорошая идея для учебного проекта! Две общие вещи, которые я рекомендую для вашего подхода:

  1. работа в итерациях
  2. попутно читал кучу про C++ и DirectX

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

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

person Community    schedule 06.06.2010

Хорошая вещь! Я рад, что Pacman мотивирует и вдохновляет вас.

Вещи, чтобы начать.

1) Определитесь со средой разработки.

a) Are you building a standalone game or a networked game. 

b) Which language are you targetting at to improve? 

2) Насколько хорошо разбираетесь в ИИ?

3) Насколько хорошо вы разбираетесь в методах алгоритмов программирования, таких как поиск пути A * (звезда), алгоритм Дейкстры, обнаружение столкновений, тестирование попаданий или даже рекурсивное программирование?

4) Кто-нибудь из вас талантлив в графическом дизайне?

Удачи.

P/S К вашему сведению, если бы мне нужно было написать игру Pacman, я бы сделал это на C# и Silverlight 4.0 (я могу комфортно писать на C++, но мой приоритет — запрыгнуть на подножку Silverlight).

person Community    schedule 06.06.2010