void Awake()
 {
     onePlayArea  = GetComponent <OnePlayArea> ();
     gameManager  = GetComponentInParent <GameManager> ();
     drawable     = gameManager.GetComponent <Drawable> ();
     decks        = gameManager.GetComponentsInChildren <Deck> ();
     hands        = gameManager.GetComponentsInChildren <Hand> ();
     oneHands     = hands[0].GetComponentsInChildren <OneHand> ();
     onePlayAreas = gameManager.GetComponentsInChildren <OnePlayArea> ();
     discardBox   = gameManager.GetComponentInChildren <DiscardsBox> ();
 }
    public void PlayForHand(Hand playHand, OnePlayArea targetArea)
    {
        if (!targetArea.CanPlay(playHand.GetSelectedCards()))
        {
            return;
        }
        // カードプレイ
        targetArea.Play(playHand.RemoveSelectedCards());
        var drawPlay = targetArea.DrawPlay();

        // ハンド補充
        playHand.Deal(decks[0]);
        var drawHandDeal = playHand.DrawDeal();

        drawable.SyncCommand.Execute(drawPlay.Merge(drawHandDeal));

        // 次のカードがプレイできるように再配置する処理
        var canNextPlay = hands.Any(hand =>
                                    playAreas.Any(onePlayArea =>
                                                  onePlayArea.CanNextPlay(hand)));

        // 次プレイできれば、再配置処理は必要ない
        if (canNextPlay)
        {
            return;
        }

        Debug.Log("CannotPlay!");
        // プレイ済みのカードの廃棄処理
        foreach (var playArea in playAreas)
        {
            discardsBox.Store(playArea.RemoveAll());
        }
        var drawRemoveForPlayArea = Observable.TimerFrame(120).AsUnitObservable()
                                    .Concat(discardsBox.DrawRemoveForPlayArea());

        // プレイエリアへの再配置
        foreach (var onePlayArea in playAreas)
        {
            onePlayArea.Deal(decks[0].TopDraw());
        }
        var drawPlayAreaDeal = playAreas.Select(playArea => playArea.DrawDeal()).Merge();

        drawable.SyncCommand.Execute(drawRemoveForPlayArea.Concat(drawPlayAreaDeal));
        return;
    }