web-dev-qa-db-ja.com

標準デッキで見られるよりも複雑なトランプタイプのクラスを作成する良い方法は?

私はオブジェクト指向プログラミングに非常に慣れていないので、python=で簡単にカードゲームを作って(伝統的であるようです!)学習を始めようとしています。)機能する次の例を実行しました結構です。PlayingCard()クラスの複数のインスタンスを作成してDeck()クラスのインスタンスを作成する方法を教えてくれます。

_class PlayingCard(object):
    def __init__(self, suit, val):
        self.suit = suit
        self.value = val

    def print_card(self):
        print("{} of {}".format(self.value, self.suit))

class Deck(object):
    def __init__(self):
        self.playingcards = []
        self.build()

    def build(self):
        for s in ["Spades", "Clubs", "Diamonds", "Hearts"]:
            for v in range(1,14):
                self.playingcards.append(PlayingCard(s,v))

deck = Deck()
_



標準の52デッキだけではなく、より複雑なカードを使って何かを作りたいと思っています(値が適切に増加しています)。私が念頭に置いているデッキはモノポリーカードゲームです。

enter image description here

カードには、ACTIONカード、PROPERTYカード、MONEYカードの3つの基本的なタイプがあります。アクションカードはさまざまなアクションを実行し、プロパティカードはさまざまなカラーセットに属し、マネーカードはさまざまな値を持つことができます。さらに、プロパティカードは「ワイルドカード」にすることができ、2つのセットのいずれかの一部として使用できます。最後に、すべてのカードには同等の金額値があります(各カードの上隅に示されています)。レントアクションカードでは、カードはカードに示されているカラープロパティにのみ適用できます。

私の質問は、一般的にこのような状況をどのように処理するか、そしてこれらの異なるカードをクラスベースのpythonプログラムに含めるにはどうすればいいですか?単一のPlayingCard()クラス、およびPlayingCard(type="PROPERTY", value="3M")などの多くの入力があるだけです。または、ActionPlayingCard()PropertyPlayingCard()などの個別のクラスを作成する方が良いでしょう。 ?またはより良い方法はありますか?私が言うように、私はここで私の学習の初めにあり、より高いレベルの設計の観点からこれらのタイプの状況を整理する方法。

どうもありがとう。

9
teeeeee

継承を使用できます。ここで、メインクラスを作成し、サブクラスを作成します。サブクラスには、母クラスの関数と値が含まれていますが、その特定のクラスに追加の値と関数を含めることもできます。

class Apple:
    def __init__(self, yearMade):
        pass

    def ring(self):
        print('ring ring')

class iPhone(Apple):
    def __init__(self, number)
        number = number

    def func():
        pass

これで、iPhoneクラスにAppleクラスと同じ関数と独自の関数が追加されました。継承について詳しく知りたい場合は、調査を行うことをお勧めします。

2
MoriartyPy

独占については、ゲームの着陸の視点を設計します。カードではありません。カードは単に現実世界の着陸を表しています。

0