Exemplo n.º 1
0
        public static Board GetNewBoard()
        {
            Board board = new Board();

            board._unplayedPieces.Add(new QueenBee(PieceColor.White, 1));
            board._unplayedPieces.Add(new Beetle(PieceColor.White, 1));
            board._unplayedPieces.Add(new Beetle(PieceColor.White, 2));
            board._unplayedPieces.Add(new Spider(PieceColor.White, 1));
            board._unplayedPieces.Add(new Spider(PieceColor.White, 2));
            board._unplayedPieces.Add(new Hopper(PieceColor.White, 1));
            board._unplayedPieces.Add(new Hopper(PieceColor.White, 2));
            board._unplayedPieces.Add(new Hopper(PieceColor.White, 3));
            board._unplayedPieces.Add(new Ant(PieceColor.White, 1));
            board._unplayedPieces.Add(new Ant(PieceColor.White, 2));
            board._unplayedPieces.Add(new Ant(PieceColor.White, 3));

            board._unplayedPieces.Add(new QueenBee(PieceColor.Black, 1));
            board._unplayedPieces.Add(new Beetle(PieceColor.Black, 1));
            board._unplayedPieces.Add(new Beetle(PieceColor.Black, 2));
            board._unplayedPieces.Add(new Spider(PieceColor.Black, 1));
            board._unplayedPieces.Add(new Spider(PieceColor.Black, 2));
            board._unplayedPieces.Add(new Hopper(PieceColor.Black, 1));
            board._unplayedPieces.Add(new Hopper(PieceColor.Black, 2));
            board._unplayedPieces.Add(new Hopper(PieceColor.Black, 3));
            board._unplayedPieces.Add(new Ant(PieceColor.Black, 1));
            board._unplayedPieces.Add(new Ant(PieceColor.Black, 2));
            board._unplayedPieces.Add(new Ant(PieceColor.Black, 3));
            board._hivailableHexes.Add(new Hex(24, 24), Hivailability.GetHivailability(board, new Hex(24, 24), true));
            return(board);
        }
Exemplo n.º 2
0
        private void RefreshAllHivailability(bool forceBlackCanPlace = false)
        {
            _hivailableHexes.Clear();
            foreach (Hex hex in _playedPieces.Values)
            {
                foreach (Hex directionHex in Neighborhood.neighborDirections)
                {
                    // don't do the center
                    if (directionHex.Equals(new Hex(0, 0)))
                    {
                        continue;
                    }

                    Hex   adjacentHex = hex + directionHex;
                    Piece adjacentPiece;
                    if (!TryGetPieceAtHex(adjacentHex, out adjacentPiece))
                    {
                        // empty space, add/update hivailability
                        if (!_hivailableHexes.ContainsKey(adjacentHex))
                        {
                            _hivailableHexes.Add(adjacentHex, Hivailability.GetHivailability(this, adjacentHex, false, forceBlackCanPlace));
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// returns the number of empty neighbors for a piece on the board
        /// returns .int.MaxValue if the given piece is unplayed
        /// </summary>
        /// <param name="piece"></param>
        /// <returns></returns>
        public int BreathingSpaces(Piece piece)
        {
            Hex hex;

            if (TryGetHexOfPlayedPiece(piece, out hex))
            {
                var hivailability = Hivailability.GetHivailability(this, hex);
                return(hivailability.EmptyNeighborHexes(hex).Count);
            }
            else
            {
                return(6);
            }
        }
Exemplo n.º 4
0
        internal static Hivailability GetHivailability(Board board, Hex hex, bool forceWhitePlacement = false, bool forceBlackPlacement = false)
        {
            Hivailability hivailability = new Hivailability();

            hivailability._neighborStatus[(int)Position.topright]    = GetNeighborStatus(board, hex, Position.topright);
            hivailability._neighborStatus[(int)Position.right]       = GetNeighborStatus(board, hex, Position.right);
            hivailability._neighborStatus[(int)Position.bottomright] = GetNeighborStatus(board, hex, Position.bottomright);
            hivailability._neighborStatus[(int)Position.bottomleft]  = GetNeighborStatus(board, hex, Position.bottomleft);
            hivailability._neighborStatus[(int)Position.left]        = GetNeighborStatus(board, hex, Position.left);
            hivailability._neighborStatus[(int)Position.topleft]     = GetNeighborStatus(board, hex, Position.topleft);

            hivailability._isBlocked[(int)Position.topright]    = IsDirectionBlocked(Position.topright, Position.topleft, Position.right, hivailability._neighborStatus);
            hivailability._isBlocked[(int)Position.right]       = IsDirectionBlocked(Position.right, Position.topright, Position.bottomright, hivailability._neighborStatus);
            hivailability._isBlocked[(int)Position.bottomright] = IsDirectionBlocked(Position.bottomright, Position.right, Position.bottomleft, hivailability._neighborStatus);
            hivailability._isBlocked[(int)Position.bottomleft]  = IsDirectionBlocked(Position.bottomleft, Position.bottomright, Position.left, hivailability._neighborStatus);
            hivailability._isBlocked[(int)Position.left]        = IsDirectionBlocked(Position.left, Position.bottomleft, Position.topleft, hivailability._neighborStatus);
            hivailability._isBlocked[(int)Position.topleft]     = IsDirectionBlocked(Position.topleft, Position.left, Position.topright, hivailability._neighborStatus);

            if (hivailability._neighborStatus.Contains(NeighborStatus.Black))
            {
                hivailability._blackCanPlace = true;
            }
            if (hivailability._neighborStatus.Contains(NeighborStatus.White))
            {
                hivailability._whiteCanPlace = true;
            }
            if (hivailability._whiteCanPlace && hivailability._blackCanPlace)
            {
                hivailability._blackCanPlace = false;
                hivailability._whiteCanPlace = false;
            }

            // the initial hivailable space is just for white
            if (forceWhitePlacement)
            {
                hivailability._whiteCanPlace = true;
            }
            // the second turn hivailable spaces are for black despite being next to white
            if (forceBlackPlacement)
            {
                hivailability._blackCanPlace = true;
            }
            return(hivailability);
        }