Відповіді:
Прорив
Проста гра, оскільки у вас не дуже багато турбуватися (це масив значень цегли - якщо у вас є лише один колір цегли, це масив прапорів), AI не існує, і ви повинні зробити трохи фізики, щоб м'яч правильно відскочив.
Пасьянс
Правила трохи складніші, ніж Breakout, і інтерфейс до нього набагато інший. Це змушує задуматися про різні методи реалізації гри. тобто те, що працює в одній грі, не є обов’язково тим, що ви використовували б в іншій.
Pac-Man
Цей приємний тим, що ти хочеш трохи попрацювати над AI. Якщо примари слідують за гравцем (але не надто добре - ви хочете, щоб у гравця був шанс), можна швидко реалізуватись, і у вас буде весела маленька гра, яку можна налаштувати та показати друзям та родині (позитивний відгук завжди є гарна річ, коли ви починаєте).
Я вважаю, що якщо ви шукаєте натхнення в ранніх відеоіграх, ви зможете знайти безліч ідей, які досить просто здійснити. Крім того, ви можете піти від надзвичайно простих творів мистецтва та звуків, оскільки ви все одно копіюєте щось таке просте. Це дозволяє спершу зосередитись на основах - підняття циклу гри та запуску, з'ясування способів виведення пікселів на екран, відтворення звуку, збереження балів, отримання вкладу гравця в гру.
Це майже не має значення, яку гру ви обираєте першою - просто переконайтеся, що ви вибрали щось просте, з яким ви зможете отримати швидкі результати, таким чином ви зможете перейти на наступний день і зробити іншу. І ще. І інше - чим більше заробляєш, тим сильніше тиснеш на себе, і врешті-решт ти будеш робити складні ігри, перш ніж ти це знатимеш.
Я настійно рекомендую початківцям програмістам почати з найпростішої гри, яку вони насправді хочуть написати . Як згадував Метт Рікс, величезна частина написання гри проти демонстрації підштовхує прокляту річ до завершення - кредити, меню, тестування гри, високі бали, пауза, тестування, рівень складності, чисті переходи стану гри, гра тестування тощо. Цей матеріал займає принаймні половину часу, який ви збираєтеся вкласти, і це просто не цікаво. Це не так. Тож якщо ви не любите концепцію і не дійсно вмотивовані, ви відмовитесь і рухаєтесь до того, як гра буде грою .
Якщо ви хочете написати RPG, з’ясуйте найпростішу, найбільш керовану концепцію RPG, яку ви можете придумати, що ви хочете зробити і зробити це. Те саме, якщо ви хочете зайнятися науково-фантастичним шутером, або платформером з тематикою жахів, чи ще. Виберіть щось, що ви закінчите, і все одно захочете закінчити після того, як все буде зроблено весело, але ви все ще дивитеся на десятки годин роботи, перш ніж ви дійсно закінчите.
Найкраща гра, щоб «заробити крила»? Той, який ви закінчили. Мені байдуже, скільки напівзроблених демонстрацій PONG / Breakout / Galaga / Tetris ви написали, ви не розробник ігор, поки не випустите фактично завершену гру.
Крім того, ніхто не хоче грати в іншу версію цих 40-річних ігор, і принаймні деякий сенс написання ігор - це люди грати , правда?
Я розмістив цю драбину в TIGsource деякий час тому. Починається від самого основного до дуже складного.
Найголовніше правило навчання ігровому програмуванню: навчання програмуванню важко. Навчитися ігровому дизайну важко. Навчитися робити гарне ігрове мистецтво чи аудіо важко. Намагатися робити всі ці речі одночасно - це рецепт невдач. Навчіться одній справі.
Висновок: програмуйте гру, де дизайн, мистецтво та звук вже зроблені. Робіть клони, а не оригінальні ігри.
На своїх заняттях я завжди рекомендую розпочати ці ігри для того, щоб:
1) Тетріс. Мистецтво являє собою кольорові прямокутники, які навіть цілий безлад може малювати у Microsoft Paint. Вам не потрібен звук. Програмування відносно просте, але все ж вимагає декількох ключових речей: розуміння різниці між внутрішнім станом гри та тим, що намальовано на екрані; вміння малювати на екрані, період (ймовірно, з участю спрайтів і блиску); можливість приймати дані користувача в режимі реального часу, а не просто використовувати getch () або scanf (), де вам доведеться їх чекати.
2) прорив / арканоїд. Мистецтво все ще є кольоровими прямокутниками, і вам все одно не потрібен звук. Використовує всі основні поняття Tetris, а також деякі основні системи виявлення зіткнень та 2D фізику, оскільки м'яч повинен плавно рухатись і відскакувати.
3) Градіус / R-Тип. Ви можете, ймовірно, знайти кілька безкоштовних наборів плиток для цього. Тут фон прокручується, тому вам доведеться дізнатися трохи більше про те, як працює графічна пам’ять, використовуючи такі методи, як гортання сторінок та подвійне буферизація та малювання речей поза межами видимого екрана. Ви також схильні мати динамічні нерести для ворога та кулі, тому вам потрібно буде навчитися прибирати за собою (тобто позбавлятися від ворогів і куль, які залишають екран, щоб ваша гра не просочилася пам’яттю, як сито).
4) Super Mario Bros. Подібно до попереднього проекту прокрутки, за винятком того, що прокрутка зараз знаходиться під контролем гравця, а не автоматична. Ви також маєте справу з гравітацією та всіма веселими зіткненнями, що йдуть разом із цим (як, наприклад, не провалитися через підлогу лише тому, що ви були на кілька пікселів вище в останньому кадрі і хочете перейти на кілька пікселів нижче в наступному кадрі ). Також зауважте, що гравітація умовна: вона впливає на гравця та деяких ворогів, але, як правило, не на платформи чи плаваючі монети чи інше, що трохи відрізняється від реального світу.
Якщо ви можете виконати всі чотири з них, ви повинні мати можливість робити майже будь-яку 2D гру, яку ви хочете; всі інструменти є. Якщо ви хочете зробити 3D-гру ... спочатку вивчіть 2D, оскільки це набагато простіше, і вам не потрібно розуміти математику як глибоку, і все одно вам потрібно зрозуміти 2D речі ... а потім, коли ви Задовольнивши це, почніть працювати з деякими основними інструментами 3D (або бібліотеками, такими як Torque або Unity, або з іграми з відкритим кодом, як оригінальні Doom і Quake).
Удачі!
Тепер це справді гарне питання. Я не знаю, де ти, тому я буду розмахувати на небо, і припускаю, що ти ніколи не писав рядки коду в своєму житті. Відріжте все, що частина носа ображає вас, щоб зловживати фразою.
Я думаю, що насправді я відповім на дещо інше питання, ніж те, що ви задали, і я надам приклади, щоб задовольнити запитання, яке ви задали in situ. Причина, що я роблю це таким чином, є незначною, але я вважаю, що суттєва різниця в точці зору: важливі не стільки конкретні ігри, скільки стільки умонастрої, які ці ігри підносять дизайнеру.
Ви знаєте, як люди говорять про те, що ви повинні вивчити різноманітні мови програмування, щоб їсти їхні думки та їхні серця та їхні печінки, і тим самим здобувати свою могутню силу? У цьому є справжня правда - після першої чистої чи майже чистої мови програмування, навіть на загальнообов’язкових мовах, ви закінчите писати в основному безкоштовні функції з побічними ефектами, оскільки вони настільки краще визначені, і все, що ви пишете навіть мови, не такої форми, будуть для цього кращими. Не особливо важливо, на якій мові мова йде - шаблони haskell, ml / ocaml / smlnj, formulaONE, c ++, будь-який інший - ви все одно будете вчитися виконувати багато класів роботи, не покладаючись на стан сторонніх ефектів. Перший раз, коли ви вивчаєте міцну, майже машинну мову програмування, дізнаємось про абстракцію типу розміру. Перший раз, коли ви засвоїте декларативну чи обмежувальну мову, ви збираєтесь дізнатися про обмеження як дискреційний інструмент. Перший раз, коли ви навчитесь мові пошуку зворотних трендів, ви навчитеся молитися Іа! Іа! C'thulhu F'tagn Nagn !, і тоді ми знову їмо серця та печінки, і коло життя виконане.
Ігровий дизайн нічим не відрізняється. Вам не обов’язково потрібно вивчати будь-яку конкретну гру, паралельно певній мові, а навчитися певній емблематичній репрезентативній грі, яка керує таким мисленням, як, наприклад, сімейства, характерні для мови. Крім того, є багато їжі печінки та серця. Отримайте сухар з перцю.
Проблема тут (як я принаймні бачу) полягає в тому, що ви хочете висвітлити великий список тем. Це як би відбивати знання на аркуші символів - ви надаєте собі більше механізмів, за допомогою яких можна впоратися з певною ситуацією. Так, вони здатні до рівня, але мати крапку або дві у всіх кількох речах означає, що коли настає час використовувати один, ви не починаєте з нуля, і ви знаєте, яка тактика доступна для вас, щоб збільшити масштаб.
Отже, дивись.
Спочатку хочеться порізати зуби. Вони також корисні, коли ви навчаєтесь орієнтуватися на нову платформу або коли ви одужуєте після амнезії. Вони покликані бути швидкими, а не приголомшливими.
В порядку:
Після того, як ви їх знищили, ви готові орієнтуватися на платформу, і навчання може початися.
Вони не мають особливого порядку. Ви можете їх переставити, як вважаєте за потрібне. Я збираюся навести кілька прикладів з кожним, але вони не є нормативними; якщо інша гра дає вам однаковий досвід, і вона є достатньо малою, щоб бути частиною уроків, сміливо обміняйте її. З практичних причин добре бути досвідченим в екрані та візуалізації порівняно швидко; ти будеш використовувати їх багато. Зачекайте кілька ігор, перш ніж намагатися написати уроки абстракції; ви не хочете, щоб вас спіймали в наївній абстракції.
... е-е. Я знудився.
Тетріс
Дуже поширена гра, багато клонів з відкритим кодом, щоб зірватися, якщо ви застрягли. Викладає основи двовимірної графіки, обробки даних, введення балів тощо.
Потім візьміть цю оригінальну ідею і покладіть її на прядок. Я засвоїв основи 3D-графіки / opengl, написавши 3D-версію Tetris для мого класу комп’ютерної графіки в коледжі.
GameDev.net має хорошу статтю, в якій рекомендує прогресувати ігри, щоб поступово дізнатися про розвиток ігор. Моя улюблена порада зі списку - насправді відшліфувати ці ігри. Повністю закінчити, до звільного стану.
Список такий (деякі з них наведені в інших відповідях):
Мені подобається починати всіх своїх хлопців з Монополії. Зазвичай я використовую монографію «кодового коду» Бретта Шухерта як основу вправи, але я багато додаю до цього. Є кілька причин, чому мені дуже подобається це робити.
Я глибоко дбаю про хороші методи кодування (дизайнерські зразки, TDD, SOLID, безперервна інтеграція тощо), і можу створювати багато обмежень для моїх розробників, коли вони роблять цю вправу.
Вже майже всі знають правила Монополії, і всю гру можна завершити за один день. Це дає новим розробникам швидку перемогу і дійсно активізує свою діяльність.
Початкові вимоги починаються з клавіатурних елементів керування, але потім я додаю вимогу до управління мишею пізніше. Це змушує розробників замислюватися над кількома речами, як перефактурувати існуючий код, програмувати зміни частини системи на інтерфейси замість конкретних класів, кращі / правильні абстракції, що до тестового модуля, що не до одиничного тесту, ЧОМИ до одиничного тесту, ЧОМИ до одиничного тесту та чого робить для тестів GOOD Unit.
Іноді ми підключаємо більш складний AI, іноді - ні. Іноді ми працюємо з іншими настільними іграми з дещо складнішою логікою, на зразок жолобів і сходів, або чогось іншого. Іноді ми повністю відриваємося від настільних ігор і робимо гру в покер або блекджек.
По-справжньому важливою для мене є те, що люди отримують швидку перемогу, і вони бачать, наскільки гнучким ви можете зробити програмне забезпечення, дотримуючись хороших стандартів програмування. Ці вправи дуже швидко формують впевненість. Іноді більш досвідчені розробники люблять робити це самостійно, просто щоб відпочити від складніших проектів або застосувати нову техніку, яку вони тільки що вивчили (закон деметера?).
Виберіть-Ваш-Пригода
Отримала цю пораду від друга, який розпочав програмування, створивши гру, дуже схожу на вибір вашої пригодницької книги . Це в основному проста текстова пригодницька гра з таким результатом:
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 до кінця, доки не будете готові роздавати / продавати іншим, ТОГО займіться чимось складнішим (Тетріс, пригода чи все, що завгодно), але, щоб розпочати вивчення нової технології, зробіть річ, яку ви програмуєте мозком мертвим просто.
Інші приклади:
Але, знову ж таки, почніть з того, що дуже легко, щоб ви могли дійсно щось завершити і озирнутися назад і побачити, що це стосується. Різниця між написанням програми ONE на мові / платформі / SDK / двигуні та написанням програм ZERO - ВЕЛИЧЕЗНА . Різниця між 1 і 2, або 2 і 5, набагато менша, тому ви можете робити більші кроки, але зробіть крок від 0 до 1 бути маленьким; це буде більше, ніж ти думаєш!
Flappy Bird
-подобно. Як професійний програміст, це робота в другій половині дня (ну, вихідні, щоб зробити це "приємно"), але, навчаючи іншого програмуванню, ми дізналися, що насправді є багато невеликих ускладнень. Знову ж таки, один досвід набагато більший, ніж нульовий, і, як тільки ви його отримаєте, у вас буде набагато краще уявлення про те, як рухатися вперед.
Ознайомтесь із цим веб-сайтом: 12 ідей проекту з комп'ютерних ігор
Деякі з цих ігор включають те, що сказали інші:
Але це також говорить про деякі інші ігри, які ви можете спробувати зробити, такі як:
Крім того, він дає відчуття того, що слід спробувати зробити спочатку, оскільки це відчуває труднощі для кожної гри (і, отже, план того, як слід вирішувати ігри):
Багато людей починають з Breakout, оскільки в ньому є:
Найскладніша частина написання гри - або будь-якого програмного забезпечення - це з'ясування того, що робити. Вам абсолютно потрібна специфікація! Це найцікавіша частина створення клону з існуючої гри: специфікація вже існує. Ваша специфікація - "Продукт повинен робити все, що робить Інший продукт", а якщо у вас є копія іншої гри під рукою, то це досить легко перевірити.
Після того, як ви зрозуміли, що вам потрібно зробити, з’ясувати, як це зробити, насправді не так складно, якщо ви грамотний програміст. Я не маю на увазі кваліфікованого або досвідченого програміста; це означатиме, що ви вже знаєте, як зробити більшість того, що намагаєтесь зробити. Але вам потрібно зрозуміти, як мислити в абстракціях і володіти навичками вирішення проблем та логічної думки, які є основоположними для програмування. Якщо ти можеш це зробити, то ти можеш робити все, що завгодно.
Сказавши це, я не згоден з тим, що більшість людей кажуть про спробу навчитися писати ігри, написавши щось дійсно просте. Винагорода прямо пропорційна зусиллям, яке ви доклали до неї. Якщо ви навчитеся писати ігри, написавши дійсно просту гру, все, що в кінці ви будете знати, - це як написати справді прості ігри, і це не принесе вам великої користі.
З іншого боку, якщо ви почнете з чогось переважного, ви ніколи цього не закінчите. Тому почніть з чогось помірно складного, що змусить вас вирішити серйозні проблеми. Побудова 2D RPG-стилю RPG або бічний прокрутки платформи - дуже хороші способи дізнатися реальні концепції програмування ігор.
Це дійсно залежить від того, якими є ваші поточні компетенції. Якщо ви відносно новачок у програмуванні, то перейдіть з однією з конкретних ігор, які запропонували люди. В іншому випадку слід подумати про те, які саме ігри дозволять вам використати свій досвід.
Коли я почав свою першу гру, у мене був нульовий досвід розробки ігор, але я займався розробкою додатків для підприємств / бізнес-секторів протягом декількох років. Мій перший ігровий проект був покроковою стратегічною грою, і, архітектурно кажучи, він виглядав не так вже й відмінно від корпоративного додатку. Він використовував систему клієнт / сервер, а спілкування відбувалося через дуплексний канал обслуговування WCF. Більшість операцій гравців були встановлені в чергу як "замовлення" та відправлені на сервер наприкінці черги. Вся обробка поворотів проходила на сервері, після чого оновлення всесвіту гри надсилалися кожному клієнту.
Цей перший проект дав мені змогу вступити в розвиток ігор, запустивши мене на звичну територію. У міру розвитку проекту я навчився думати більше як розробник ігор і менш схожий на розробника програм для підприємств. Кінцевий результат спрацював досить добре, і він був трохи більш вражаючим, ніж Броненосець або Тік-Так-Тог :).
Порівняно простий AI, графіка, геймплей, керування, і їм не потрібно мати звукових ефектів чи музики, якщо ви не хочете цього додати. Я почав з цих двох, коли вивчав, як програмувати в QBasic для MS-DOS, і я думаю, що вони чудові перші ігри. Pac-Man був би моїм іншим вибором.
Ігри в стилі Moonlander чудові (де у вас є ракетний корабель, на який впливає гравітація, гравці контролюють напрямок і тягу, обмежене паливо при використанні тяги). Набути досвід впровадження дуже простої фізики та системи зіткнень може бути досить примітивно. Ні AI турбуватися, і головне його весело і захоплююче :)
Щось на кшталт Gauntlet, тому що вам потрібна система сутності, AI противника, пікапи, карти з плитками, виявлення зіткнень, оскарження тощо. Це все отримано, але не таким, що є надзвичайним.
Я зробив більше ніж кілька клонів Тетріса. Кожен раз, коли я це робив, я робив це трохи по-іншому. Сьогодні, як правило, я роблю якийсь тип клонування астероїдів. Я також зробив більше декількох спинових ракет командування.
Я почав з основної гри, а потім перейшов до додавання в неї більше матеріалів, бонусів тощо.
Я завжди починав із гри Tanks / Gorillas / Worms. Це дає змогу вправлятись у простому графічному відображенні та читанні вводу користувача, а також ігровий цикл, що застосовує тяжіння до снаряда та тестує на виявлення зіткнень.
Після цього вийде така гра, як дуже простий платформер або зйомка, де вам потрібно читати введення користувача в режимі реального часу, а не INPUT заяви, які працюють для Gorillas :)
Пасьянс (або насправді будь-яка гра в карти) - це хороша гра, щоб забруднити руки новою системою інтерфейсу, оскільки вона використовує безліч віджетів та механізмів зворотного зв’язку взаємодії контролера, які потрібно використовувати. Плюс логіка для цього проста і однозначна, тому ви можете сконцентруватися на навчанні і не стільки на ігровому дизайні.
Для ігрових моделей в режимі реального часу я завжди рекомендую Pong як хороший простий вихідний пункт, знову ж таки тому, що дизайн простий, як і інтерфейс контролера, так що ви можете потрапити на м'ясо системи - фізичне моделювання.
Я завжди стверджував, що якщо ви ігровий програміст, ви повинні мати можливість створити певну форму Space Invaders . Чорт, гра досить проста, що ви також можете робити графіку і самі.
Отримавши добірку невеликих ігор у своєму портфоліо як додаткову перевагу того, що я дуже корисна, наприклад, якщо я вивчаю нову мову програмування або рамки, я часто переношу одну з моїх простих ігор, щоб побачити, як новий спосіб узагальнення речей із тим, як було написано оригінали.
Це дійсно залежить від того, які навички звичайного програміста у вас вже є. Вашій математиці потрібна робота? Ваші знання з графіки? У вас обоє під обгортанням?
Хоча загалом, я думаю, що "Тетріс" та "Прорив" також будуть моїми двома початківцями. Все, що легше за це, не дає достатнього стимулу. Тетріс - хороший тест, як компонувати свої дані альго, прорив - легкий математичний приклад. Я завжди кажу людям націлитись високо, мета - застрягнути і придумати рішення.
Після цього небо є межею. Знову ж таки, націліться високо. Спробуйте платформер з похилою місцевістю, parralax, і ви отримали хороший мішок з 2d технікою. Додайте пінбол (готуйтеся до розчарування) і ваша математика покращиться.
Звідти перейдіть до третього виміру, вивчіть основні навички (анімація, візуалізація), і ви повинні бути досить добре оснащені, щоб боротися з різноманітними іграми.
Моя перша гра була чимось на кшталт Super Mario.
Рухайтеся, уникайте перешкод, стрибайте. І всі ці завдання можна легко виконати без будь-якого розрахунку фізики.
Ідеальний варіант - взяти просту двовимірну річ, оскільки ви не будете багато покладатися на конкретну реалізацію / рамку / двигун.