示例#1
0
        public BoardPositions GetMovableBoardPositions(
            PlayerType player,
            BoardPosition position,
            Board board,
            BoardPositions turnPlayerKomaPositions,
            BoardPositions opponentKomaPositions)
        {
            var positions = new BoardPositions();

            // [後手なら移動可能位置は反転される]
            var toRelativePos = RelativeBoardPosition;

            if (player == PlayerType.SecondPlayer)
            {
                toRelativePos = toRelativePos.Reverse();
            }

            var toPos = position.Add(toRelativePos);

            if (board.Positions.Contains(toPos))
            {
                if (!turnPlayerKomaPositions.Contains(toPos))
                {
                    positions = positions.Add(toPos);
                }
            }

            return(positions);
        }
示例#2
0
 public BoardPositions MovablePosition(List <Koma> komaList)
 {
     lock (thisLock)
     {
         var movablePositions = new BoardPositions();
         foreach (var koma in komaList)
         {
             movablePositions = movablePositions.Add(MovablePosition(koma));
         }
         return(movablePositions);
     }
 }
示例#3
0
 public BoardPositions GetMovableBoardPositions(
     Board board,
     BoardPositions playerKomaPositions,
     BoardPositions opponentPlayerKomaPositions)
 {
     return(State.GetMovableBoardPositions(
                KomaType,
                Player,
                board,
                playerKomaPositions,
                opponentPlayerKomaPositions));
 }
示例#4
0
        public BoardPositions GetMovableBoardPositions(
            KomaType koma,
            PlayerType player,
            Board board,
            BoardPositions playerKomaPositions,
            BoardPositions opponentPlayerKomaPositions)
        {
            // [手駒なら空き位置のどこでも置ける]
            var positions = board.Positions;

            positions = positions.Substract(playerKomaPositions);
            positions = positions.Substract(opponentPlayerKomaPositions);
            return(positions);
        }
示例#5
0
        public void SelectPosition(string input)
        {
            if (BoardPositions.ContainsKey(input))
            {
                if (SelectedPosition != null)
                {
                    DeselectPosition();
                }

                SelectedPosition = BoardPositions[input];

                DrawSelectedPosition();
            }
        }
示例#6
0
        public ShotStatus FireAtShip(Coordinates position)
        {
            if (BoardPositions.Contains(position))
            {
                _lifeRemaining--;

                if (_lifeRemaining == 0)
                {
                    return(ShotStatus.HitAndSunk);
                }
                return(ShotStatus.Hit);
            }
            return(ShotStatus.Miss);
        }
示例#7
0
 public BoardPositions GetMovableBoardPositions(
     KomaType komaType,
     PlayerType player,
     Board board,
     BoardPositions playerKomaPositions,
     BoardPositions opponentPlayerKomaPositions)
 {
     return(komaType.GetMovableBoardPositions(
                player,
                Position,
                IsTransformed,
                board,
                playerKomaPositions,
                opponentPlayerKomaPositions));
 }
示例#8
0
        public ShotStatus FireAtShip(Coordinate position) // loop through ships and find if ship xists at those coordinates...
        {
            if (BoardPositions.Contains(position))
            {
                _lifeRemaining--;

                if (_lifeRemaining == 0)
                {
                    return(ShotStatus.HitAndSunk);
                }

                return(ShotStatus.Hit);
            }

            return(ShotStatus.Miss);
        }
示例#9
0
        public BoardPositions GetMovableBoardPositions(
            PlayerType player,
            BoardPosition position,
            Board board,
            BoardPositions turnPlayerKomaPositions,
            BoardPositions opponentKomaPositions)
        {
            var positions = new BoardPositions();

            // [後手なら移動可能位置は反転される]
            var toRelativePos = RelativeBoardPosition;

            if (player == PlayerType.SecondPlayer)
            {
                toRelativePos = toRelativePos.Reverse();
            }

            for (var toPos = position.Add(toRelativePos); ; toPos = toPos.Add(toRelativePos))
            {
                // [盤の範囲外に来たら移動不可]
                if (!board.Positions.Contains(toPos))
                {
                    break;
                }

                // [自分の駒に当たったら移動不可]]
                if (turnPlayerKomaPositions.Contains(toPos))
                {
                    break;
                }

                positions = positions.Add(toPos);

                // [相手の駒があったらその先は移動できない]
                if (opponentKomaPositions.Contains(toPos))
                {
                    break;
                }
            }

            return(positions);
        }
