異なる種類の敵はクラスを分けるべきか
Posted: 2013年10月29日(火) 23:05
http://dixq.net/forum/viewtopic.php?f=3&t=11734
お久しぶりです。前回「STGクラス設計」というトピックで質問させていただきました、タンタルと申します。
あの後、結局普通にC言語で2Dゲームを作ったり、C#でフォームアプリケーションを作ったりして、ようやくクラスのイメージもつかめてきて、上のトピックで言われたことの意味が分かってきたところです。
ただ、クラスの利用に関してはいいものの、いざ自分で設計となると、どうしようかなとなってしまうところがあるので、そこの質問をさせていただきたいと思います。大まかにゲームの仕様をまとめている段階なので、具体的なコードは出せませんが、よろしくお願いします。
敵クラスの設計についてです。
現在、基底クラスに座標やカウンタ,フラグなどの共通要素を持ったObjectクラスを定義して、それを継承してEnemyクラスを作り、EnemyManageクラスがEnemyクラスのインスタンスをlistなり固定配列なりで管理する、という設計にしようかなと考えています。
ただ、同じEnemyクラスでも、いろんな種類の敵がいるわけで、いろんな画像で、いろんな攻撃をして、いろんな動きをして...一体ごとに異なってくると思います。ここで、その設計方法なのですが
1.Enemyクラスにkind,movePattern,attackPatternのような分岐用の変数を持たせて、毎回switchしたり関数ポインタでコールバック関数を作って動かす。
2.Enemyクラスをさらに継承して、あらゆる種類の敵クラスを作り、移動や攻撃する関数をオーバーライドする。
とりあえずこの二つがぱっと思い浮かびました。ですが、はたしてどちらがいいのか...おそらくどちらでもよくて、どちらにも問題はあるとは思うのですが、いまいちそれぞれの利点と欠点が分からないため、評価もできない状態です。
皆さんはどうでしょうか。1はこんなところがいい、悪い。2はこんな使い方ができるからから便利、不便。いや、こういう設計の方が絶対にいい!など、皆さんの考えを教えてください。
以下は本編とは関係ないことですので聞き流していただいて構いません。
こういう機能を実装したいって質問は多いですけど、クラス設計についての質問ってあまり見かけないんですよね。みなさんどこで勉強してるんでしょうか...クラス使うならJAVAだから、C++での情報が少ないとかですかね。
お久しぶりです。前回「STGクラス設計」というトピックで質問させていただきました、タンタルと申します。
あの後、結局普通にC言語で2Dゲームを作ったり、C#でフォームアプリケーションを作ったりして、ようやくクラスのイメージもつかめてきて、上のトピックで言われたことの意味が分かってきたところです。
ただ、クラスの利用に関してはいいものの、いざ自分で設計となると、どうしようかなとなってしまうところがあるので、そこの質問をさせていただきたいと思います。大まかにゲームの仕様をまとめている段階なので、具体的なコードは出せませんが、よろしくお願いします。
敵クラスの設計についてです。
現在、基底クラスに座標やカウンタ,フラグなどの共通要素を持ったObjectクラスを定義して、それを継承してEnemyクラスを作り、EnemyManageクラスがEnemyクラスのインスタンスをlistなり固定配列なりで管理する、という設計にしようかなと考えています。
ただ、同じEnemyクラスでも、いろんな種類の敵がいるわけで、いろんな画像で、いろんな攻撃をして、いろんな動きをして...一体ごとに異なってくると思います。ここで、その設計方法なのですが
1.Enemyクラスにkind,movePattern,attackPatternのような分岐用の変数を持たせて、毎回switchしたり関数ポインタでコールバック関数を作って動かす。
2.Enemyクラスをさらに継承して、あらゆる種類の敵クラスを作り、移動や攻撃する関数をオーバーライドする。
とりあえずこの二つがぱっと思い浮かびました。ですが、はたしてどちらがいいのか...おそらくどちらでもよくて、どちらにも問題はあるとは思うのですが、いまいちそれぞれの利点と欠点が分からないため、評価もできない状態です。
皆さんはどうでしょうか。1はこんなところがいい、悪い。2はこんな使い方ができるからから便利、不便。いや、こういう設計の方が絶対にいい!など、皆さんの考えを教えてください。
以下は本編とは関係ないことですので聞き流していただいて構いません。
こういう機能を実装したいって質問は多いですけど、クラス設計についての質問ってあまり見かけないんですよね。みなさんどこで勉強してるんでしょうか...クラス使うならJAVAだから、C++での情報が少ないとかですかね。