それを成し遂げるのか、堅実なソフトウェア設計か?


17

作成するゲームを完了するのに十分な時間がないのに、堅実なソフトウェアアーキテクチャとそれをすべて達成するために良い進歩をすることとのバランスをどのように実現できますか?

私の個人的な挑戦:今日は効果的であると同時に長期的な思考はいかがですか?さらに、あなたがそれをしている間、あなたは過去5年間使ってきた同じ繰り返しパターンに頼るのではなく、途中で新しいことを学びたいと思うかもしれません?

回答:


20

経験が少なければ少ないほど、初期設計で無駄になります。良いデザインを作成することは、それを実行し、それがどのようになるかを見たり評価したりすることによって学ぶものです。一部の決定には、広範囲にわたるがあいまいな意味があります。いくつかのゲームの後、おそらく初期設計をかなり堅固にすることができ、この段階にさらに時間をかけることで利益が得られます。

私のモットー:そもそも物事を成し遂げましょう。ただし、常識を使用して、どのコンポーネントが他のコンポーネントよりも重要であるかを検出し、制限時間内にそれらを適切に設計します。たとえば、AIがゲームにとって重要な場合、後で簡単に拡張/変更できることを確認してください。または、すべてのゲームで使用するコンポーネントを作成する場合は、再利用できるように設計します。あなたの時間を追跡し、設計に夢中にならないでください。設計期限を設定し、その後、すべてをハッキングしてリリース期限を取得します。ただし、後でリファクタリング/再設計が必要なポイントをメモし、それらを改善するために次のゲームを開始する前に計算するようにしてください。

良いアドバイス:2つのオプションのいずれかを選択する必要がある場合は、詳細を長くしすぎないでください。ほとんどの場合、「良い」または「悪い」はありません。状況によっては、Aの方が優れている場合もあれば、Bの方が優れている場合もあり、全体として、両者の違いは必ずしも時間の価値があるとは限りません。

ソフトウェアやゲームの設計には多くの経験がありますので、研究に時間を費やすようにしてください(例えば、設計に関する本を読んだり、他の経験について読んだり、設計について仲間のプログラマーと話したりするなど)。 )。


7
+1、良いアドバイス。悪名高い分析麻痺に巻き込まれないようにしましょう。リファクタリングは過去の欠陥を解決する強力なツールですが、間違いを恐れることはありません。
マイケルクレメント

1
ああ。分析麻痺。私の最大の敵!分析麻痺エンドボスとして機能するゲームを構築する必要があります。私は最高の最初のゲームアーキテクチャを設計することにより開始... Noooo!冗談はさておき:素晴らしい回答と良いコメント!
-bummzack

12

人々は未来を予測することにひどい。これは、要件が毎日変わる可能性のあるゲームの場合に特に当てはまります。

YAGNIと呼ばれる原則があります。別名「あなたはそれを必要としません」、それは基本的に、あなたがそれを必要とすることを知るまで、あなた何かを実装すべきではないと言います。

人々が必要だと思っていた機能が使用されることは決してなかったので、実際にはそれを使用しなかったアーキテクチャの剛性に非常に多くのシステムが行き詰まっているのを見てきました。

私の個人的な哲学は、可能性があるかもしれない最も簡単なことをすることです。そうは言っても、Get It It DoneとHacking Shit Togetherには違いがあります。目的を持ってコードを書くことは、すべてを公開する、すべてを実行するblobクラスを持つ、または「悪い」コードを意味する他の多くのもののような「コード臭」を生成することを意味するべきではありません。


8

これは、今日の私の考え方では真であると評価されます。

  • イデオロギーに対するプラグマティズム
  • (1)正常に動作させる(2)その後正しく動作させる-ステップ2を忘れた場合はゲームオーバー
  • それをリリースする!
  • 初期設計が多すぎると時間の無駄になります
  • TDDClean Codeは、よりシンプルで安定したソフトウェア設計につながります

