Esempio n. 1
0
 private void AskPoigneeOfCurrentPlayer()
 {
     if (currentPlayer is CpuPlayer)
     {
         CpuPlayer cpuPlayer = (CpuPlayer)currentPlayer;
         Poignee   poignee   = cpuPlayer.DecidePoigneeToShow();
         SetPoigneeForCurrentPlayer(poignee);
     }
     else         // human player
     {
         Poignee maxPoignee = GetMaxPoignee(currentPlayer.Hand, NPlayer);
         if (maxPoignee == Poignee.None)
         {
             SetPoigneeForCurrentPlayer(Poignee.None);
         }
         else
         {
             answerTimer += Time.deltaTime;
             if (answerTimer >= answerTimeLimit)
             {
                 SetPoigneeForCurrentPlayer(Poignee.None);
             }
             if (humanPlayerPoignee.Value != Poignee.NotDecided)
             {
                 SetPoigneeForCurrentPlayer(humanPlayerPoignee.Value);
             }
         }
     }
 }
Esempio n. 2
0
 // Check for each player the cards of their hand to show
 private void ScanForPoigneeToShow()
 {
     if (currentPlayer.CurrentPoignee <= Poignee.None)
     {
         GoToNextPlayer();
     }
     else
     {
         if (currentPlayer is CpuPlayer)
         {
             CpuPlayer cpuPlayer = (CpuPlayer)currentPlayer;
             SetPoigneeToShow(cpuPlayer.SelectCardsOfPoigneeToShow(NPlayer));
         }
         else             // human player
         {
             decideTimer += Time.deltaTime;
             int nCardToShow = GetNCardPoignee(currentPlayer.CurrentPoignee, NPlayer);
             if (decideTimer >= decidePoigneeLimitTime)
             {
                 SetPoigneeToShow(CompletePoigneeWithRandomCards(selectedCards.Value, nCardToShow));
             }
             else if (selectedCards.Count == nCardToShow)
             {
                 SetPoigneeToShow(selectedCards.Value);
             }
         }
     }
 }
Esempio n. 3
0
    // Use this for initialization
    void  Start()
    {
        AutoPlay = false;

        stateController = new StateController();
        //if(GameHeader.DicByLayer== null || (GameHeader.CurrentTurn==0 && !GameHeader.DicByLayer.ContainsKey(0)))//first play, get the layer 0's states
        //{
        //    Debug.Log("GameHeader.CurrentTurn==0 and i'm loading the DIC");
        //    GameHeader.GetStatesForLayer();//load 0 and 1
        //}



        edgeController = new EdgeController();
        Tt             = ButtonMaster.GetComponentInChildren <Text>();             //get board header
        Buttons        = ButtonMaster.GetComponentsInChildren <Button>().ToList(); //get currnet board buttons
        StrToBnt       = new Dictionary <string, Button>();
        i = 0;
        foreach (Button bnt in Buttons)
        {
            if ((bnt.name == "ButtonBackMenu"))
            {
                temp = bnt;
            }
            ///Button bnt2 = new Button;
            StrToBnt.Add(bnt.name.Replace("Button-", ""), Buttons[i]);//set the dic
            //Debug.Log("StrToBnt " + StrToBnt[bnt.name.Replace("Button-", "")]);
            i++;
        }
        Buttons.Remove(temp);
        //for (i = 0; i < 9; i++)
        //{
        //    Debug.Log($"StrToBnt {i} {StrToBnt[""+1]}");
        //}
        TtB = new Text[GameHeader.BoradSize * GameHeader.BoradSize];
        //Debug.Log("GameHeader.BoradSize  == " + GameHeader.BoradSize);
        //Debug.Log("TtB size  == " + TtB.Length);



        SetBoard();//reset the board
        cpuPlayer = new CpuPlayer
        {
            StrToBnt   = StrToBnt,
            name       = GameHeader.Tokens[1],
            Buttons    = Buttons,
            GameMaster = this,
        };

        cpuPlayer2 = new CpuPlayer
        {
            StrToBnt   = StrToBnt,
            name       = GameHeader.Tokens[0],
            Buttons    = Buttons,
            GameMaster = this,
        };
        //SetCpuPlayer();
        CpuPlayer.mod = "Weight";
    }
Esempio n. 4
0
    private void MakeCpuDog()
    {
        CpuPlayer cpuPlayer = (CpuPlayer)Taker;

        foreach (Card card in cpuPlayer.ChooseCardsForDog(nDog))
        {
            selectedCards.Add(card);
        }
        PutCardsInDog();
    }
 public override void StartProcess()
 {
     base.StartProcess();
     scoringData.chelemAnnounced = false;
     answerTimer = 0f;
     if (Taker is CpuPlayer)
     {
         CpuPlayer cpuPlayer = (CpuPlayer)Taker;
         DecideChelemAnnouncement(cpuPlayer.AnnounceChelem(players.Count));
     }
 }
Esempio n. 6
0
 public override void StartProcess()
 {
     base.StartProcess();
     selectedCard.Clear();
     timer = 0f;
     if (Taker is CpuPlayer)
     {
         CpuPlayer cpuPlayer = (CpuPlayer)Taker;
         ChooseCalledCard(cpuPlayer.SelectCalledCard(standardDeck));
     }
 }
Esempio n. 7
0
        static void Main(string[] args)
        {
            ConsolePlayer consolePlayer = new ConsolePlayer("あなた");
            CpuPlayer     cpuPlayer     = new CpuPlayer("CPU");

            Referee referee = new Referee();

            while (true)
            {
                referee.Judge(consolePlayer, cpuPlayer);
                Console.WriteLine("\n\n---------------------------------------------\n\n");
            }
        }
