コード例 #1
0
ファイル: Square.cs プロジェクト: emilysas/Othello
 public void PlacePiece(IPieceType piece)
 {
     if (IsEmpty())
         _contents = piece;
        else
        throw new Exception("This square is occupied");
 }
コード例 #2
0
ファイル: Game.cs プロジェクト: emilysas/Othello
 public void Play(IOthelloBoard board, IPlayer player1, IPlayer player2, string gridRef, IPieceType piece)
 {
     PlayerToPlayNext.Play(board, gridRef, piece);
     _passCount = 0;
     UpdateScores(player1, player2);
     NextPlayersTurn();
 }
コード例 #3
0
ファイル: OthelloRuleBook.cs プロジェクト: emilysas/Othello
        public Dictionary<Directions, List<IPieceType>> CheckAlongCompassPoints(string originalGridRef, List<Directions> locations, IPieceType pieceToPlay )
        {
            var countersAlongLine = new Dictionary<Directions, List<IPieceType>>();

            foreach (Directions direction in locations)
            {
                var listOfStuffToTurnOver = new List<IPieceType>();
                var gridRef = originalGridRef;
                do
                {
                    var neighbouringCounter = _gridRefFinder.NeighbouringSquare(direction, gridRef, _board);
                    if (neighbouringCounter == null)
                        break;
                    if (neighbouringCounter.Colour != pieceToPlay.Colour)
                        listOfStuffToTurnOver.Add(neighbouringCounter);
                    else
                    {
                        countersAlongLine.Add(direction, listOfStuffToTurnOver);
                        break;
                    }

                    gridRef = _gridRefFinder.FindGridRef(direction, gridRef);
                } while (true);
            }
            return countersAlongLine;
        }
コード例 #4
0
        public IPieceType ViewBoardSquare(string gridRef)
        {
            Square     square;
            IPieceType contents = null;

            if (_board.TryGetValue(gridRef, out square))
            {
                contents = square.Contents();
            }
            return(contents);
        }
コード例 #5
0
 public void PlacePiece(IPieceType piece)
 {
     if (IsEmpty())
     {
         _contents = piece;
     }
     else
     {
         throw new Exception("This square is occupied");
     }
 }
コード例 #6
0
ファイル: OthelloBoard.cs プロジェクト: emilysas/Othello
        public override void AcceptPlay(string gridRef, IPieceType pieceToPlay)
        {
            var locationOfOpposingCounters = _rules.CheckAtLeastOneNeighbourOfOppositeColour(gridRef,
                pieceToPlay);

            if (locationOfOpposingCounters.Count <= 0) return;

            var countersAlongLine = _rules.CheckAlongCompassPoints(gridRef,
                locationOfOpposingCounters, pieceToPlay);

            if (countersAlongLine.Count <= 0) return;

            PlacePiece(gridRef, (Counter)pieceToPlay);
            IncrememtOwnScore(pieceToPlay.Colour);
            FlipCounters(countersAlongLine);
        }
コード例 #7
0
ファイル: OthelloRuleBook.cs プロジェクト: emilysas/Othello
        public List<Directions> CheckAtLeastOneNeighbourOfOppositeColour(string gridRef, IPieceType pieceToPlay)
        {
            var locationOfOpposingCounters = new List<Directions>();
            var compasspoints = Enum.GetValues(typeof(Directions));

            foreach (Directions direction in compasspoints)
            {

                    var neighbouringCounter = _gridRefFinder.NeighbouringSquare(direction, gridRef, _board);
                    if (neighbouringCounter != null && neighbouringCounter.Colour != pieceToPlay.Colour)
                    {
                        locationOfOpposingCounters.Add(direction);
                    }

            }
            return locationOfOpposingCounters;
        }
