Отримати це проти твердого дизайну програмного забезпечення?


17

Маючи достатньо часу в наших руках, щоб завершити ігри, які ми розробляємо, як ви можете досягти хорошого балансу між надійною архітектурою програмного забезпечення та успішним прогресом, щоб все це було зроблено?

Мій особистий виклик: як щодо ефективності сьогодні та довгострокового мислення одночасно? Плюс, якщо ви це робите, ви можете так само хотіти навчитися новому в дорозі, а не вдаватися до тих же повторюваних моделей, якими ви користувалися за останні 5 років?

Відповіді:


20

Чим менше досвіду у вас, тим більше часу ви витрачаєте на передній дизайн. Робити хороший дизайн - це те, чого ви навчитесь, роблячи це, а потім побачивши / оцінюючи, як це виходить. Деякі рішення мають далекосяжний, але незрозумілий вплив. Після деяких ігор ви, ймовірно, зможете зробити початковий дизайн досить солідним, і це окупиться вкласти ще трохи часу на цей етап.

Мій девіз: в першу чергу робіть справи, але використовуйте здоровий глузд, щоб виявити, які компоненти є більш критичними, ніж інші, і спроектуйте їх досить добре, у межах вашого терміну. Наприклад, якщо AI має вирішальне значення для вашої гри, переконайтеся, що згодом ви можете її легко розширити / змінити. Або, якщо ви збираєтеся написати компонент, який будете використовувати в кожній грі, спроектуйте його для повторного використання. Слідкуйте за своїм часом і не дивіться на розробку. Встановіть термін розробки, а після цього починайте зламати все, щоб отримати термін випуску. Але не забудьте зауважити, які моменти потребують рефакторингу / перепланування після цього, і порахуйте за деякий час, перш ніж розпочати наступну гру, щоб покращити ці речі, щоб вони не змусили вас відкусити назад!

Гарна порада: якщо вам доведеться вибирати між двома варіантами, не затримуйтесь надто довго над деталями. Найчастіше немає "хорошого" чи "поганого". У деяких ситуаціях А буде кращим, у деяких - Б, і загалом різниця між обома не завжди може коштувати часу.

Набути багато досвіду в розробці програмного забезпечення або ігор, тому переконайтеся, що ви витрачаєте частину свого часу на дослідження (наприклад, читайте книгу на дизайн, читайте про досвід інших людей, спілкуючись з колегами-програмістами про свої проекти тощо). ).


7
+1, хороша порада. Не дозволяйте собі бути спійманим сумнозвісним паралічем аналізу, оскільки цього ви ніде не можете. Тоді як рефакторинг - це могутній інструмент для виправлення минулих вад, тому не бійтеся робити помилки.
Майкл Клемент

1
А-а-а. Аналіз паралічу . Мій найбільший ворог! Я повинен побудувати гру, в якій аналіз паралічу служить кінцевим босом. Я найкраще почати з проектування ігрової архітектури спочатку ... Noooo! Жарти вбік: Чудова відповідь і хороший коментар!
bummzack

12

Люди жахливо прогнозують майбутнє. Особливо це стосується ігор, де вимоги можуть змінюватися щодня.

Існує принцип під назвою YAGNI , він же "Вам не знадобиться", який, в основному, говорить, що ви не повинні щось реалізовувати, поки не знаєте, що вам це знадобиться.

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

Моя особиста філософія - це зробити найпростішу річ, яка могла б працювати . За словами, є різниця між "Зробити це зроблено" та "Зламати лайно разом". Написання коду з ціллю не повинно означати робити речі, які генерують "запах коду", як оприлюднення всього, проведення класів, які роблять все, або будь-яку з тих десятків інших речей, що означають "поганий" код.


8

Сьогодні це в моїй думці відповідає дійсності:

  • Прагматизм над ідеологією
  • (1) Зробіть це спрацьованим (2), тоді зробіть правильно - гра закінчена, якщо ви забудете крок 2
  • Відпустіть його!
  • Занадто багато переднього дизайну буде марною тратою часу
  • TDD і Clean Code призводять до більш простих і стабільних конструкцій програмного забезпечення

