はじめまして、java教材向けに簡単なカードゲームを制作しました。制作後、もうすこしリファクタリング&拡張性のあるコードにできないものかと思い、この場を借りて質問させて頂くことにしました。
ざっとですが、下のようなクラスがあります。
- Cardクラス(カード)
-カードの数値
-カードのスート(ダイヤ、スペードなど)
-カードの表示値 (数値は1でも表示はAなど) - Deckクラス(カードの山)
-Card52
-shuffle() カードをシャッフル - Playerクラス (プレイヤー)
-Card[](手札分)
-cardCount (手持ちカード枚数)
-addCound()(手持ちカード枚数カウンタを増やす) - Gameクラス (ベースクラス:main()があります)
-Deck mainDeck (カードの山)
-cardMax (現在の山の枚数)
-hitCard() (カードを引く)
【カードを引く】というメソッドは、main()のあるGameクラス内に記載し、ゲームループから呼び出しました。
static void hitCard(Player p) { //山の一番最後からカードを一枚取って、プレイヤーのカード配列に入れる p.cards[p.cardCount]=mainDeck.cards[cardMax - 1]; //手持ちカード枚数カウンタを増やす p.addCount(); //山の枚数を減らす cardMax--; }
と、こんな感じです。
上記コード&記載場所で動作的には何ら問題はないです。
ここからが質問なのですが、Gameクラスに【カードを引く】というメソッドを書くのはどうなんでしょう?
例えば、複数のカードゲームを選択してプレイできるように今後プロジェクトを改造する場合を想定したら、【カードを引く】メソッドはどこに実装すべきだと思いますか?
今考えているのは、Gameクラスをmain()持ちではないクラスに変更し、各ゲームはGameクラスを継承した物にするという作りに。スーパークラスのGameクラスの中に【カードを引く】メソッドを実装するのが妥当なのかな?と考えています。
皆さんの思考をお聞かせ頂きたいです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/18 03:11
退会済みユーザー
2015/08/18 04:46