コード例 #8
0
ファイル: OthelloBoard.cs プロジェクト: emilysas/Othello
        public override void AcceptPlay(string gridRef, IPieceType pieceToPlay)
        {
            var locationOfOpposingCounters = _rules.CheckAtLeastOneNeighbourOfOppositeColour(gridRef,
                                                                                             pieceToPlay);

            if (locationOfOpposingCounters.Count <= 0)
            {
                return;
            }

            var countersAlongLine = _rules.CheckAlongCompassPoints(gridRef,
                                                                   locationOfOpposingCounters, pieceToPlay);

            if (countersAlongLine.Count <= 0)
            {
                return;
            }

            PlacePiece(gridRef, (Counter)pieceToPlay);
            IncrememtOwnScore(pieceToPlay.Colour);
            FlipCounters(countersAlongLine);
        }
コード例 #9
0
ファイル: OthelloBoard.cs プロジェクト: emilysas/Othello
        private void PlacePiece(string gridRef, IPieceType piece)
        {
            var square = _board[gridRef];

            square.PlacePiece(piece);
        }
コード例 #10
0
        public Dictionary <Directions, List <IPieceType> > CheckAlongCompassPoints(string originalGridRef, List <Directions> locations, IPieceType pieceToPlay)
        {
            var countersAlongLine = new Dictionary <Directions, List <IPieceType> >();

            foreach (Directions direction in locations)
            {
                var listOfStuffToTurnOver = new List <IPieceType>();
                var gridRef = originalGridRef;
                do
                {
                    var neighbouringCounter = _gridRefFinder.NeighbouringSquare(direction, gridRef, _board);
                    if (neighbouringCounter == null)
                    {
                        break;
                    }
                    if (neighbouringCounter.Colour != pieceToPlay.Colour)
                    {
                        listOfStuffToTurnOver.Add(neighbouringCounter);
                    }
                    else
                    {
                        countersAlongLine.Add(direction, listOfStuffToTurnOver);
                        break;
                    }

                    gridRef = _gridRefFinder.FindGridRef(direction, gridRef);
                } while (true);
            }
            return(countersAlongLine);
        }
コード例 #11
0
        public void SetUp(string gridRef, IPieceType pieceType)
        {
            Square square = _board[gridRef];

            square.PlacePiece(pieceType);
        }
コード例 #12
0
ファイル: Player.cs プロジェクト: emilysas/Othello
 public void Play(IBoard board, string gridRef, IPieceType piece)
 {
     board.AcceptPlay(gridRef, piece);
 }
コード例 #13
0
ファイル: Player.cs プロジェクト: emilysas/Othello
 public void Play(IBoard board, string gridRef, IPieceType piece)
 {
     board.AcceptPlay(gridRef, piece);
 }
コード例 #14
0
 public virtual void AcceptPlay(string gridRef, IPieceType pieceToPlay)
 {
 }
コード例 #15
0
ファイル: OthelloBoard.cs プロジェクト: emilysas/Othello
 private void PlacePiece(string gridRef, IPieceType piece)
 {
     var square = _board[gridRef];
     square.PlacePiece(piece);
 }
コード例 #16
0
 public void Play(IOthelloBoard board, IPlayer player1, IPlayer player2, string gridRef, IPieceType piece)
 {
     PlayerToPlayNext.Play(board, gridRef, piece);
     _passCount = 0;
     UpdateScores(player1, player2);
     NextPlayersTurn();
 }
コード例 #17
0
        public List <Directions> CheckAtLeastOneNeighbourOfOppositeColour(string gridRef, IPieceType pieceToPlay)
        {
            var locationOfOpposingCounters = new List <Directions>();
            var compasspoints = Enum.GetValues(typeof(Directions));

            foreach (Directions direction in compasspoints)
            {
                var neighbouringCounter = _gridRefFinder.NeighbouringSquare(direction, gridRef, _board);
                if (neighbouringCounter != null && neighbouringCounter.Colour != pieceToPlay.Colour)
                {
                    locationOfOpposingCounters.Add(direction);
                }
            }
            return(locationOfOpposingCounters);
        }
コード例 #18
0
ファイル: Board.cs プロジェクト: emilysas/Othello
 public virtual void AcceptPlay(string gridRef, IPieceType pieceToPlay)
 {
 }
コード例 #19
0
ファイル: Board.cs プロジェクト: emilysas/Othello
 public void SetUp(string gridRef, IPieceType pieceType)
 {
     Square square = _board[gridRef];
     square.PlacePiece(pieceType);
 }