Java игра за день или два [закрыто]

9

Мы три человека , которые собираются сделать простую игру на Java как школьный проект (Университет, первый год). Игра должна быть объектно-ориентированной. У нас мало времени, топы по 10-20 часов . Никто из нас не имеет никакого опыта в разработке игр, но у всех нас есть хорошие навыки в Java.

Мы можем точно выбрать, какая игра, и в этом проблема. Как высоко мы должны стремиться? В конкурсе участвуют, поэтому мы хотим сделать лучшую игру за то время, которое у нас есть. 3D игра нереальная? Должны ли мы использовать какие-либо игровые движки / библиотеки? Какой функциональности нам следует избегать?

Øyvind
источник
4
3D нацеливается слишком высоко, независимо от времени, учитывая, что у вас нет опыта игры. ; P
Коммунистическая Утка
к сожалению, я понял, что: P
Ойвинд
ПОНГ! весла, мяч есть собственные объекты, добавить оценку. мяч ударяется о весло, умноженное на направление на -1. если мяч проходит точку затвора другой командой, пусть мяч подает другому игроку. или это слишком просто?>
Spooks
Я думаю, может быть, мы должны стремиться к лучшей, более креативной концепции, хотя ее легко разработать ...
Эйвинд
1
Как насчет того, чтобы поделиться с нами своей игрой? :)
ashes999

Ответы:

23

Избегайте 3D , потому что вам нужно знать, как создавать 3D-модели или находить хорошие, вам нужно знать, как загружать такие модели (к сожалению, само по себе эпическое задание) и как рисовать их на экране (например, OpenGL или DirectX требуют много работы за небольшую выгоду, и даже такой движок, как jMonkeyEngine, требует знаний о том, как использовать движок, а также базовых знаний в 3D). Бить 2D-изображения на экране и перемещать их гораздо проще, чем иметь дело с вершинами, материалами, матрицами представления, преобразованиями и т. Д. И т. Д. Я думаю, вы поняли смысл.

Придерживайтесь встроенных библиотек и классов Java: Graphics2D, ImageIO, слушателей мыши и клавиатуры AWT, Canvas, Java Sound API и так далее. Преимущества использования их вместо поиска какой-либо другой библиотеки включают: вы уже знаете их (в некоторой степени), вы знаете, что они хорошо протестированы и стабильны, и, как правило, имеют смысл, онлайновая документация и ресурсы многочисленны, и они портативны, так что вам не нужно беспокоиться об установке дополнительных библиотек с собственными библиотеками и тому подобное.

Создайте небольшую библиотеку фрагментов кода заранее. Это может включать в себя такие вещи, как загрузка изображения, рисование изображения на экране, масштабирование изображения и другие эффекты, воспроизведение звука, циклическая фоновая музыка, обнаружение столкновений ограничивающего прямоугольника, рисование текста. Также есть скелетное приложение, которое открывает фрейм (или апплет), добавляет к нему Canvas, и методы рисования и перерисовки холста должны быть переопределены, а поток должен зацикливать метод перерисовки холста (или таймер, вызывающий его). Вы можете узнать эти вещи, если вы ищете вокруг Java 2D game programming. Предполагая, что у вас есть доступ к библиотеке вашего университета, у вас должно быть несколько хороших книг по Java-играм; проверьте их и просмотрите их на предмет вышеупомянутых фрагментов и других, которые я пропустил.

Практикуйте контроль источников и разделение работы с вашей командой заранее.Собираетесь ли вы использовать Subversion, Git, Mercurial или что-то еще? Все компьютеры настроены на одну и ту же последнюю версию Java? Создайте свой репозиторий, зафиксируйте / отправьте несколько файлов, убедитесь, что у всех есть репозиторий, извлеченный и готовый к работе в вашей системе. Возможно, зафиксируйте приложение «hello world» и убедитесь, что каждый может вытащить, изменить и зафиксировать его; и убедитесь, что вы знаете, как справляться со слиянием (независимо от того, избегаете ли вы этого с помощью хорошей коммуникации или парного программирования, или знаете, как использовать инструмент слияния). Или, если вы не знакомы с управлением исходным кодом, убедитесь, что вы нашли решение, которое работает; будь то парное программирование, в то время как третье лицо пишет музыку или звуки, или что-то еще, просто убедитесь, что все организовано с самого начала, иначе вы потратите кучу времени.

Добавьте ссылки на сайты, которые предоставляют бесплатные медиа. Там было довольно много сайтов такого типа, перечисленных в других вопросах здесь; такие сайты, как freesoundидеально подходят для быстрого поиска полезных медиа для использования в вашей игре, когда у вас нет времени, чтобы сделать это с нуля. Добавьте этот сайт в закладки, чтобы вы могли задать вопрос, если вы застряли на чем-то. Добавьте в закладки форумы, такие как gamedev.net, чтобы вы могли искать на них ответы. Если вы решили использовать стороннюю библиотеку, добавьте в закладки их веб-сайт. Организуйте эти закладки в папки и соберите как можно больше, и делитесь ими, чтобы у всех вас была одна и та же полезная библиотека закладок. Это не займет много времени, чтобы обойти и собрать эти закладки и упорядочить их по типу / теме, но это сэкономит вам много времени, когда вам не нужно помнить все эти сайты в середине вашего проекта.

