Thirteenth floor

【Pythonでボードゲームシミュレーション】DOMEMO その6

2020年6月21日10:54, プログラミング

プレイヤークラス作成(続き)!

前回はplayer.pyを作成し、プレイヤークラスを記述しました。

まだ__init__メソッドとゲッター、セッターしかないため、ドメモをプレイするために必要なメソッドを追加していきます。

STEP1

player.pyへ以下のコードを追記します。


import copy

class Player:
    def __init__(self, name):
        ....

    def set_my_cards(self, cards):
        ....

    def get_my_cards(self):
        ....

    def set_original_cards(self):
        ....

    def get_original_cards(self):
        ....

    def get_hand_num(self):
        ....

    def get_my_call_cards(self):
        ....

    def call_card(self, card):
        self.my_call_cards.append(card)
        if card in self.my_cards:
            self.my_cards.remove(card)
            return True
        self.my_call_judge[card - 1] = False
        return False

    def think(self):
        return int(input("call num (1 ~ 7)>>> "))

文法の話(append)

def call_card(self, card)メソッドの1行目にself.my_call_cards.append(card)という文がありますね。ここで使用しているappendというメソッドはリスト型オブジェクトで使用できます。

append

appendはリスト型オブジェクトへ、新しい要素を加えるために使用されます。


>>> a = [1,2]
>>> a
[1, 2]
>>> a.append(3)
>>> a
[1, 2, 3]

文法の話(remove)

同じく、def call_card(self, card)メソッドの3行目にself.my_cards.remove(card)という文がありますね。

remove

removeはリスト型オブジェクトから要素を削除するために使用されます。


>>> a
[1, 2, 3]
>>> a.remove(2) #インデックスではなく要素の値を指定すること
>>> a
[1, 3]

文法の話(input)

def think(self, open_cards=[])メソッドの1行目にreturn int(input("call num (1 ~ 7)>>> "))という文があります。

input

inputはPythonプログラムが人間の入力を受け付けるためにあります。


>>> a = input("")
>? 文字列を入力 #任意の文字列を入力
>>> a
'文字列を入力'

call_cardメソッド

call_cardメソッドはプレイヤーが数字を宣言する動作を表現するメソッドです。

このメソッドの引数cardはプレイヤーが宣言した数字です。その数字をappendメソッドでmy_call_cardsへと追加します。my_call_cardsは自分が宣言した数字のリストだからです。

この後、if文を使用して宣言した数字が自分の手札にあるか確認します。

あった場合、if文の中を実行します。my_cardsから宣言した数字を削除し、return文を実行します。

なかった場合、if文の中を実行せず、my_call_judge[card-1]番目の要素をFalseにします。my_call_judgeは自分が宣言した数字が当たりだったか、外れだったかを管理しています。外れた場合は対応するインデックスの要素をFalseとして、自分が外したということを記録します。

thinkメソッド

thinkメソッドはプレイヤーの思考回路を表現するメソッドです。

ここではinputを使用して人間の入力を受け付けます。ここに人間が1から7までの数字を入力することで、その入力された数字がreturn文によって返されます。

ここはのちのちオーバーライドという表現を行い、様々なプレイヤーモデルの思考回路を表現します。

もちろん、あなたがドメモを10000回やりたいのであれば、このinputへ数字を入力し続けれもかまいませんが。

STEP2

では実際にこのプレイヤークラスを使用してみましょう。

PyCharmのPythonコンソールを開きます。以下>>>のところに記載している文を入力してみましょう。


# Playerクラスをplayer.pyから読み込む。
>>> from player import Player

# プレイヤーインスタンスを作成する。
>>> player = Player("test")

# プレイヤーインスタンスへカードをセットする。
>>> player.set_my_cards([1,2,5,7])
>>> player.get_my_cards()
[1, 2, 5, 7]

# プレイヤーに宣言する数字を考えさせる。
>>> card = player.think()
call num (1 ~ 7)>>> 
>? 7

# プレイヤーが数字を宣言する。
>>> player.call_card(card)
True

# プレイヤーの札を確認する。
>>> player.get_my_cards()
[1, 2, 5]

# プレイヤーの宣言した数を確認する
>>> player.get_my_call_cards()
[7]


これで一通りの流れが見れましたね。

次回のお話

次に、このプレイヤークラスとドメモクラスを連携させていきましょう。

コメント

コメント投稿ページへ