コード例 #1
0
ファイル: TicTacToeForm.cs プロジェクト: sqwan/TicTacToe
        public TicTacToeForm(string playername1, string playername2)
        {
            InitializeComponent();

            player1 = new Player(playername1, GameSymbol.Circle);
            player2 = new Player(playername2, GameSymbol.Cross);
        }
コード例 #2
0
ファイル: GameController.cs プロジェクト: sqwan/TicTacToe
        public GameController(Player player1, Player player2, int boardSize = 3)
        {
            this.player = new Player[2] { player1, player2 };

            this.board = new GameBoard(new GameVerifierFactory(VerifierType.Classic), boardSize);

            Random random = new Random();
            this.currentPlayer = random.Next(0, 2);
        }
コード例 #3
0
ファイル: GameBoard.cs プロジェクト: sqwan/TicTacToe
        public GameState InsertMoveInGameBoard(Player player, Point position)
        {
            if (!this.verifier.IsMoveAllowed(position)) {
                return GameState.MoveNotAllowed;
            }

            this.GameBoardArray[position.X, position.Y].SelectedByPlayer = player;

            if (this.verifier.IsGameOver()) {
                return GameState.GameOver;
            }
            if (this.verifier.IsPat()) {
                return GameState.Pat;
            }
            return GameState.None;
        }
コード例 #4
0
ファイル: GameController.cs プロジェクト: sqwan/TicTacToe
        /// <summary>
        /// Diese Methode handelt einen Zug von einem Spieler ab.
        /// Sie überprüft den aktuellen Spiel Status und fügt einen Zug auf das Spielfeld ein.
        /// </summary>
        /// <param name="player">Der aktuelle Spieler</param>
        /// <param name="point">Die Stelle wo der aktuelle Spieler einen Zug gemacht hat</param>
        public void Turn(Player player, Point point)
        {
            // Abfrage ob das Spiel bereits um ist bzw. ob ein Unentschieden erzielt wurde
            if (this.gameState == GameState.GameOver || this.gameState == GameState.Pat || this.gameState == GameState.GiveUp)
            {
                return;
            }

            // Überprüfen, ob der Zug von dem aktuellen Spieler gemacht wurde
            if (player != this.player[this.currentPlayer]) {
                return;
            }

            // Das Spielfeld darüber informieren, dass ein Zug gemacht wurde
            this.gameState = this.board.InsertMoveInGameBoard(player, point);

            if (this.gameState == GameState.MoveNotAllowed) {
                return;
            }

            // Die Interessenten darüber informieren, dass ein Zug gemacht wurde
            turnMadeEventArgsList.Add(new TurnMadeEventArgs() {
                Position = point,
                Symbol = this.player[this.currentPlayer].Symbol,
                Color = Color.Red
            });
            TurnMade.Invoke(this, turnMadeEventArgsList);

            // Wenn das Spiel vorbei ist, wird die Statistik hochgezählt
            if (this.gameState == GameState.GameOver) {
                this.player[this.currentPlayer].Score.Wins++;
                this.player[1 - this.currentPlayer].Score.Defeats++;
                this.currentPlayer = 1 - this.currentPlayer;
                NotifyGameStateChanged.Invoke(this, GetGameStatusAsEventArgs(point));
                return;
            }

            // Wenn ein Unentschieden erzielt wurde, dann die Statistik hochzähhlen
            if (this.gameState == GameState.Pat) {
                this.player[this.currentPlayer].Score.Pats++;
                this.player[1 - this.currentPlayer].Score.Pats++;
                this.currentPlayer = 1 - this.currentPlayer;
                NotifyGameStateChanged.Invoke(this, GetGameStatusAsEventArgs(point));
                return;
            }
            this.currentPlayer = 1 - this.currentPlayer;
            NotifyGameStateChanged.Invoke(this, GetGameStatusAsEventArgs(point));
        }