Дополнительные предложения см. В ответах на мой вопрос «Как подготовиться к соревнованию по разработке игр?» ,


Чтобы ответить на остальную часть вашего вопроса ... Общий совет: не ставьте высокие цели . Тем не менее, он может широко варьироваться в зависимости от того, насколько вы подготовлены (то есть мои вышеупомянутые предложения) и ваших навыков в Java. Это в значительной степени личное суждение, основанное на вашей истории, но, поскольку никто из вас не имеет опыта создания игр (и, следовательно, не может судить о необходимом времени), стремитесь к по-настоящему низкому уровню . Придумайте действительно базовую идею, которая может быть легко реализована в 2D без каких-либо дополнительных концепций (например, избегать пиксельных столкновений, сумасшедших физических расчетов, эффектов частиц и т. Д.). Но затем создайте список приоритетово возможностях игры, как можно более подробно (например, разбить каждую функцию на как можно больше отдельных задач). Таким образом, вы просто продвигаетесь вниз по списку, насколько это возможно, и, если вы не доберетесь до некоторых низко приоритетных задач, это не должно иметь большого значения. Это должно быть сделано осторожно (вам все еще нужна функциональная игра в конце времени, поэтому существует минимальный набор задач, которые необходимо выполнить, а некоторые задачи зависят от других задач), но в целом я думаю, что это лучший подход, когда вы не знаете, как много времени займет.

Ricket
источник
Это отличный совет.
Александр Гесслер
1
Хорошие моменты. Хотя я думаю, что контроль версий также может усложнить задачу для начинающих (представьте, что кто-то испортил репо). Когда время критично, не стоит начинать использовать новые инструменты. Но если вы уже знакомы с VCS, то это, безусловно, следует использовать.
bummzack
4
Совет Рикета о том, чтобы стремиться к низкому уровню и использовать список приоритетов, великолепен - он сводит к минимуму риск и увеличивает количество итераций. Вы хотите избежать ситуаций, когда вам нужно работать в течение 8 часов, прежде чем вы что-то запустите. Если это не сработает или если это займет больше времени, вы можете ничего не получить. Вместо этого попробуйте запустить игру менее чем за 1 час, а затем потратить оставшиеся 10 часов на добавление вещей, тестирование игры, усовершенствование. По мере игры вы будете находить больше вещей для добавления.
amitp
@bummzack Согласен! Это может ДЕЙСТВИТЕЛЬНО мешать, таким образом, практика и уверенность в этом являются ключевыми, но это также может быть супер удивительным и полезным, если используется правильно.
Рикет
Лучшее, что нужно сделать, чтобы все работало быстро, - это делать это экстремальным способом программирования (лучше, чем svns), что означает, что целые команды сидят вместе перед одним компьютером. Отлично работает в небольших командах (2-3 макс.) Вы поддерживаете друг друга, и проблемы решаются быстрее - вы не расстраиваетесь.
Нотабене
2

Не цельтесь слишком высоко. Выберите то, что вас интересует, и постройте что-нибудь простое вокруг этого. Пример: Может быть, вы действительно заинтересованы в изучении физического движка. Почему бы не создать физическую головоломку, такую ​​как тотем-разрушитель или что-то подобное? Попробуйте вращаться вокруг основного элемента и не включать в себя другие сложные вещи, такие как AI, сложные рендеринг / графика / шейдеры и т. Д.

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

Не пытайтесь изучать слишком много нового одновременно. Максимально используйте существующие фреймворки / инструменты.

Чтобы подвести итог, вот несколько идей для игры «Начало работы»: Какими хорошими играми можно «заработать свои крылья»?

Обновление: так как у вас очень мало времени, я бы сократил «новые вещи для изучения» до абсолютного минимума. Физический движок уже может быть излишним, если вы никогда не использовали его раньше. Также выберите механику игры, которую вы уже знаете, желательно с четко определенным и небольшим набором правил и ограниченным количеством игровых состояний.

bummzack
источник
2

Если у вас нет опыта написания 3D-игр, я бы сразу отбросил идею 3D. Вместо этого сосредоточьтесь на простой игровой концепции и попытайтесь реализовать ее, используя простую 2D-графику. Сначала убедитесь, что вы реализовали игровую механику - если вы закончили ранее, вы все равно можете добавить сложные визуальные эффекты.

Но игра без геймплея не игра, а игра без потрясающей графики все еще может быть веселой.

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

Александр Гесслер
источник
Хороший момент действительно :)
Ойвинд