ゲーム環境でテスト駆動開発を行うことについて詳しく説明できますか?いくつかの基本的なロジックは別として、高度にインタラクティブなプログラムがこの種のものに非常に適していることは一度もありません。また、曖昧さ回避ページにリンクしています;)
drxzcl

2
@Ranieriグラフィックハードウェアとユーザー入力のインターフェイスとなる部分の間に線を引くと、テストは簡単です。
ジョナサンフィショフ

@Ranierありがとう、リンクを修正しました。インタラクティブシミュレーションやクライアントサーバーゲームのテストを最初に行うのは難しい場合があることに同意します。単体テストに加えて、いくつかの高レベルの機能テストと、特定の間隔で実行される再生セッションが必要になる場合があります。いずれにせよ、最初にテストについて考えることは多くのシナリオで報われる可能性があります。gamedev.stackexchange.com/questions/1905/で
jmp97

5

私はソフトウェアラピッドプロトタイピングの友達です。特にゲーム開発中。簡単な学習、テスト、使用に適しています。ハードウェアプログラミングに近いか、複雑なアルゴリズムが私にとって最適な方法です。

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

Rapid Prototypeの私のバージョンには、適切なプロトタイプクラストが必要です。

  • ディレクティブおよびセットアップ変数またはデータを構成するための最大の使いやすい入力インターフェース。
  • 安定した例外とエラー処理。
  • デバッグ機能のようなオンラインですが、必要なレベルです。
  • すべての可能な方法で必要な方法で結果を表示またはキャプチャするための、最大の使いやすい出力インターフェイス。

利点:

  • 開発全体でRapidPrototypeクラストを改善できます。
  • 多くの方法でコードを表示および設定できます。
  • 解決する必要があるのは理論と問題にのみ集中できます。
  • プロジェクトの新しい部分を迅速に開発し、最終的な残りの部分で試してみることができます。
  • コンテンツの充填に使用する新しいものをより迅速に配信し、後で完成させることができます(特にサンドボックスの場合)。
  • 原則またはソリューションを簡単に説明し、他の人に示すことができます。オンライン。
  • 機能的で透過的なプロトタイプは、最終的なコードの最適な情報源です(他の誰でもできます)。

うまくやれば、最終的に製品の実際のデバッグ/学習バージョンを使用できます。
私たちはプロジェクトでそれを使用しており、満足しています。


1
これはかなり良いアドバイスですが、時間やループにバインドされている他の種類のリソースをお勧めします。その後、exit(0)して別のプロトタイプを試してください。

@Joe Wreschnig-時間計画はAnalysingResults()に含めることができますが、RapidPrototypeをしばらく使用して後で終了するか、計画に入れることができると思います。より良いそれから永遠に立ち往生しました:)。RapidPrototypeでは、機能もシミュレートできます。それは多くの点で有用です。
サンボッシュ

1

アジャイルなソフトウェア開発ご覧ください。これは特効薬ではありませんが、両方を実行することを目指しています(実行て、しっかりしたソフトウェア設計を行う)。


2
「それを成し遂げ、堅実なソフトウェア設計者がいる」と主張しない開発方法論はないと思います。

@Joe私は、多くの「重い」方法論が堅実なソフトウェアよりもCYAを好む傾向があると思います。確かに、私の非アジャイル体験の多くは「正しい必要はない、今すぐに必要である」傾向がありますが、「アジャイル」は「今すぐに必要であるが、あなたが一緒に行くように物を正しく作ることができます。」
ダッシュトムバン

アジャイル開発は、コードが堅実であるかどうかにほとんど影響を与えないと主張します。アジャイルの本質は、重要なことだけに開発時間を費やすことです。コードの品質(または技術的負債の欠如)が配信の成功の測定値となることはめったにないため、コードはまだ配信時に混乱する可能性があります。
マグナスウルフフェルト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.