Esempio n. 8
0
        private GamePlayer[] getPlayers()
        {
            GamePlayer[] players = new GamePlayer[2];

            switch (comboBox1.SelectedIndex)
            {
            case 0:
                players[0] = new HumanPlayer(0);
                break;

            case 1:
                players[0] = new CpuPlayer(GamePlayer.PlayerType.CPUEasy, 0, (int)depthP1.Value);
                break;

            case 2:
                players[0] = new CpuPlayer(GamePlayer.PlayerType.CPUMedium, 0, (int)depthP1.Value);
                break;

            case 3:
                players[0] = new CpuPlayer(GamePlayer.PlayerType.CPUHard, 0, (int)depthP1.Value);
                break;
            }

            switch (comboBox2.SelectedIndex)
            {
            case 0:
                players[1] = new HumanPlayer(1);
                break;

            case 1:
                players[1] = new CpuPlayer(GamePlayer.PlayerType.CPUEasy, 1, (int)depthP2.Value);
                break;

            case 2:
                players[1] = new CpuPlayer(GamePlayer.PlayerType.CPUMedium, 1, (int)depthP2.Value);
                break;

            case 3:
                players[1] = new CpuPlayer(GamePlayer.PlayerType.CPUHard, 1, (int)depthP2.Value);
                break;
            }

            return(players);
        }
Esempio n. 9
0
 void Update()
 {
     if (status == ProcessState.Running)
     {
         if (turn > lastTurn)
         {
             FinishProcess();
         }
         else
         {
             if (playedCard.Count == players.Count)                 // toutes les cartes ont été jouées
             {
                 ChangeCurrentPlayer(null);
                 waitForNewTurnTimer += Time.deltaTime;
                 if (waitForNewTurnTimer > delayBetweenTurnsSec)
                 {
                     FinishCurrentTurn();
                 }
             }
             else
             {
                 if (currentPlayer is CpuPlayer)
                 {
                     CpuPlayer cpuPlayer = (CpuPlayer)currentPlayer;
                     Card      card      = cpuPlayer.SelectCardToPlay(playedCard.Value);
                     PlayCard(currentPlayer, card);
                 }
                 else
                 {
                     if (cardsSelected.Count == 1) // si le joueur humain a sélectionné sa carte à jouer
                     {
                         Card card = cardsSelected.Value[0];
                         PlayCard(currentPlayer, card);
                         cardsSelected.Value.Remove(card);
                     }
                 }
             }
         }
     }
 }
Esempio n. 10
0
 private void Update()
 {
     if (status == ProcessState.Running)
     {
         if (bidder is CpuPlayer)
         {
             CpuPlayer cpu = (CpuPlayer)bidder;
             cpu.MakeABid(players.Count, players.GetPlayerIndex(cpu), maxBid);
         }
         else // human player
         {
             timer += Time.deltaTime;
             if (timer > limitAnswerTimeSec)
             {
                 bidder.SetBid(Bid.Pass, maxBid);
                 humanPlayerBidAborted.Raise();
             }
         }
         Bid currentBid = bidder.CurrentBid;
         if (currentBid != Bid.None)
         {
             if (currentBid > maxBid)
             {
                 maxBid = currentBid;
             }
             if (IsBiddingFinished())
             {
                 FinishProcess();
             }
             else
             {
                 SelectBidder(players.GetNext(bidder));
             }
         }
     }
 }
Esempio n. 11
0
        private CpuMove?GetBestMove(CpuPlayer player, Board board, PiecesColor turnColor,
                                    int recursionLevel, int recursionDepth)
        {
            void EvaluateMove(CpuMove move)
            {
                var tempBoard = new Board(board);

                tempBoard.ApplyMove(move);

                if (recursionLevel < recursionDepth)
                {
                    var response = GetBestMove(player, tempBoard, turnColor.Invert(),
                                               recursionLevel + 1, recursionDepth);

                    move.Response = response ?? (ICpuMoveResponse?)new CpuMoveCheckMate();
                }
                else if (_moveValidationService.IsPositionUnderCheck(tempBoard,
                                                                     turnColor.Invert(), move.Dst))
                {
                    move.Response = new CpuMoveCheck(tempBoard[move.Dst]?.Value ?? 0);
                }
                else
                {
                    move.Response = new CpuMoveUnknown();
                }

                move.Value -= move.Response?.Value ?? 0;
                if (recursionLevel == 0)
                {
                    move.Value += EvaluateBoardCoverageValue(tempBoard, turnColor);
                }
            }

            var startTime = DateTime.Now;
            var moves     = _moveEvaluationService.GetValidCpuMoves(board, turnColor);

            if (!moves.Any())
            {
                return(null);
            }

            if (recursionLevel == 0)
            {
                Parallel.ForEach(moves, EvaluateMove);
            }
            else
            {
                foreach (var move in moves)
                {
                    EvaluateMove(move);
                }
            }

            var bestValue = moves.Max(move => move.Value);
            var bestMoves = moves.Where(move => move.Value == bestValue).ToArray();
            var bestMove  = bestMoves[_random.Next(bestMoves.Length)];

            if (recursionLevel <= MaxNotifiableLevel)
            {
                player.OnMoveEvaluated(recursionLevel,
                                       moves, bestMove, DateTime.Now - startTime);
            }

            return(bestMove);
        }
Esempio n. 12
0
 public Move?GetMove(CpuPlayer player, Board board, PiecesColor turnColor) =>
 GetBestMove(player, board, turnColor, 0, player.RecursionDepth);