2020年6月21日10:54, プログラミング
前回はplayer.pyを作成し、プレイヤークラスを記述しました。
まだ__init__メソッドとゲッター、セッターしかないため、ドメモをプレイするために必要なメソッドを追加していきます。
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)>>> "))
def call_card(self, card)メソッドの1行目にself.my_call_cards.append(card)という文がありますね。ここで使用しているappendというメソッドはリスト型オブジェクトで使用できます。
appendはリスト型オブジェクトへ、新しい要素を加えるために使用されます。
>>> a = [1,2]
>>> a
[1, 2]
>>> a.append(3)
>>> a
[1, 2, 3]
同じく、def call_card(self, card)メソッドの3行目にself.my_cards.remove(card)という文がありますね。
removeはリスト型オブジェクトから要素を削除するために使用されます。
>>> a
[1, 2, 3]
>>> a.remove(2) #インデックスではなく要素の値を指定すること
>>> a
[1, 3]
def think(self, open_cards=[])メソッドの1行目にreturn int(input("call num (1 ~ 7)>>> "))という文があります。
inputはPythonプログラムが人間の入力を受け付けるためにあります。
>>> a = input("")
>? 文字列を入力 #任意の文字列を入力
>>> a
'文字列を入力'
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メソッドはプレイヤーの思考回路を表現するメソッドです。
ここではinputを使用して人間の入力を受け付けます。ここに人間が1から7までの数字を入力することで、その入力された数字がreturn文によって返されます。
ここはのちのちオーバーライドという表現を行い、様々なプレイヤーモデルの思考回路を表現します。
もちろん、あなたがドメモを10000回やりたいのであれば、このinputへ数字を入力し続けれもかまいませんが。
では実際にこのプレイヤークラスを使用してみましょう。
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]
これで一通りの流れが見れましたね。
次に、このプレイヤークラスとドメモクラスを連携させていきましょう。