回答:
経験が少なければ少ないほど、初期設計で無駄になります。良いデザインを作成することは、それを実行し、それがどのようになるかを見たり評価したりすることによって学ぶものです。一部の決定には、広範囲にわたるがあいまいな意味があります。いくつかのゲームの後、おそらく初期設計をかなり堅固にすることができ、この段階にさらに時間をかけることで利益が得られます。
私のモットー:そもそも物事を成し遂げましょう。ただし、常識を使用して、どのコンポーネントが他のコンポーネントよりも重要であるかを検出し、制限時間内にそれらを適切に設計します。たとえば、AIがゲームにとって重要な場合、後で簡単に拡張/変更できることを確認してください。または、すべてのゲームで使用するコンポーネントを作成する場合は、再利用できるように設計します。あなたの時間を追跡し、設計に夢中にならないでください。設計期限を設定し、その後、すべてをハッキングしてリリース期限を取得します。ただし、後でリファクタリング/再設計が必要なポイントをメモし、それらを改善するために次のゲームを開始する前に計算するようにしてください。
良いアドバイス:2つのオプションのいずれかを選択する必要がある場合は、詳細を長くしすぎないでください。ほとんどの場合、「良い」または「悪い」はありません。状況によっては、Aの方が優れている場合もあれば、Bの方が優れている場合もあり、全体として、両者の違いは必ずしも時間の価値があるとは限りません。
ソフトウェアやゲームの設計には多くの経験がありますので、研究に時間を費やすようにしてください(例えば、設計に関する本を読んだり、他の経験について読んだり、設計について仲間のプログラマーと話したりするなど)。 )。
人々は未来を予測することにひどい。これは、要件が毎日変わる可能性のあるゲームの場合に特に当てはまります。
YAGNIと呼ばれる原則があります。別名「あなたはそれを必要としません」、それは基本的に、あなたがそれを必要とすることを知るまで、あなたは何かを実装すべきではないと言います。
人々が必要だと思っていた機能が使用されることは決してなかったので、実際にはそれを使用しなかったアーキテクチャの剛性に非常に多くのシステムが行き詰まっているのを見てきました。
私の個人的な哲学は、可能性があるかもしれない最も簡単なことをすることです。そうは言っても、Get It It DoneとHacking Shit Togetherには違いがあります。目的を持ってコードを書くことは、すべてを公開する、すべてを実行するblobクラスを持つ、または「悪い」コードを意味する他の多くのもののような「コード臭」を生成することを意味するべきではありません。
これは、今日の私の考え方では真であると評価されます。
私はソフトウェアラピッドプロトタイピングの友達です。特にゲーム開発中。簡単な学習、テスト、使用に適しています。ハードウェアプログラミングに近いか、複雑なアルゴリズムが私にとって最適な方法です。
Theory();
RapidPrototype();
bool bOk = false;
while(!bOk)
{
Testing();
LotOfFixing();
PlayingWith();
bOk= AnalysingResults();
}
FinalFastAndNiceDataStructuresAndCode();
Rapid Prototypeの私のバージョンには、適切なプロトタイプクラストが必要です。
利点:
うまくやれば、最終的に製品の実際のデバッグ/学習バージョンを使用できます。
私たちはプロジェクトでそれを使用しており、満足しています。
アジャイルなソフトウェア開発をご覧ください。これは特効薬ではありませんが、両方を実行することを目指しています(実行して、しっかりしたソフトウェア設計を行う)。