Update hearts.py

「ハーツ」というトランプを使ったカードゲームをプレイする関数です。

この関数でのハーツのルール：
・プレイヤーは４人。
・ハーツの目的はペナルティポイントが加算されないカードを使って"trick"を避けること。１３ラウンドの後、一番ポイントが低いプレイヤーが勝つ。
・ハートはそれぞれ１ポイント。スペードのクイーン（"QS"）は１３ポイント。ダイヤモンドの１０("0D")は－１０ポイント。あるプレイヤーが１３枚すべてのハートのカードをゲームの最後手札に揃えると、ー２６ポイント。
・同じマークのカードの強さの順は、強い順に、AKQJ098765432
・ゲームの最初、プレイヤーは１３枚のカードをランダムに配られる。そこから３枚カードを選んで隣のプレイヤーに渡す。
・プレイヤーは順番に１枚ずつカードを出す。
・クローバーの２（"2D"）を持っているプレイヤーが最初のラウンドをリード（手札を出す）する。
・最初に出されたカードと同じマークのカードを出さなくてはならない。もし同じマークのカードがなければ、違うマークのカードを出しても良い。
・手札にハートしかない時以外、ハートでリードすることはできない。でも、ハートが一度場に出されると（break）ハートをいつでも出してよい。
・そのラウンドで、同じマークのカードしかなければ一番弱いカードを出したプレイヤーが、違うマークのカードが出されれば違うマークのカードを出したプレイヤーの中で一番弱いカードを出したプレイヤーがtrickを取る。
・trickを取れば場に出ているカードをすべて手札に加える。１３ラウンドの後、最終的に前述したポイントを数え、一番ポイントが多いプレイヤーが負け。

１．pass_cards(hand)
handは最初にランダムに配られた１３枚の手札のリスト。
例：['5S','0D'.......,'QC']
5Sはスペードの５。0Dはダイヤモンドの１０。QCはクローバーのQueen。
戻り値は隣の人に渡す３枚のカードのリスト。例：['AH','JD','6C']
ただし、後のゲームが有利に運ぶようなカードの選び方をする。（コメント参照）

2　is_valid_play(played,hand,play,broken)

played:そのラウンドで最後にプレイされたカード（例['QS']）
hand:そのラウンドで持っているカード
play:次にプレイしたいカード(例['QS'])
broken:ハートがbreakされたかどうかのBoolean値
playがルールの条件をクリアする、有効なプレイであるかどうかBoolean値で返す。

３get_valid_plays(played,hand,broken,is_valid=is_valid_play)
is_valid_playを使い、ルールからみて可能なプレイをリストで戻す。

４.score_game(tricks_won)
tricks_wonはそのプレイヤーが得たtrickのlistのlistです。
tricks_wonでの合計点数を戻り値で返します。

５play(tricks_won,played,hand,broken,is_valid=is_valid_play,
         valid_plays=get_valid_plays,score=score_game)
次のプレイを戻り値として返す。別にavoid_points,damp_dangerous_card,voidingという戦術によって違うプレイを返す関数を作り、状況によって関数を使い分けるようプログラムすることで、最善のプレイを返すようプログラムしました。