たくさんの町を含むカントリークラスを作成しますか?
承知しました。
町にはたくさんの建築クラスが含まれていますか?ほとんどの人のクラスが含まれていますか?
承知しました。
プレイヤーがアクセスするためにアクセスできる経路探索クラスを作成しますか?
承知しました。
上記で提案したことはすべて妥当なようです。長い目で見ればそれは最善の方法ではないかもしれませんが、それは問題ありません。それが最初にあなたに来たのは組織モデルなので、それはあなたが知っていることは明らかに理にかなっています。それを受け取って、そこから実装を始めることが重要です。それはあなたを開始し、タスクの最初に開発者を悩ませることが多いこの最初の「設計麻痺」を乗り越え、そして(それが何らかの方法で欠陥があることが判明した場合)長所と短所についてあなたに1つまたは2つ教えます。デザインへのその特定のアプローチの。
概念を頭の中で自然に取り入れ、いくつかの単純なルールに従ってコードにグループ化しました。
- この概念は、動作や、すでに持っている他のオブジェクトのデータと大きく異なりますか?(国や人々は、意味のあるデータや行動を共有しているとしても、ごくわずかなので、ゲーム内では異なるタイプで表す必要があります)。
- この概念をコード内で大幅に操作する必要があり
Person
ますか?町の人口の1対1のマッピングを作成するために、そのタイプもそのタイプのインスタンスも必要ない場合がint populationCount
あります。
- この概念には状態が必要ですか?もしそうなら、それは何らかの形でカプセル化されるべきであり、それは私が無料の関数の束ではなくこの状態(クラス)を保存することを可能にします。(パスファインディングの実装には、類似の現実世界のオブジェクトはありませんが、マップ内のどのノードが既に検討したかなどのデータを追跡する必要があります。これは、束に格納するよりもクラスを通じて行う方が適切です。隠しグローバルの作成と独立した関数の作成)。
単純ではありますが、これらの質問に答えることは、精神的な概念をソースコードに変換するかどうか、またどのように変換するかを決定しようとするときに大きなメリットがあります。また、オブジェクト指向設計のSOLID原則について読むこともできます。
コメントで行われたエンティティ/コンポーネントシステムの提案も有効なアプローチであることに注意してください。ただし、プロジェクトをより小さくスコープを変更しない限り、ここではそれを避けます(1つのプロジェクトで2つの新しい大きな課題に取り組む可能性があるため)非常に困難であり、そうでなければ1つだけに集中することで得られるであろう教育的利益が薄れる可能性があります。コンポーネント指向モデルでは、上記の質問の「タイプ」がより暗黙的になります。コードの具体的なタイプではなく、エンティティを形成するコンポーネントのコレクションによって定義される暗黙のタイプです。同じ指針が適用できます。