Thirteenth floor

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

2020年6月28日8:34, プログラミング

ドメモクラスとプレイヤークラスの連携

ドメモクラスとプレイヤークラスの作成が前回までで終了しました。

ここからは2つのクラスを連携させて動作させて行きましょう。

STEP1

domemo.pyを少しだけ変更します。


import random
class Domemo:
    def __init__(self, player_instances):
        ...
        #変更前 
        #self.players = ["a", "b", "c", "d", "e"]

        self.player_instances = player_instances

"""変更前
    def give_card_for_player(self):
        random.shuffle(self.use_cards)

        for number in [0, 1, 2, 3, 4]:
            self.players[number] = self.use_cards[:4]
            del self.use_cards[:4]
"""
    def get_player_instances(self):
        return self.player_instances

    def give_card_for_player(self):
        random.shuffle(self.use_cards)

        for player_instance in self.get_player_instances():
            player_instance.set_my_cards(self.use_cards[:4])
            player_instance.set_original_cards()
            del self.use_cards[:4]

    def give_card_for_field(self):
        ...

    def show_cards_on_field(self):
        ...

文法の話

コードの中でコメントを記載する場合には2種類の方法があります。#"""です。

#はその行のみをコメントにします。

""""""で囲まれているすべての行をコメントにします。


# この1行のみがコメントです。

"""
この中にある
すべての行がコメントです。
"""

新しいgive_card_for_playerメソッド

give_card_for_playerメソッドで変更された点はプレイヤークラスのインスタンスを使用している点です。前回までは、"a""b"といった文字列をプレイヤーとして見立てていました。

今回は__init__メソッドで受け取ったplayer_instancesを活用します。player_instancesはリストで渡される想定のため、for文でplayer_instancesの要素を取り出します。

for player_instance in self.get_player_instances()のうち、self.get_player_instances()getメソッドで、渡されたplayer_instancesを返します。player_instancesはリスト型なので、1つづつ要素が取り出され、for文の中に記述されている文が実行されます。

player_instancesのメソッドにアクセスする方法は前回説明したとおり、インスタンス名.メソッド名です。ドメモのカードを配っています。

STEP2

どのように連携されているのかを確認するために、domemo.pyへprint文を追記しましょう。


import random

class Domemo:
    def __init__(self, player_instances):
        ...

    def get_player_instances(self):
        ...

    def give_card_for_player(self):
        ...

    def give_card_for_field(self):
        ...

    def show_cards_on_field(self):
        ...

        for player_instance in self.get_player_instances():
            print(player_instance)
            print(player_instance.player_name)
            print(player_instance.get_my_cards())

STEP3

main.pyを編集して実際にドメモクラスとプレイヤークラスを連携させます。


from domemo import Domemo
from player import Player

domemo = Domemo([Player("a"),
                 Player("b"),
                 Player("c"),
                 Player("d"),
                 Player("e")])

domemo.give_card_for_field()
domemo.give_card_for_player()
domemo.show_cards_on_field()

実行して出力すると以下のようになりましたでしょうか。


[4, 6, 7, 3]
[4, 6, 4, 2]
<player.Player object at 0x000001E523CEFCF8>
a
[5, 1, 7, 7]
<player.Player object at 0x000001E523DF4B00>
b
[7, 7, 6, 2]
<player.Player object at 0x000001E523DF4C50>
c
[7, 5, 5, 5]
<player.Player object at 0x000001E523F12F98>
d
[7, 3, 6, 6]
<player.Player object at 0x000001E523F1D0F0>
e
[3, 6, 4, 5]

最初の2行[2, 7, 5, 6]、[7, 4, 4, 3]は前回と同様です。

次のplayer.Player object at 0x000001E523CEFCF8はインスタンスオブジェクトを識別するためのものです。それぞれ少しずつ値が異なっているのがわかるでしょう。

どのインスタンスも同じクラスから作られていますが、異なるオブジェクトです。

それは出力されている名前が違うことからもわかります。

また名前の下に出力されているリストから、ドメモクラスによってプレイヤーインスタンスへカードが配られたことがわかります。

ソースコード

今回のソースコードを以下へ配置しております。

ソースコード

次回のお話

これでドメモクラスとプレイヤークラスを連携させることができました。

次回は一通りドメモを行ってみましょう。コンピューターだけでドメモを行わせてみるのです。

コメント

コメント投稿ページへ