Ejemplo n.º 1
0
        public Player MoveToNextPlayer()
        {
            if (stepBack || (makaoStack.TopCard == new Card(CardRank.King, CardSuit.Pike) && TopCardActive))
            {
                return(HandleStepBack());
            }

            if (playersInGame[currentPlayerIndex].Cards.Count == 0)
            {
                playersInGame.RemoveAt(currentPlayerIndex);

                if (playersInGame.Count < 2)
                {
                    GameEnded?.Invoke(this, EventArgs.Empty);
                    return(null);
                }

                currentPlayerIndex %= playersInGame.Count;
            }
            else
            {
                currentPlayerIndex = (currentPlayerIndex + 1) % playersInGame.Count;
            }

            CurrentPlayerChanged?.Invoke(this, EventArgs.Empty);

            return(CurrentPlayer);
        }
Ejemplo n.º 2
0
 protected void OnCurrentPlayerChanged(string newCurrentPlayerName)
 {
     CurrentPlayerChanged?.Invoke(this, new PlayerEventArgs
     {
         PlayerName = newCurrentPlayerName
     });
 }
Ejemplo n.º 3
0
 public void Start(string firstPlayerName, string secondPlayerName)
 {
     firstPlayer          = CreatePlayer(firstPlayerName);
     secondPlayer         = CreatePlayer(secondPlayerName);
     isFirstPlayerCurrent = true;
     CurrentPlayerChanged?.Invoke(CurrentPlayer);
     ChangeStage(GameStage.ArrangingShips);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// ゲームをリセットします。
 /// </summary>
 public void ResetGame()
 {
     this.board.ResetBoard(PlayerForm.None);
     CurrentPlayer = PlayerForm.Circle;
     CurrentPlayerChanged?.Invoke(this, EventArgs.Empty);
     BoardChanged?.Invoke(this, EventArgs.Empty);
     this.GameStatus = GameStatus.BeforeStart;
     Winner          = PlayerForm.None;
 }
Ejemplo n.º 5
0
 /// <summary>
 /// <see cref="CurrentPlayer"/>を切り替えます。
 /// </summary>
 private void SwitchCurrentPleyer()
 {
     if (CurrentPlayer == PlayerForm.Circle)
     {
         CurrentPlayer = PlayerForm.Cross;
         CurrentPlayerChanged?.Invoke(this, EventArgs.Empty);
     }
     else if (CurrentPlayer == PlayerForm.Cross)
     {
         CurrentPlayer = PlayerForm.Circle;
         CurrentPlayerChanged?.Invoke(this, EventArgs.Empty);
     }
 }
Ejemplo n.º 6
0
        private void ResetGame()
        {
            IsBlackPlayerCurrent  = true;
            _isPlayerBeforePassed = false;
            CurrentPlayerChanged?.Invoke();

            Board.EmptyBoard();
            Score = new Dictionary <BoardColor, int>
            {
                { BoardColor.Black, 0 },
                { BoardColor.White, 0 }
            };
            ScoreChanged?.Invoke(BoardColor.Black);
            ScoreChanged?.Invoke(BoardColor.White);
        }
Ejemplo n.º 7
0
 private void ChangeCurrentPlayer()
 {
     IsBlackPlayerCurrent = !IsBlackPlayerCurrent;
     CurrentPlayerChanged?.Invoke();
 }
Ejemplo n.º 8
0
        private Player HandleStepBack()
        {
            SearchningPlayerDelegate getPreceedingPlayerIndex = (int cur) =>
            {
                return((cur - 1 < 0) ? playersInGame.Count - 1 : cur - 1);
            };
            SearchningPlayerDelegate getProceedingPlayerIndex = (int cur) =>
            {
                return((cur + 1) % playersInGame.Count);
            };

            if (playersInGame[currentPlayerIndex].Cards.Count == 0)
            {
                playersInGame.RemoveAt(currentPlayerIndex);

                if (playersInGame.Count < 2)
                {
                    GameEnded?.Invoke(this, EventArgs.Empty);
                    return(null);
                }

                if (!stepBack)
                {
                    stepBack = true;

                    for (currentPlayerIndex = getPreceedingPlayerIndex(currentPlayerIndex);
                         playersInGame[currentPlayerIndex].TurnsToWait > 0;
                         currentPlayerIndex = getPreceedingPlayerIndex(currentPlayerIndex))
                    {
                    }
                }
                else
                {
                    stepBack = false;

                    for (currentPlayerIndex = currentPlayerIndex % playersInGame.Count;
                         playersInGame[currentPlayerIndex].TurnsToWait > 0;
                         currentPlayerIndex = getProceedingPlayerIndex(currentPlayerIndex))
                    {
                    }
                }
            }
            else
            {
                if (!stepBack)
                {
                    stepBack = true;

                    for (currentPlayerIndex = getPreceedingPlayerIndex(currentPlayerIndex);
                         playersInGame[currentPlayerIndex].TurnsToWait > 0;
                         currentPlayerIndex = getPreceedingPlayerIndex(currentPlayerIndex))
                    {
                    }
                }
                else
                {
                    stepBack = false;

                    for (currentPlayerIndex = getProceedingPlayerIndex(currentPlayerIndex);
                         playersInGame[currentPlayerIndex].TurnsToWait > 0;
                         currentPlayerIndex = getProceedingPlayerIndex(currentPlayerIndex))
                    {
                    }
                }
            }

            CurrentPlayerChanged?.Invoke(this, EventArgs.Empty);

            return(playersInGame[currentPlayerIndex]);
        }
Ejemplo n.º 9
0
 private void MoveToNextPlayer()
 {
     isFirstPlayerCurrent = !isFirstPlayerCurrent;
     CurrentPlayerChanged?.Invoke(CurrentPlayer);
 }
Ejemplo n.º 10
0
 private void OnCurrentPlayerChanged()
 {
     CurrentPlayerChanged?.Invoke(CurrentPlayer);
 }