2020年6月28日8:34, プログラミング
ドメモクラスとプレイヤークラスの作成が前回までで終了しました。
ここからは2つのクラスを連携させて動作させて行きましょう。
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メソッドで変更された点はプレイヤークラスのインスタンスを使用している点です。前回までは、"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のメソッドにアクセスする方法は前回説明したとおり、インスタンス名.メソッド名です。ドメモのカードを配っています。
どのように連携されているのかを確認するために、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())
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はインスタンスオブジェクトを識別するためのものです。それぞれ少しずつ値が異なっているのがわかるでしょう。
どのインスタンスも同じクラスから作られていますが、異なるオブジェクトです。
それは出力されている名前が違うことからもわかります。
また名前の下に出力されているリストから、ドメモクラスによってプレイヤーインスタンスへカードが配られたことがわかります。
今回のソースコードを以下へ配置しております。
これでドメモクラスとプレイヤークラスを連携させることができました。
次回は一通りドメモを行ってみましょう。コンピューターだけでドメモを行わせてみるのです。