Exemple #1
0
        Game HandleSetup(SGFProperty p)
        {
            Content c;

            if (p.Name == "AE")
            {
                c = Content.Empty;
            }
            else if (p.Name == "AW")
            {
                c = Content.White;
            }
            else
            {
                c = Content.Black;
            }
            foreach (var v in p.Values)
            {
                if (v.IsComposed)
                {
                    SetupMove(v.MoveA, v.MoveB, c);
                }
                else
                {
                    SetupMove(v.Move, c);
                }
            }
            return(this);
        }
Exemple #2
0
        /// <summary>
        /// Adds stones to the board in a rectangular area.
        /// </summary>
        /// <param name="x1">The left coordinate of the rectangle.</param>
        /// <param name="y1">The top coordinate of the rectangle.</param>
        /// <param name="x2">The right coordinate of the rectangle.</param>
        /// <param name="y2">The bottom coordinate of the rectangle.</param>
        /// <param name="c">The color of the stone to add (or empty to clear).</param>
        public void SetupMove(int x1, int y1, int x2, int y2, Content c)
        {
            SGFProperty p = sgfProperties.SingleOrDefault(x => x.Name == ColorToSGFProp[c]);

            if (p == null)
            {
                p = new SGFProperty()
                {
                    Name = ColorToSGFProp[c]
                };
                sgfProperties.Add(p);
            }
            string       composed = Point.ConvertToSGF(x1, y1) + ":" + Point.ConvertToSGF(x2, y2);
            SGFPropValue v        = new SGFPropValue(composed);

            p.Values.Add(v);
            for (int i = x1; i <= x2; i++)
            {
                for (int j = y1; j <= y2; j++)
                {
                    Board[i, j] = c;
                }
            }
            setupMoves = null;
        }
Exemple #3
0
        private void RemoveProperty(string name)
        {
            SGFProperty prop = sgfProperties.SingleOrDefault(x => x.Name == name);

            if (prop != null)
            {
                sgfProperties.Remove(prop);
            }
        }
Exemple #4
0
 Game HandlePlayerTurn(SGFProperty p)
 {
     if (GameInfo != null)
     {
         GameInfo.StartingPlayer = p.Values[0].Turn;
     }
     Turn = p.Values[0].Turn;
     return(this);
 }
Exemple #5
0
 Game HandleTM(SGFProperty p)
 {
     if (string.IsNullOrEmpty(p.Values[0].Value))
     {
         throw new Exception("Invalid game.");
     }
     GameInfo.MainTime = TimeSpan.FromSeconds(p.Values[0].Num);
     return(this);
 }
Exemple #6
0
        Game HandleMove(SGFProperty p)
        {
            Content c = (p.Name == "W" ? Content.White : Content.Black);

            Turn = c;
            if (p.Values[0].Value == "")
            {
                return(Pass());
            }
            return(MakeMove(p.Values[0].Move));
        }
Exemple #7
0
 internal void Read(TextReader sr)
 {
     char c = (char)sr.Read();
     if (c != ';')
         throw new InvalidDataException("Node doesn't begin with a ';'.");
     sr.EatWS();
     while (char.IsUpper((char)sr.Peek()))
     {
         SGFProperty prop = new SGFProperty();
         prop.Read(sr);
         Properties.Add(prop);
         sr.EatWS();
     }
 }
Exemple #8
0
        Game HandleBoardSize(SGFProperty p)
        {
            SGFPropValue v = p.Values[0];

            if (v.IsComposed)
            {
                GameInfo.BoardSizeX = v.NumX;
                GameInfo.BoardSizeY = v.NumY;
            }
            else
            {
                GameInfo.BoardSizeX = GameInfo.BoardSizeY = v.Num;
            }
            return(this);
        }
Exemple #9
0
        internal void Read(TextReader sr)
        {
            char c = (char)sr.Read();

            if (c != ';')
            {
                throw new InvalidDataException("Node doesn't begin with a ';'.");
            }
            sr.EatWS();
            while (char.IsUpper((char)sr.Peek()))
            {
                SGFProperty prop = new SGFProperty();
                prop.Read(sr);
                Properties.Add(prop);
                sr.EatWS();
            }
        }
Exemple #10
0
        /// <summary>
        /// Adds a stone to the board as a setup move.
        /// </summary>
        /// <param name="x">The X coordinate of the setup move.</param>
        /// <param name="y">The Y coordinate of the setup move.</param>
        /// <param name="c">The color of the stone to add (or empty to clear).</param>
        public void SetupMove(int x, int y, Content c)
        {
            SGFProperty p = sgfProperties.SingleOrDefault(z => z.Name == ColorToSGFProp[c]);

            if (p == null)
            {
                p = new SGFProperty()
                {
                    Name = ColorToSGFProp[c]
                };
                sgfProperties.Add(p);
            }
            SGFPropValue v = new SGFPropValue(Point.ConvertToSGF(x, y));

            p.Values.Add(v);
            Board[x, y] = c;
            setupMoves  = null;
        }
