Пример #1
0
 public PrivateData(Point p, Critter.Direction d, int infectCount,
                    Color color, string _string)
 {
     this.p           = p;
     this.direction   = d;
     this.infectCount = infectCount;
     this.color       = color;
     this._string     = _string;
 }
Пример #2
0
        private Info getInfo(PrivateData data, Type original)
        {
            Critter.Neighbor[] neighbors = new Critter.Neighbor[4];
            Critter.Direction  d         = data.direction;

            for (int i = 0; i < 4; i++)
            {
                neighbors[i] = getStatus(pointAt(data.p, d), original);
                d            = rotate(d);
            }
            return(new Info(neighbors, data.direction, data.infectCount));
        }
Пример #3
0
        public void add(int number, Type critter)
        {
            Random r = new Random();

            Critter.Direction[] directions = (Critter.Direction[])Enum.GetValues(typeof(Critter.Direction));
            if (info.Count + number > width * height)
            {
                throw new SystemException("adding too many critters");
            }
            for (int i = 0; i < number; i++)
            {
                Critter next;
                try
                {
                    next = makeCritter(critter);
                }
                catch (Exception e)
                {
                    Console.WriteLine("ERROR: " + critter + " threw an " +
                                      " exception in its constructor.");
                    Environment.Exit(-1);
                    return;
                }
                int x, y;
                do
                {
                    x = r.Next(width);
                    y = r.Next(height);
                } while (grid[x, y] != null);
                grid[x, y] = next;

                Critter.Direction d = directions[r.Next(directions.Length)];
                info.Add(next, new PrivateData(new Point(x, y), d, 0, next.getColor(), next.toString()));
            }
            string name = critter.Name;

            if (!critterCount.ContainsKey(name))
            {
                critterCount.Add(name, number);
            }
            else
            {
                critterCount.Add(name, critterCount[name] + number);
            }
        }
Пример #4
0
 private Point pointAt(Point p, Critter.Direction d)
 {
     if (d == Critter.Direction.NORTH)
     {
         return(new Point(p.X, p.Y - 1));
     }
     else if (d == Critter.Direction.SOUTH)
     {
         return(new Point(p.X, p.Y + 1));
     }
     else if (d == Critter.Direction.EAST)
     {
         return(new Point(p.X + 1, p.Y));
     }
     else
     {
         return(new Point(p.X - 1, p.Y));
     }
 }
Пример #5
0
 // returns the result of rotating the given direction clockwise
 private Critter.Direction rotate(Critter.Direction d)
 {
     if (d == Critter.Direction.NORTH)
     {
         return(Critter.Direction.EAST);
     }
     else if (d == Critter.Direction.SOUTH)
     {
         return(Critter.Direction.WEST);
     }
     else if (d == Critter.Direction.EAST)
     {
         return(Critter.Direction.SOUTH);
     }
     else
     {
         return(Critter.Direction.NORTH);
     }
 }
Пример #6
0
 public Info(Critter.Neighbor[] neighbors, Critter.Direction d, int infectCount)
 {
     this.neighbors   = neighbors;
     this.direction   = d;
     this.infectCount = infectCount;
 }