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); } } } }
// 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); } } } }
// 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"; }
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)); } }
public override void StartProcess() { base.StartProcess(); selectedCard.Clear(); timer = 0f; if (Taker is CpuPlayer) { CpuPlayer cpuPlayer = (CpuPlayer)Taker; ChooseCalledCard(cpuPlayer.SelectCalledCard(standardDeck)); } }
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"); } }
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); }
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); } } } } } }
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)); } } } }
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); }
public Move?GetMove(CpuPlayer player, Board board, PiecesColor turnColor) => GetBestMove(player, board, turnColor, 0, player.RecursionDepth);