マリガンもできるエージェント - aharalabMeiji/fireplaceAharaLab GitHub Wiki

まずエージェントクラスによるエージェントのつくり方でエージェントが作れているものとして、説明を始めます。

エージェントのクラスの__init__関数(コンストラクタ)に変数を一つ増やします。

  def __init__(self, myName: str, myFunction, myOption = [], myClass: CardClass = CardClass.HUNTER, rating =1000, mulliganStrategy=None ):
      super().__init__(myName, myFunction, myOption, myClass, rating, mulliganStrategy=mulliganStrategy )

こうしておくと、'mulliganStrategy'に何か設定した時にだけ、マリガン対応をするようになります。エージェントクラスの中に

def AdorableCatMulligan(self, choiceCards):
	# make cost 1 cards left
	print("%s mulligan turn"%(self.name))
	cards_to_mulligan = []
	for num in range(len(choiceCards)):
		if choiceCards[num].cost > 1:
			cards_to_mulligan.append(choiceCards[num])
	return cards_to_mulligan

のようなメソッドを追加します。choiceCardsというのが、マリガンの対象となるハンドのカードということで、この中から任意の枚数のカードを選んでreturnするような関数を作ってください。ここではコストが2以上のカードをすべて選んでcards_to_mulliganというリストに追加しています。エージェントクラスのほうは、このメソッドを充実させることが必要です。

マリガンを有効にしてエージェントでプレイするには、start.pyのほうで、

 from agent_AdorableCat import AdorableCatAgent
 AdorableCat=AdorableCatAgent("AdorableCat", AdorableCatAgent.AdorableCatAI, mulliganStrategy=AdorableCatAgent.AdorableCatMulligan)

のように、オプションとしてメソッド名を追加すれば大丈夫です。以上です。

参考までに、agent_Standard.pyに入っている二つのエージェント(StandardHuman)にはマリガンのメソッドが作ってあります。参考にしてください。