コード例 #1
0
ファイル: MoveValidator.cs プロジェクト: lehusk/ChessAITest
        public bool MoveIsValid(Move move, Board board)
        {
            if (move == null)
            {
                Console.WriteLine("parse failed");
                return false;
            }

            if (!board.IsInBoard(move))
            {
                Console.WriteLine("move not on board");
                return false;
            }
            if (!board.HasFigureForMove(move))
            {
                Console.WriteLine("no figure to move");
                return false;
            }
            if (!MoveIsAllowed(move, board))
            {
                Console.WriteLine("invalid move");
                return false;
            }

            return true;
        }
コード例 #2
0
ファイル: MoveValidator.cs プロジェクト: lehusk/ChessAITest
        private bool MoveIsAllowed(Move move, Board board)
        {
            var figure = board.GetFigureOnLocation(move.From);
            if (!figure.CanMoveToLocation(move.To))
                return false;

            var figureOnLocation = board.GetFigureOnLocation(move.To);
            if (figureOnLocation != null && figureOnLocation.Side == move.Side)
                return false;

            if (MoveWouldCauseCheckOnSelf(move, board))
                return false;

            return true;
        }
コード例 #3
0
ファイル: MoveGenerator.cs プロジェクト: lehusk/ChessAITest
        private List<Move> GetAllAvailableMove(Game game, GameSide gameSide)
        {
            var availableMoves = new List<Move>();

            foreach (var figure in game.Board.Figures.Where(x => x.Side == gameSide))
            {
                var allMovesForFigure = figure.GetFieldsICanMoveTo();
                foreach (var locationToMoveTo in allMovesForFigure)
                {
                    var move = new Move(figure.Location, locationToMoveTo, gameSide);
                     if (_moveValidator.MoveIsValid(move,game.Board))
                         availableMoves.Add(move);
                }
            }

            return availableMoves;
        }
コード例 #4
0
ファイル: IMoveHandler.cs プロジェクト: lehusk/ChessAITest
        public MoveResult HandleMove(Game game, Move move)
        {
            var existingFigure = game.Board.GetFigureOnLocation(move.To);
            if (existingFigure != null)
                game.Board.CaptureFigure(existingFigure);

            var figureToMove = game.Board.GetFigureOnLocation(move.From);
            if (figureToMove.ShouldConvert(move))
            {
                game.Board.ConvertFigure(figureToMove, move);
            }
            else
            {
                figureToMove.Move(move);
            }

            return GetMoveResult(game.Board, move.Side);
        }
コード例 #5
0
ファイル: MoveEvaluator.cs プロジェクト: lehusk/ChessAITest
 public int EvaluateMove(Game game, Move move)
 {
     throw new System.NotImplementedException();
 }
コード例 #6
0
ファイル: MoveValidator.cs プロジェクト: lehusk/ChessAITest
 private bool MoveWouldCauseCheckOnSelf(Move move, Board board)
 {
     /// TODO
     return false;
 }
コード例 #7
0
ファイル: Game.cs プロジェクト: lehusk/ChessAITest
 public bool IsInBoard(Move move)
 {
     return IsInBoard(move.From) && IsInBoard(move.To);
 }
コード例 #8
0
ファイル: Game.cs プロジェクト: lehusk/ChessAITest
 public bool HasFigureForMove(Move move)
 {
     var figureOnFrom = GetFigureOnLocation(move.From);
     return figureOnFrom != null && figureOnFrom.Side == move.Side;
 }
コード例 #9
0
ファイル: Game.cs プロジェクト: lehusk/ChessAITest
 public void ConvertFigure(Figure figureToMove, Move move)
 {
     Figures.Remove(figureToMove);
     Figures.Add(new Queen(move.Side, move.To.Column, move.To.Row));
 }