コード例 #1
0
ファイル: Games.cs プロジェクト: ibam/MyChessTrialOne
 public Games(Board b, BoardPresenter bp, MoveValidator mv, MoveExecutor me)
 {
     Board          = b;
     BoardPresenter = bp;
     MoveValidator  = mv;
     MoveExecutor   = me;
     ActivePlayer   = EPlayer.White;
 }
コード例 #2
0
 public Games(Board b, BoardPresenter bp, MoveExecutor me)
 {
     Board          = b;
     BoardPresenter = bp;
     //MoveValidator = mv;
     MoveExecutor      = me;
     ActivePlayer      = EPlayer.White;
     CapturedPresenter = new CapturedPresenter();
 }
コード例 #3
0
        public void Move(Cell src, Cell dst)
        {
            Console.WriteLine($"move from {src} to {dst}");
            var piece = Board.ContainsKey(src) ? Board[src] : null;

            if (piece == null)
            {
                Console.WriteLine($"no piece at {src}");
            }
            else
            {
                var context = new MoveValidationContext {
                    ActivePlayer = ActivePlayer, Src = src, Board = Board, Piece = piece
                };
                piece.ValidatingMovement(context);
                var moveOutput = context.Find(dst);
                if (moveOutput != null)
                {
                    MoveExecutor.ExecuteMove
                    (
                        new MoveExecutionContext
                    {
                        Type = moveOutput.Type, Src = src, Dst = moveOutput.Cell, Piece = piece, Board = Board, Captured = Captured
                    }
                    );
                    TogglePlayerTurn();

                    if (WhiteKingCaptured())
                    {
                        Winner = EPlayer.Black;
                    }
                    else if (BlackKingCaptured())
                    {
                        Winner = EPlayer.White;
                    }
                }
                else
                {
                    Console.WriteLine($"no valid move from {src} to {dst}, reason: {context.InvalidMessage}");
                }
            }
            BoardPresenter.Print(Board);
            CapturedPresenter.Print(Captured);
        }
コード例 #4
0
ファイル: Games.cs プロジェクト: ibam/MyChessTrialOne
        public void Move(Cell src, Cell dst)
        {
            Console.WriteLine($"move from {src} to {dst}");
            //get piece
            var piece = Board.ContainsKey(src)
                ? Board[src]
                : null;

            if (piece == null)
            {
                Console.WriteLine($"no piece at {src}");
            }
            else
            {
                //is move valid?
                var validationOutput = MoveValidator.IsMoveValid(ActivePlayer, piece, src, dst, Board);
                if (!validationOutput.Valid)
                {
                    Console.WriteLine($"piece at {src} cannot move to {dst}, {validationOutput.InvalidMessage}");
                }
                else
                {
                    //execute move
                    MoveExecutor.ExecuteMove(validationOutput, piece, src, dst, Board, Captured);
                    //toggle player
                    ActivePlayer = ActivePlayer == EPlayer.White ? EPlayer.Black : EPlayer.White;

                    if (Captured.Count(x => x.Player == EPlayer.White && x is King) == 1)
                    {
                        Winner = EPlayer.Black;
                    }
                    else if (Captured.Count(x => x.Player == EPlayer.White && x is King) == 1)
                    {
                        Winner = EPlayer.White;
                    }
                }
            }
            BoardPresenter.Print(Board);
        }
コード例 #5
0
ファイル: Games.cs プロジェクト: ibam/MyChessTrialOne
        public void Start()
        {
            Console.WriteLine("init board");
            var startX = 'a';

            //init pawn
            for (var i = 0; i < MaxBoard; i++)
            {
                var theX = (char)(Convert.ToUInt16(startX) + i);
                Board[new Cell {
                          X = theX, Y = 2
                      }] = new Pawn {
                    Player = EPlayer.White
                };
                Board[new Cell {
                          X = theX, Y = 7
                      }] = new Pawn {
                    Player = EPlayer.Black
                };
            }
            //init rock
            Board[new Cell {
                      X = 'a', Y = 1
                  }] = new Rock {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'h', Y = 1
                  }] = new Rock {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'a', Y = 8
                  }] = new Rock {
                Player = EPlayer.Black
            };
            Board[new Cell {
                      X = 'h', Y = 8
                  }] = new Rock {
                Player = EPlayer.Black
            };
            //init knight a b c d e f g h
            Board[new Cell {
                      X = 'b', Y = 1
                  }] = new Knight {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'g', Y = 1
                  }] = new Knight {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'b', Y = 8
                  }] = new Knight {
                Player = EPlayer.Black
            };
            Board[new Cell {
                      X = 'g', Y = 8
                  }] = new Knight {
                Player = EPlayer.Black
            };
            //init bishop a b c d e f g h
            Board[new Cell {
                      X = 'c', Y = 1
                  }] = new Bishop {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'f', Y = 1
                  }] = new Bishop {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'c', Y = 8
                  }] = new Bishop {
                Player = EPlayer.Black
            };
            Board[new Cell {
                      X = 'f', Y = 8
                  }] = new Bishop {
                Player = EPlayer.Black
            };
            //init queen a b c d e f g h
            Board[new Cell {
                      X = 'd', Y = 1
                  }] = new Queen {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'd', Y = 8
                  }] = new Queen {
                Player = EPlayer.Black
            };
            //init king a b c d e f g h
            Board[new Cell {
                      X = 'e', Y = 1
                  }] = new King {
                Player = EPlayer.White
            };
            Board[new Cell {
                      X = 'e', Y = 8
                  }] = new King {
                Player = EPlayer.Black
            };

            BoardPresenter.Print(Board);
        }