示例#10
0
        public BoardPositions GetMovableBoardPositions(
            PlayerType player,
            BoardPosition position,
            Board board,
            BoardPositions turnPlayerKomaPositions,
            BoardPositions opponentKomaPositions)
        {
            BoardPositions positions = new BoardPositions();

            foreach (var move in Moves)
            {
                positions = positions.Add(
                    move.GetMovableBoardPositions(
                        player,
                        position as BoardPosition,
                        board,
                        turnPlayerKomaPositions,
                        opponentKomaPositions));
            }
            return(positions);
        }
示例#11
0
        /*
         * Initialize all game-driven variables who's values must be retained for the duration
         * of the game, and are not set with every move (startXCoord, for example).
         */
        public Game(Player p1, Player p2)
        {
            whiteTurn = true;
            kingPos = new BoardSquare[2] { new BoardSquare(4, 0), new BoardSquare(4, 7) };
            gameStatus = GameStatusCodes.normal;
            attackingPieces = new BoardSquare[2] {
                BoardSquare.Empty,
                BoardSquare.Empty,
            };

            allMoves = new List<ChessMove>();
            positions = new BoardPositions(Game.DRAW_LIMIT, BoardPositions.DEFAULT_START);
            PlayerWhite = p1;
            PlayerBlack = p2;

            board = new Board(this);
            board[0, 0] = new Rook(Piece.NOTATION_W);
            board[0, 1] = new Knight(Piece.NOTATION_W);
            board[0, 2] = new Bishop(Piece.NOTATION_W);
            board[0, 3] = new Queen(Piece.NOTATION_W);
            board[0, 4] = new King(Piece.NOTATION_W);
            board[0, 5] = new Bishop(Piece.NOTATION_W);
            board[0, 6] = new Knight(Piece.NOTATION_W);
            board[0, 7] = new Rook(Piece.NOTATION_W);
            board[1, 0] = new Pawn(Piece.NOTATION_W);
            board[1, 1] = new Pawn(Piece.NOTATION_W);
            board[1, 2] = new Pawn(Piece.NOTATION_W);
            board[1, 3] = new Pawn(Piece.NOTATION_W);
            board[1, 4] = new Pawn(Piece.NOTATION_W);
            board[1, 5] = new Pawn(Piece.NOTATION_W);
            board[1, 6] = new Pawn(Piece.NOTATION_W);
            board[1, 7] = new Pawn(Piece.NOTATION_W);

            board[7, 0] = new Rook(Piece.NOTATION_B);
            board[7, 1] = new Knight(Piece.NOTATION_B);
            board[7, 2] = new Bishop(Piece.NOTATION_B);
            board[7, 3] = new Queen(Piece.NOTATION_B);
            board[7, 4] = new King(Piece.NOTATION_B);
            board[7, 5] = new Bishop(Piece.NOTATION_B);
            board[7, 6] = new Knight(Piece.NOTATION_B);
            board[7, 7] = new Rook(Piece.NOTATION_B);
            board[6, 0] = new Pawn(Piece.NOTATION_B);
            board[6, 1] = new Pawn(Piece.NOTATION_B);
            board[6, 2] = new Pawn(Piece.NOTATION_B);
            board[6, 3] = new Pawn(Piece.NOTATION_B);
            board[6, 4] = new Pawn(Piece.NOTATION_B);
            board[6, 5] = new Pawn(Piece.NOTATION_B);
            board[6, 6] = new Pawn(Piece.NOTATION_B);
            board[6, 7] = new Pawn(Piece.NOTATION_B);
        }