Чи можете ви детальніше розробити тестові розробки в ігрових умовах? Окрім основної логіки, я ніколи не знаходив високоінтерактивних програм, які були б дуже придатними для подібних речей. Також ви посилаєтесь на сторінку
розрізнення

2
@Ranieri Якщо ви прорисуєте лінію між частинами, які взаємодіють із графічним обладнанням та входом користувача, тестування є простим.
Джонатан Фішофф

@Ranier Спасибі, виправили посилання. Я погоджуюся, що придумати тести спочатку для інтерактивного моделювання чи ігор-клієнт-ігри може бути складним. На додаток до ваших тестових пристроїв, можливо, ви хочете провести кілька випробувань на функціональність вищого рівня та, можливо, сеанси відтворення, які проходять через певні інтервали. У будь-якому випадку, думка про тести спочатку, швидше за все, окупиться у багатьох сценаріях. Знайдіть цікаві погляди в gamedev.stackexchange.com/questions/1905/…
jmp97

5

Я друг програмного забезпечення швидкого прототипування. Особливо під час розробки ігор. Це добре для швидкого навчання, тестування та використання речей. Для мене близький апаратний програмування або складні алгоритми - найкращий метод для мене.

Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
 Testing();
 LotOfFixing();
 PlayingWith(); 
 bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();

Моя версія швидкого прототипу повинна мати належну кору прототипу:

  • Максимальний дружній інтерфейс введення для налаштування директив та налаштування змінних чи даних.
  • Стабільні винятки та поводження з помилками.
  • Інтернет як функція відладчика, але на рівні, що вам потрібно.
  • Максимально дружній вихідний інтерфейс для показу або збору результатів усіма можливими та необхідними способами.

Переваги:

  • Ви можете покращити корочку RapidPrototype протягом усієї розробки.
  • Ви можете бачити і налаштовувати свій код багатьма способами.
  • Ви можете зосередитись лише на теорії та проблемі, що вам потрібно вирішити.
  • Ви можете швидко розробити будь-які нові частини проекту та спробувати його з рештою остаточних речей.
  • Ви можете швидше доставляти нові речі для використання в наповненні вмістом і доопрацьовувати його пізніше (особливо в корпусі з пісочницею)
  • Ви можете легко описати та показати принципи чи рішення будь-кому іншому. Інтернет.
  • Функціональний та прозорий прототип - найкраще джерело інформації для кінцевого коду (будь-хто інший може це зробити).

Якщо ви це зробите добре, ви можете мати реальну версію свого продукту / налагодження.
Ми використовуємо це в нашому проекті і ми задоволені цим.


1
Це досить гарна порада, хоча я б рекомендував час або якийсь інший ресурс, пов'язаний у циклі, після чого ви просто вийдете (0) і спробуйте інший прототип.

@Joe Wreschnig - Часові плани можна включити до AnalysingResults (), але я думаю, що ви можете використовувати RapidPrototype на деякий час і закінчити його пізніше або докласти його до планів. Тоді краще на цьому назавжди застрягли :). У RapidPrototype Ви також можете імітувати функціональність. Це корисно в багатьох відношеннях.
samboush

1

Погляньте на гнучку розробку програмного забезпечення . Хоча це не срібна куля, вона має на меті зробити і те, і інше (зробити це і мати надійний дизайн програмного забезпечення).


2
Я не думаю, що існує будь-яка методологія розробки, яка не претендує на те, щоб "зробити це і мати надійного дизайнера програмного забезпечення".

@Joe Я думаю, що багато "важких" методологій, як правило, віддають перевагу CYA перед надійним програмним забезпеченням. Справді, більша частина мого негіпкого досвіду схильна до того, що "це не потрібно бути правильним, воно повинно бути прямо зараз", тоді як "спритний" має на меті сказати "це потрібно зараз, але роби все, що ти можеш зробити речі правильно, коли ти йдеш далі ".
Даш-Том-Банг

Я заперечую, що гнучка розробка дуже мало впливає на те, чи є код твердим чи ні. Суть спритного полягає в тому, щоб витратити весь свій час на розвиток тільки на речі, які мають значення. Код все ще може бути заплутаним після доставки, оскільки якість коду (або відсутність технічної заборгованості) рідко є показником успішності доставки.
Магнус Вулффельт
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.