はじめまして、趣味でプログラムを書いている初心者の学生です。
C++でトレーディングカードゲームを作ろうと構想を練っていた最中に、自力で解決できない問題があったため、質問させていただきます。
###知りたいこと
あるクラスがあるとして、そのメンバ関数の動作をインスタンス毎に個別に実装するうまい方法はないでしょうか。
自力で調べたり考えたりした限りでは、
・仮想関数にして、継承クラスで関数を定義、またはオーバーライドする
・何らかの引数をコールバックして、switch/case文で処理を分岐させる
という方法があることがわかったのですが、どれも別種のインスタンスを増やそうとすると、その分クラスが増えたりswitch文が伸びたりして、保守性が下がるように思えます。
前Unityをさわったとき、ゲームオブジェクトにスクリプトをアタッチすることで個別の処理を実現できていたように思えました。今回も理想的には、クラスは変えず、関数だけ「アタッチ」することで個別の処理を実装できるような設計できないかと思案しています。
よろしくお願いいたします。
###補足(前提、具体的にやりたいこと)
C++で、遊戯王のようなトレーディングカードゲームの簡易版を書いています。
以下に示すような「Cardクラス」を設計して、インスタンスをカードのオブジェクトに対応させようと考えました。
C++
1class Card{ 2private: 3 int id;//識別番号 4 char* name;//名前 5 int attack;//攻撃力 6 int defend;//守備力 7 //... 8public: 9 void effect(){ 10 //ここに「効果」を実装 11 } 12 //... 13}
「効果」には、例えば「選択中のカードの攻撃力が1000以上ならば自分の攻撃力を500加算する」などの処理を書きます。
カードごとに様々な効果を実装したいのですが、インスタンス毎にカードクラスを増やしたり長いswitch文を書いたりしないようにするには、どうすればいいでしょうか。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/03 01:56