コード例 #6
0
        public void Start()
        {
            Console.WriteLine("init board");
            //init pawn
            var pawnChar = 'P';

            for (var i = 0; i < MaxBoard; i++)
            {
                var theX = Board.StartOfX.Increase(i);
                Board[new Cell {
                          X = theX, Y = Board.StartOfY + 1
                      }] = new Pawn {
                    Player = EPlayer.White, BoardChar = pawnChar
                };
                Board[new Cell {
                          X = theX, Y = Board.EndOfY - 1
                      }] = new Pawn {
                    Player = EPlayer.Black, BoardChar = char.ToLower(pawnChar)
                };
            }
            //init rock
            var rockChar = 'R';

            Board[new Cell {
                      X = Board.StartOfX, Y = Board.StartOfY
                  }] = new Rock {
                Player = EPlayer.White, BoardChar = rockChar
            };
            Board[new Cell {
                      X = Board.EndOfX, Y = Board.StartOfY
                  }] = new Rock {
                Player = EPlayer.White, BoardChar = rockChar
            };
            Board[new Cell {
                      X = Board.StartOfX, Y = Board.EndOfY
                  }] = new Rock {
                Player = EPlayer.Black, BoardChar = char.ToLower(rockChar)
            };
            Board[new Cell {
                      X = Board.EndOfX, Y = Board.EndOfY
                  }] = new Rock {
                Player = EPlayer.Black, BoardChar = char.ToLower(rockChar)
            };
            //init knight
            var knightChar = 'T';

            Board[new Cell {
                      X = 'b', Y = Board.StartOfY
                  }] = new Knight {
                Player = EPlayer.White, BoardChar = knightChar
            };
            Board[new Cell {
                      X = 'g', Y = Board.StartOfY
                  }] = new Knight {
                Player = EPlayer.White, BoardChar = knightChar
            };
            Board[new Cell {
                      X = 'b', Y = Board.EndOfY
                  }] = new Knight {
                Player = EPlayer.Black, BoardChar = char.ToLower(knightChar)
            };
            Board[new Cell {
                      X = 'g', Y = Board.EndOfY
                  }] = new Knight {
                Player = EPlayer.Black, BoardChar = char.ToLower(knightChar)
            };
            //init bishop
            var bishopChar = 'B';

            Board[new Cell {
                      X = 'c', Y = Board.StartOfY
                  }] = new Bishop {
                Player = EPlayer.White, BoardChar = bishopChar
            };
            Board[new Cell {
                      X = 'f', Y = Board.StartOfY
                  }] = new Bishop {
                Player = EPlayer.White, BoardChar = bishopChar
            };
            Board[new Cell {
                      X = 'c', Y = Board.EndOfY
                  }] = new Bishop {
                Player = EPlayer.Black, BoardChar = char.ToLower(bishopChar)
            };
            Board[new Cell {
                      X = 'f', Y = Board.EndOfY
                  }] = new Bishop {
                Player = EPlayer.Black, BoardChar = char.ToLower(bishopChar)
            };
            //init queen
            var queenChar = 'Q';

            Board[new Cell {
                      X = 'd', Y = Board.StartOfY
                  }] = new Queen {
                Player = EPlayer.White, BoardChar = queenChar
            };
            Board[new Cell {
                      X = 'd', Y = Board.EndOfY
                  }] = new Queen {
                Player = EPlayer.Black, BoardChar = char.ToLower(queenChar)
            };
            //init king
            var kingChar = 'K';

            Board[new Cell {
                      X = Board.KingOriginalX, Y = Board.StartOfY
                  }] = new King {
                Player = EPlayer.White, BoardChar = kingChar
            };
            Board[new Cell {
                      X = Board.KingOriginalX, Y = Board.EndOfY
                  }] = new King {
                Player = EPlayer.Black, BoardChar = char.ToLower(kingChar)
            };

            Board.Values.ToList().ForEach(x => x.InitMovement());

            BoardPresenter.Print(Board);
        }