Ejemplo n.º 1
0
        public ChessMove Get()
        {
            string connstr = Environment.GetEnvironmentVariable("DWKDBConnectionString");

            using (DWKDBDataContext DB = new DWKDBDataContext(connstr))
            {
                ChessMove move = new ChessMove();
                move.WebID    = DB.GetNewGame(selfPlay: false).Single().WebID;
                move.ThisMove = "RNBKQBNRPPPPPPPP................................pppppppprnbkqbnr".Replace(".", "x");
                //DB.SaveMove(move.WebID, move.ThisMove);
                return(move);
            }
        }
Ejemplo n.º 2
0
        public ChessMove Get()
        {
            string connstr = Environment.GetEnvironmentVariable("DWKDBConnectionString");

            using (DWKDBDataContext DB = new DWKDBDataContext(connstr))
            {
                ChessMove move  = new ChessMove();
                Player    white = new Player(SQLChess.PlayerColor.White);

                white.OpponentsMove      = "RNBKQBNRPPPPPPPP................................pppppppprnbkqbnr";
                white.MyLastMove         = "";
                white.KingHasMoved       = false;
                white.KingsRookHasMoved  = false;
                white.QueensRookHasMoved = false;

                string board = white.Move();

                move.WebID = DB.GetNewGame(selfPlay: false).Single().WebID;
                DB.SaveMove(move.WebID, board);
                move.ThisMove = board.Replace(".", "x");

                return(move);
            }
        }
Ejemplo n.º 3
0
        public ChessMove Get(string id)
        {
            string connstr = Environment.GetEnvironmentVariable("DWKDBConnectionString");

            using (DWKDBDataContext DB = new DWKDBDataContext(connstr))
            {
                id = id.Replace("x", ".");
                var    parms  = id.Split('|');
                Player player = null;

                ChessMove move = new ChessMove();
                move.WebID    = parms[0];
                move.ThisMove = parms[1];

                // here we will want to do some validation

                // first we will want to validate that the parameters look correct.
                // TODO: verify parameters

                var            movesList = DB.GetGameByWebID(move.WebID).ToList();
                CastleCriteria cc        = CheckForCastleCriteria(movesList);

                if (cc.lastPlayerIsWhite)
                {
                    //if last player was white then player is black
                    player = new Player(SQLChess.PlayerColor.Black);
                    player.KingHasMoved       = cc.BlackKingHasMoved;
                    player.KingsRookHasMoved  = cc.BlackKingsRookHasMoved;
                    player.QueensRookHasMoved = cc.BlackQueensRookHasMoved;
                    move.Color = "B";
                }
                else
                {
                    player = new Player(SQLChess.PlayerColor.White);
                    player.KingHasMoved       = cc.WhiteKingHasMoved;
                    player.KingsRookHasMoved  = cc.WhiteKingsRookHasMoved;
                    player.QueensRookHasMoved = cc.WhiteQueensRookHasMoved;
                    move.Color = "W";
                }

                if (movesList.Count == 0)
                {
                    player.OpponentsMove = "RNBKQBNRPPPPPPPP................................pppppppprnbkqbnr";
                    player.MyLastMove    = "";
                }

                else if (movesList.Count == 1)
                {
                    player.OpponentsMove = movesList.Last().Board;
                    player.MyLastMove    = "";
                }

                else
                {
                    player.OpponentsMove = movesList.Last().Board;
                    player.MyLastMove    = movesList.Skip(movesList.Count - 2).First().Board;
                }


                List <string> legalMoves = player.FindLegalMoves();

                if (legalMoves.Count < 1)
                {
                    bool inCheck = player.AmIChecked(player.OpponentsMove);
                    if (inCheck)
                    {
                        move.ThisMove    = string.Format("Checkmate: {0} loses.", player.PlayerIsWhite ? "White" : "Black");
                        move.IsCheckmate = true;
                        DB.SaveMove(move.WebID, move.ThisMove);
                        DB.SaveGameByWebID(move.WebID);
                        return(move);
                    }
                    else
                    {
                        move.ThisMove    = string.Format("Stalemate: {0} out of legal moves.", player.PlayerIsWhite ? "White" : "Black");
                        move.IsStalemate = true;
                        DB.SaveMove(move.WebID, move.ThisMove);
                        DB.SaveGameByWebID(move.WebID);
                        return(move);
                    }
                }

                else if (legalMoves.Contains(move.ThisMove))
                {
                    DB.SaveMove(move.WebID, move.ThisMove);
                    move.MyLastMove  = player.MyLastMove;
                    move.IsLegalMove = true;
                }
                else
                {
                    move.MyLastMove  = player.MyLastMove;
                    move.ThisMove    = player.OpponentsMove.Replace(".", "x");
                    move.IsLegalMove = false;
                    return(move);
                }

                //*-------------------------------------------


                movesList = DB.GetGameByWebID(move.WebID).ToList();
                cc        = CheckForCastleCriteria(movesList);

                if (cc.lastPlayerIsWhite)
                {
                    //if last player was white then player is black
                    player = new Player(SQLChess.PlayerColor.Black);
                    player.KingHasMoved       = cc.BlackKingHasMoved;
                    player.KingsRookHasMoved  = cc.BlackKingsRookHasMoved;
                    player.QueensRookHasMoved = cc.BlackQueensRookHasMoved;
                    move.Color = "B";
                }
                else
                {
                    player = new Player(SQLChess.PlayerColor.White);
                    player.KingHasMoved       = cc.WhiteKingHasMoved;
                    player.KingsRookHasMoved  = cc.WhiteKingsRookHasMoved;
                    player.QueensRookHasMoved = cc.WhiteQueensRookHasMoved;
                    move.Color = "W";
                }

                if (movesList.Count > 1)
                {
                    player.MyLastMove = movesList.Skip(movesList.Count - 2).First().Board;
                }
                else
                {
                    player.MyLastMove = "";
                }

                player.OpponentsMove = movesList.Skip(movesList.Count - 2).Last().Board;

                move.ThisMove = player.Move();

                if (move.ThisMove == string.Format("Checkmate: {0} loses.", player.PlayerIsWhite ? "White" : "Black"))
                {
                    move.IsCheckmate = true;
                    DB.SaveMove(move.WebID, move.ThisMove);
                    DB.SaveGameByWebID(move.WebID);
                    return(move);
                }

                else if (move.ThisMove == string.Format("Stalemate: {0} out of legal moves.", player.PlayerIsWhite ? "White" : "Black"))
                {
                    move.IsStalemate = true;
                    DB.SaveMove(move.WebID, move.ThisMove);
                    DB.SaveGameByWebID(move.WebID);
                    return(move);
                }

                else
                {
                    DB.SaveMove(move.WebID, move.ThisMove);
                    move.IsLegalMove = true;
                    move.ThisMove    = move.ThisMove.Replace(".", "x");
                    return(move);
                }
            }
        }