Exemple #11
0
        private void SetProperty(string name, string value, bool create)
        {
            SGFProperty prop = sgfProperties.SingleOrDefault(x => x.Name == name);

            if (prop == null && !create)
            {
                return;
            }
            if (prop == null)
            {
                sgfProperties.Add(new SGFProperty
                {
                    Name   = name,
                    Values = new List <SGFPropValue> {
                        new SGFPropValue(value)
                    }
                });
            }
            else
            {
                prop.Values[0].Value = value;
            }
        }
Exemple #12
0
 /// <summary>
 /// Adds stones to the board in a rectangular area.
 /// </summary>
 /// <param name="x1">The left coordinate of the rectangle.</param>
 /// <param name="y1">The top coordinate of the rectangle.</param>
 /// <param name="x2">The right coordinate of the rectangle.</param>
 /// <param name="y2">The bottom coordinate of the rectangle.</param>
 /// <param name="c">The color of the stone to add (or empty to clear).</param>
 public void SetupMove(int x1, int y1, int x2, int y2, Content c)
 {
     SGFProperty p = sgfProperties.SingleOrDefault(x => x.Name == ColorToSGFProp[c]);
     if (p == null)
     {
         p = new SGFProperty() { Name = ColorToSGFProp[c] };
         sgfProperties.Add(p);
     }
     string composed = Point.ConvertToSGF(x1, y1) + ":" + Point.ConvertToSGF(x2, y2);
     SGFPropValue v = new SGFPropValue(composed);
     p.Values.Add(v);
     for (int i = x1; i <= x2; i++)
     {
         for (int j = y1; j <= y2; j++)
         {
             Board[i, j] = c;
         }
     }
     setupMoves = null;
 }
Exemple #13
0
 Game HandleBR(SGFProperty p)
 {
     GameInfo.BlackRank = p.Values[0].Value;
     return(this);
 }
Exemple #14
0
 Game HandleWR(SGFProperty p)
 {
     GameInfo.WhiteRank = p.Values[0].Value;
     return(this);
 }
Exemple #15
0
 Game HandleBP(SGFProperty p)
 {
     GameInfo.BlackPlayer = p.Values[0].Value;
     return(this);
 }
Exemple #16
0
 Game HandleWP(SGFProperty p)
 {
     GameInfo.WhitePlayer = p.Values[0].Value;
     return(this);
 }
Exemple #17
0
 Game HandleKomi(SGFProperty p)
 {
     GameInfo.Komi = p.Values[0].Double;
     return(this);
 }
Exemple #18
0
 Game HandleMove(SGFProperty p)
 {
     Content c = (p.Name == "W" ? Content.White : Content.Black);
     Turn = c;
     if (p.Values[0].Value == "") return Pass();
     return MakeMove(p.Values[0].Move);
 }
Exemple #19
0
 Game HandleHandicap(SGFProperty p)
 {
     GameInfo.Handicap = p.Values[0].Num;
     return(this);
 }
Exemple #20
0
 Game HandleSetup(SGFProperty p)
 {
     Content c;
     if (p.Name == "AE") c = Content.Empty;
     else if (p.Name == "AW") c = Content.White;
     else c = Content.Black;
     foreach (var v in p.Values)
     {
         if (v.IsComposed)
             SetupMove(v.MoveA, v.MoveB, c);
         else
             SetupMove(v.Move, c);
     }
     return this;
 }
Exemple #21
0
 Game HandlePlayerTurn(SGFProperty p)
 {
     if (GameInfo != null) GameInfo.StartingPlayer = p.Values[0].Turn;
     Turn = p.Values[0].Turn;
     return this;
 }
Exemple #22
0
 Game HandleHandicap(SGFProperty p)
 {
     GameInfo.Handicap = p.Values[0].Num;
     return this;
 }
Exemple #23
0
 /// <summary>
 /// Adds a stone to the board as a setup move.
 /// </summary>
 /// <param name="x">The X coordinate of the setup move.</param>
 /// <param name="y">The Y coordinate of the setup move.</param>
 /// <param name="c">The color of the stone to add (or empty to clear).</param>
 public void SetupMove(int x, int y, Content c)
 {
     SGFProperty p = sgfProperties.SingleOrDefault(z => z.Name == ColorToSGFProp[c]);
     if (p == null)
     {
         p = new SGFProperty() { Name = ColorToSGFProp[c] };
         sgfProperties.Add(p);
     }
     SGFPropValue v = new SGFPropValue(Point.ConvertToSGF(x, y));
     p.Values.Add(v);
     Board[x, y] = c;
     setupMoves = null;
 }
Exemple #24
0
 Game HandleBoardSize(SGFProperty p)
 {
     SGFPropValue v = p.Values[0];
     if (v.IsComposed)
     {
         GameInfo.BoardSizeX = v.NumX;
         GameInfo.BoardSizeY = v.NumY;
     }
     else
         GameInfo.BoardSizeX = GameInfo.BoardSizeY = v.Num;
     return this;
 }
Exemple #25
0
 Game HandleKomi(SGFProperty p)
 {
     GameInfo.Komi = p.Values[0].Double;
     return this;
 }