Esempio n. 1
0
        public void RefreshView()
        {
            var enemiesToDelete = new List <Enemy>();

            _spaceShip.RefreshBullets();

            // Notify all subscribed enemies that shot was fired to update their health if they are
            // hiy

            foreach (var bullet in _spaceShip.Bullets)
            {
                for (var enemy = _iterator.First(); !_iterator.Done(); enemy = _iterator.Next())
                {
                    enemy.DidBulletHit(bullet.Position);
                    if (enemy.Health == 0)
                    {
                        enemiesToDelete.Add(enemy);
                    }
                }
            }

            enemiesToDelete.ForEach(EnemyUnsubscribe);

            foreach (var enemy in enemiesToDelete)
            {
                enemy.Accept(_visitor);
            }
        }
Esempio n. 2
0
        public override void UpdateGraphAppearance()
        {
            for (IIterator iterator = arrayIterator.First(); !arrayIterator.IsDone(); iterator = arrayIterator.Next())
            {
                iterator.CurrentItem.BackColor  = status.图形背景色;
                iterator.CurrentItem.Appearance = status.图形外观;
            }
            arrayIterator.First().CurrentItem.BackColor = status.头元素背景色;
            arrayIterator.First().CurrentItem.Appearance = status.图形外观;

            IGlyph glyph;

            glyph = ((ArrayIterator)arrayIterator).GetGlyphByIndex(currentIndex);
            if (glyph != null)
            {
                glyph.BackColor  = status.当前背景色;
                glyph.Appearance = status.图形外观;
            }
            glyph = ((ArrayIterator)arrayIterator).GetGlyphByIndex(currentIndexI);
            if (glyph != null)
            {
                glyph.BackColor  = status.当前背景色;
                glyph.Appearance = status.图形外观;
            }
        }
Esempio n. 3
0
        public override void UpdateGraphAppearance()
        {
            ((ArrayIterator)arrayIterator).SetElementsBackColor(GetIndexArray(), status.比较过元素颜色, status.线性表颜色);

            ((ArrayIterator)arrayIterator).SetBackColor(status.I, status.当前元素颜色, status.线性表颜色, false);

            if (nullIterator != null)
            {
                nullIterator.CurrentItem.BackColor  = status.当前元素颜色;
                nullIterator.CurrentItem.Appearance = status.图形外观;
            }
            arrayIterator.First().CurrentItem.BackColor = status.头元素颜色;
            arrayIterator.First().CurrentItem.Appearance = status.图形外观;
        }
        public override void UpdateGraphAppearance()
        {
            for (IIterator iterator = preOrderTreeIterator.First(); !preOrderTreeIterator.IsDone(); iterator = preOrderTreeIterator.Next())
            {
                iterator.CurrentItem.BackColor = status.结点颜色;
            }

            for (IIterator iterator = visitedIterator.First(); !visitedIterator.IsDone(); iterator = visitedIterator.Next())
            {
                if (iterator.CurrentItem != null)
                {
                    iterator.CurrentItem.BackColor = status.遍历过结点颜色;
                }
            }
        }
Esempio n. 5
0
        List <T> IMyData <T> .GetAll()
        {
            List <T> list = new List <T>();

            if (iterator.getSize() != 0)
            {
                list.Add(iterator.First());

                while (!iterator.IsDone())
                {
                    list.Add(iterator.Next());
                }
            }
            return(list);
        }
Esempio n. 6
0
        static void Main(string[] args)
        {
            ConcreteAggregate aggregate = new ConcreteAggregate();

            aggregate.Add(new Category()
            {
                Name = "Csharp"
            });
            aggregate.Add(new Category()
            {
                Name = "Asp.Net"
            });
            aggregate.Add(new Category()
            {
                Name = "EntityFramework"
            });
            aggregate.Add(new Category()
            {
                Name = ".NET CORE"
            });

            IIterator iterator = aggregate.CreateIterator();

            Console.WriteLine($"İlk eleman : {((Category)iterator.First()).Name}");
            Console.WriteLine($"Son eleman : {((Category)iterator.Last()).Name}");

            while (iterator.MoveNext())
            {
                Console.WriteLine(((Category)iterator.Current()).Name);
            }

            Console.ReadLine();
        }
Esempio n. 7
0
        public override void UpdateAnimationPad()
        {
            base.UpdateAnimationPad();
            Graphics g = AlgorithmManager.Algorithms.ClearAnimationPad();

            if (AlgorithmManager.Algorithms.CurrentAlgorithm != null)
            {
                if (circleNodeIterator != null)
                {
                    for (IIterator iterator = circleNodeIterator.First(); !circleNodeIterator.IsDone(); iterator = circleNodeIterator.Next())
                    {
                        iterator.CurrentItem.Draw(g);
                    }
                }
                if (lineNodeIterator != null)
                {
                    for (IIterator iterator = lineNodeIterator.First(); !lineNodeIterator.IsDone(); iterator = lineNodeIterator.Next())
                    {
                        iterator.CurrentItem.Draw(g);
                    }
                }
                if (nullIteratorP != null)
                {
                    nullIteratorP.CurrentItem.Draw(g);
                }
                if (nullIteratorQ != null)
                {
                    nullIteratorQ.CurrentItem.Draw(g);
                }
                if (swerveLineIterator != null)
                {
                    swerveLineIterator.CurrentItem.Draw(g);
                }
            }
        }
Esempio n. 8
0
        static void Main(string[] args)
        {
            Collection collection = new Collection();

            collection[0] = new Item("Item 0");
            collection[1] = new Item("Item 1");
            collection[2] = new Item("Item 2");
            collection[3] = new Item("Item 3");
            collection[4] = new Item("Item 4");
            collection[5] = new Item("Item 5");
            collection[6] = new Item("Item 6");
            collection[7] = new Item("Item 7");
            collection[8] = new Item("Item 8");

            IIterator iterator = collection.CreateIterator();

            iterator.Step = 2;

            Console.WriteLine("Iterating over collection:");

            for (Item item = iterator.First(); !iterator.HasNext; item = iterator.Next())
            {
                Console.WriteLine(item.Name);
            }

            Console.ReadKey();
        }
Esempio n. 9
0
        private void EquipPlaces(Foi foi)
        {
            RandomGeneratorFacade randomGeneratorFacade = new RandomGeneratorFacade();
            IIterator             placeIterator         = foi.Places.CreateIterator(IteratorType.AscendingValue);
            Place place = placeIterator.First();

            while (place != null)
            {
                List <Device> actuators = place.Devices.FindAll(d => d.DeviceType == DeviceType.Actuator && d.IsBeingUsed && d.Malfunctional == false);
                List <Device> sensors   = place.Devices.FindAll(d => d.DeviceType == DeviceType.Sensor && d.IsBeingUsed && d.Malfunctional == false);

                foreach (var actuator in actuators)
                {
                    int numberOfSensorsToEquipActuator = randomGeneratorFacade.GiveRandomNumber(1, sensors.Count);

                    List <int> usedSensorIndexes      = new List <int>();
                    int[]      availableSensorIndexes = Enumerable.Range(0, sensors.Count).ToArray();

                    for (int i = 0; i < numberOfSensorsToEquipActuator; i++)
                    {
                        int[] unusedSensorIndexes = availableSensorIndexes.Except(usedSensorIndexes).ToArray();
                        int   randomIndex         = randomGeneratorFacade.GiveRandomNumber(0, sensors.Count - 1, unusedSensorIndexes, 1);
                        usedSensorIndexes.Add(randomIndex);

                        actuator.AddChild(sensors[randomIndex]);
                        sensors[randomIndex].AddParent(actuator);
                    }
                }

                RepairOneDevice(place);
                ListDevices(place);

                place = placeIterator.Next();
            }
        }
Esempio n. 10
0
        private static void Main(string[] args)
        {
            //SequenceAggregate list = new SequenceAggregate();
            ReverseAggregate list = new ReverseAggregate();

            list[0] = "张三";
            list[1] = "李四";
            list[2] = "王五";
            list[3] = "赵六";
            list[4] = "周七";

            IIterator i    = list.GetIterator();
            object    item = i.First();

            Console.WriteLine("First:" + item);

            while (i.Current() != i.Last())
            {
                Console.WriteLine(i.Current());
                i.Next();
            }

            Console.WriteLine("Last:" + i.Last());

            Console.ReadLine();
        }
Esempio n. 11
0
 public void PrintItems(IIterator <Item> iterator)
 {
     for (iterator.First(); !iterator.IsDone(); iterator.Next())
     {
         iterator.CurrentItem().Print();
     }
 }
Esempio n. 12
0
        static void Main(string[] args)
        {
            // Build a collection
            Collection collection = new Collection();

            collection[0] = new Item("Item 0");
            collection[1] = new Item("Item 1");
            collection[2] = new Item("Item 2");
            collection[3] = new Item("Item 3");
            collection[4] = new Item("Item 4");
            collection[5] = new Item("Item 5");
            collection[6] = new Item("Item 6");
            collection[7] = new Item("Item 7");
            collection[8] = new Item("Item 8");

            // Create iterator

            IIterator iterator = collection.CreateIterator();

            // Skip every other item
            iterator.Step = 2;

            Console.WriteLine("Iterating over collection:");

            for (Item item = iterator.First(); !iterator.IsDone; item = iterator.Next())
            {
                Console.WriteLine(item.Name);
            }

            // Wait for user

            Console.Read();
        }
Esempio n. 13
0
 public static void PrintUsers(IIterator iterate)
 {
     iterate.First();
     while (!iterate.IsDone())
     {
         Console.WriteLine(iterate.Next());
     }
 }
Esempio n. 14
0
 private static void PrintReporters(IIterator i)
 {
     i.First();
     while (!i.isDone())
     {
         Console.WriteLine(i.Next());
     }
 }
 public void printMember(IIterator iterate)
 {
     iterate.First();
     while (!iterate.IsDone())
     {
         //textBox.AppendText("Friend");
     }
 }
Esempio n. 16
0
 public static void PrintUsers(IIterator iterate)
 {
     iterate.First();
     while (!iterate.IsDone())
     {
         Console.WriteLine(iterate.Next());
     }
 }
        public override void UpdateAnimationPad()
        {
            base.UpdateAnimationPad();
            Graphics g = AlgorithmManager.Algorithms.ClearAnimationPad();


            if (AlgorithmManager.Algorithms.CurrentAlgorithm != null)
            {
                if (arrayIterator != null)
                {
                    for (IIterator iterator = arrayIterator.First(); !arrayIterator.IsDone(); iterator = arrayIterator.Next())
                    {
                        iterator.CurrentItem.Draw(g);
                    }
                }
            }
        }
 //the method references the Interface's methods.
 //but the concrete methods will be called to match with the item passed in.
 //ie, NY = nyt, LA = lat.
 static void PrintReporters(IIterator iterator)
 {
     iterator.First();
     while (!iterator.IsDone())
     {
         Console.WriteLine(iterator.Next());
     }
 }
Esempio n. 19
0
 // Metoda vezme instanci iterátoru a postará se o výpis všech prvků
 // Zároveň se zde ukazuje klasické využití iterátorových funkcí v cyklu for
 // pro průchod všemi prvky
 static void printAllUsingIterator(IIterator <int> iterator)
 {
     for (iterator.First(); !iterator.IsDone(); iterator.Next())
     {
         Console.Write(iterator.CurrentItem());
     }
     Console.WriteLine();
 }
Esempio n. 20
0
        public static void RunTest()
        {
            ArrayList b = new ArrayList()
            {
                1, 2, 3, 4
            };
            IEnumerator e = b.GetEnumerator();

            e.MoveNext();
            Console.WriteLine(e.Current);

            Console.WriteLine();

            ConcreteAggregate a = new ConcreteAggregate();

            a[0] = "Item A";
            a[1] = "Item B";
            a[2] = "Item C";
            a[3] = "Item D";

            IIterator i = a.GetIterator();

            Console.WriteLine("Iterating ConcreteAggregate... ");

            object item = i.First();

            while (item != null)
            {
                Console.WriteLine(item);
                item = i.Next();
            }

            Console.WriteLine();

            ConcreteAggregate2 c = new ConcreteAggregate2();

            c[0] = "Item 1";
            c[1] = "Item 2";
            c[2] = "Item 3";
            c[3] = "Item 4";

            IIterator i2 = c.GetIterator();

            Console.WriteLine("Iterating ConcreteAggregate2...");
            object item2 = i2.First();

            while (item2 != null)
            {
                Console.WriteLine(item2);
                if (i2.CurrentIndex() == 1)
                {
                    Console.WriteLine("Is done when index is 1? " + i2.IsDone());
                }
                item2 = i2.Next();
            }

            Console.WriteLine("Is done when index is 3? " + i2.IsDone());
        }
Esempio n. 21
0
 public override void UpdateGraphAppearance()
 {
     if (circleNodeIterator != null)
     {
         for (IIterator iterator = circleNodeIterator.First(); !circleNodeIterator.IsDone(); iterator = circleNodeIterator.Next())
         {
             iterator.CurrentItem.BackColor = status.结点颜色;
         }
         //处理头结点
         IGlyph headNode = circleNodeIterator.First().CurrentItem;
         headNode.BackColor = status.头结点颜色;
         //处理当前结点
         if (circleNodeIterator1 != null && circleNodeIterator1.CurrentItem != null)
         {
             circleNodeIterator1.CurrentItem.BackColor = status.当前结点颜色;
         }
     }
 }
Esempio n. 22
0
        public override void UpdateGraphAppearance()
        {
            int indexI = status.I > status.SLength ? status.I - 2 : status.I - 1;

            ((ArrayIterator)arrayIteratorS).SetBackColor(indexI, status.当前元素颜色, status.串S元素颜色, true);
            int indexJ = status.J > status.TLength ? status.J - 2 : status.J - 1;

            ((ArrayIterator)arrayIteratorT).SetBackColor(indexJ, status.当前元素颜色, status.串T元素颜色, true);

            for (IIterator iterator = arrayIteratorS.First(); !arrayIteratorS.IsDone(); iterator = arrayIteratorS.Next())
            {
                iterator.CurrentItem.Appearance = status.图形外观;
            }
            for (IIterator iterator = arrayIteratorT.First(); !arrayIteratorT.IsDone(); iterator = arrayIteratorT.Next())
            {
                iterator.CurrentItem.Appearance = status.图形外观;
            }
        }
Esempio n. 23
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="iterator"></param>
        public static void PrintUsers(IIterator iterator)
        {
            // sets the iterator index to -1
            iterator.First();

            while (iterator.MoveNext())
            {
                Console.WriteLine(iterator.CurrentItem);
            }
        }
Esempio n. 24
0
        List <T> IAggregate <T> .GetAll()
        {
            List <T> list = new List <T>();

            list.Add(iterator.First());
            while (!iterator.IsDone())
            {
                list.Add(iterator.Next());
            }
            return(list);
        }
Esempio n. 25
0
        Point[] GetPoints()
        {
            int x0, y0, x1, y1, x2, y2, x3, y3;

            x0 = iteratorInsertNode.First().CurrentItem.Bounds.X + diameter;
            y0 = iteratorInsertNode.First().CurrentItem.Bounds.Y + diameter / 2;
            x1 = x0 + 30;
            y1 = y0 - diameter / 5;
            x2 = x0 - 30;
            y2 = y0 - 2 * diameter / 5;
            x3 = x0 - 5;
            y3 = y0 - diameter;
            Point point0 = new Point(x0, y0);
            Point point1 = new Point(x1, y1);
            Point point2 = new Point(x2, y2);
            Point point3 = new Point(x3, y3);

            Point[] points = new Point[] { point0, point1, point2, point3 };

            return(points);
        }
Esempio n. 26
0
        public override void Run(int threadCycleDuration)
        {
            IIterator sequentialIterator = Foi.Places.CreateIterator(IteratorType.Sequential);

            Place place = sequentialIterator.First();

            while (place != null)
            {
                CheckPlace(place, threadCycleDuration);
                place = sequentialIterator.Next();
            }
        }
        public override void Run(int threadCycleDuration)
        {
            IIterator ascendingIterator = Foi.Places.CreateIterator(IteratorType.AscendingValue);

            Place place = ascendingIterator.First();

            while (place != null)
            {
                CheckPlace(place, threadCycleDuration);
                place = ascendingIterator.Next();
            }
        }
Esempio n. 28
0
        Image CreatePreviewImage(string s1, string s2)
        {
            int        height   = 80;
            int        width    = 530;
            int        space    = 2;
            int        size     = 30;
            int        leftSpan = 15;
            int        topSpan  = 5;
            SquareLine squareLineLa;
            SquareLine squareLineLb;

            ArrayList squareArrayLa = new ArrayList();
            ArrayList squareArrayLb = new ArrayList();
            IGlyph    glyph;

            for (int i = 0; i < s1.Length; i++)
            {
                glyph = new Square(leftSpan + i * (size + space), topSpan, size, Color.DarkCyan, GlyphAppearance.Flat, s1[i].ToString());
                squareArrayLa.Add(glyph);
            }
            for (int i = 0; i < s2.Length; i++)
            {
                glyph = new Square(leftSpan + i * (size + space), topSpan + size + 2, size, Color.DarkCyan, GlyphAppearance.Flat, s2[i].ToString());
                squareArrayLb.Add(glyph);
            }

            squareLineLa = new SquareLine(1, 1, 1, squareArrayLa);
            squareLineLb = new SquareLine(1, 1, 1, squareArrayLb);

            IIterator arrayIteratorLa = squareLineLa.CreateIterator();
            IIterator arrayIteratorLb = squareLineLb.CreateIterator();

            Bitmap   bmp = new Bitmap(width, height);
            Graphics g   = Graphics.FromImage(bmp);

            if (arrayIteratorLa != null)
            {
                for (IIterator iterator = arrayIteratorLa.First(); !arrayIteratorLa.IsDone(); iterator = arrayIteratorLa.Next())
                {
                    iterator.CurrentItem.Draw(g);
                }
            }

            if (arrayIteratorLb != null)
            {
                for (IIterator iterator = arrayIteratorLb.First(); !arrayIteratorLb.IsDone(); iterator = arrayIteratorLb.Next())
                {
                    iterator.CurrentItem.Draw(g);
                }
            }

            return(bmp);
        }
Esempio n. 29
0
        public override void Run(int threadCycleDuration)
        {
            IIterator randomIterator = Foi.Places.CreateIterator(IteratorType.Random);

            Place place = randomIterator.First();

            while (place != null)
            {
                CheckPlace(place, threadCycleDuration);
                place = randomIterator.Next();
            }
        }
Esempio n. 30
0
 public void MoveBlocksDown()
 {
     if (tower.areBlocksReadyToMoveDown())
     {
         IIterator i     = blockContainer.CreateIterator();
         object    block = i.First();
         while (block != null)
         {
             Canvas.SetTop((Image)block, Canvas.GetTop((Image)block) + Settings.BlockHeight);
             block = i.Next();
         }
     }
 }
Esempio n. 31
0
 public override void UpdateGraphAppearance()
 {
     for (IIterator iterator = arrayIteratorLa.First(); !arrayIteratorLa.IsDone(); iterator = arrayIteratorLa.Next())
     {
         iterator.CurrentItem.BackColor  = status.图形背景色;
         iterator.CurrentItem.Appearance = status.图形外观;
     }
     for (IIterator iterator = arrayIteratorLb.First(); !arrayIteratorLb.IsDone(); iterator = arrayIteratorLb.Next())
     {
         iterator.CurrentItem.BackColor  = status.图形背景色;
         iterator.CurrentItem.Appearance = status.图形外观;
     }
     for (IIterator iterator = arrayIteratorLc.First(); !arrayIteratorLc.IsDone(); iterator = arrayIteratorLc.Next())
     {
         iterator.CurrentItem.BackColor  = status.当前元素背景色;
         iterator.CurrentItem.Appearance = status.图形外观;
     }
     if (currentGlyph != null)
     {
         currentGlyph.BackColor = status.当前元素背景色;
     }
 }
Esempio n. 32
0
        static void Main(string[] args)
        {
            // Build a collection
            RadioCollection channels = new RadioCollection();

            channels.AddChannel(new FMRadio(91.1, "Radio City"));
            channels.AddChannel(new FMRadio(92.7, "Big FM"));
            channels.AddChannel(new FMRadio(93.5, "Red FM"));
            channels.AddChannel(new FMRadio(94.3, "Radio One"));
            channels.AddChannel(new FMRadio(98.3, "Radio Mirchi"));
            channels.AddChannel(new FMRadio(104.0, "Fever 104"));

            // Create iterator
            IIterator iterator = channels.CreateIterator();

            Console.WriteLine("============ For loop ===========================");

            for (FMRadio radio = iterator.First(); !iterator.IsDone; radio = iterator.Next())
            {
                Console.WriteLine($"FM Radio Name : {radio.Name} & Frequency : {radio.Frequency}");
            }

            Console.WriteLine("============ While loop ===========================");

            iterator = channels.CreateIterator(); // Here We can use Reset() method of Iterator

            FMRadio fMChannel = iterator.First();

            while (!iterator.IsDone)
            {
                Console.WriteLine($"FM Radio Name : {fMChannel.Name} & Frequency : {fMChannel.Frequency}");
                fMChannel = iterator.Next();
            }

            Console.ReadKey();
        }
Esempio n. 33
0
		Image CreatePreviewImage(string s)
		{
			int height = 80;
			int width = 530;
			int lineLength = 18;
			int diameter = 30;
			int leftSpan = 3;
			int topSpan = 20;


			IIterator circleNodeIterator;//用于输出结点链表的指针
			IIterator lineNodeIterator;//用于输出连接线链表的指针

			LinkCircleNode headNode = null;
			LinkLineNode   headLineNode = null;
			LinkCircleNode previousNode = null;
			LinkLineNode   previousLineNode = null;
			LinkCircleNode currentNode = null;
			LinkLineNode   currentLineNode = null;
			previousNode = headNode = new LinkCircleNode(leftSpan,topSpan,diameter,Color.Red,"H");
			previousLineNode = headLineNode = new LinkLineNode(leftSpan + diameter,topSpan + diameter/2,leftSpan + diameter + lineLength,topSpan + diameter/2,lineWidth,Color.Red);

			for(int i = 0;i < s.Length;i++)
			{
				currentNode = new LinkCircleNode(leftSpan + (i + 1) * (lineLength + diameter),topSpan,diameter,Color.DarkTurquoise,s[i].ToString());
				currentLineNode = new LinkLineNode(leftSpan + diameter + (i + 1) * (lineLength + diameter),topSpan + diameter/2,leftSpan + diameter + (i + 1) * (lineLength + diameter) + lineLength,topSpan + diameter/2,lineWidth,Color.Red);
				
				previousNode.Next = currentNode;
				previousLineNode.Next = currentLineNode;

				previousNode = currentNode;
				previousLineNode = currentLineNode;

			}

			if(currentNode != null)
			{
				currentNode.Next = null;
				currentLineNode.Next = null;
			}
			circleNodeIterator = headNode.CreateIterator(); 
			lineNodeIterator = headLineNode.CreateIterator();

			Bitmap bmp = new Bitmap(width,height);
			Graphics g = Graphics.FromImage(bmp);

			if(circleNodeIterator != null)
			{
				for(IIterator iterator = circleNodeIterator.First();!circleNodeIterator.IsDone();iterator = circleNodeIterator.Next())
				{
					iterator.CurrentItem.Draw(g);
				}
			}
			if(lineNodeIterator != null)
			{
				for(IIterator iterator = lineNodeIterator.First();!lineNodeIterator.IsDone();iterator = lineNodeIterator.Next())
				{
					iterator.CurrentItem.Draw(g);
				}
			}

			return bmp;

		}
Esempio n. 34
0
		public override void ExecuteAndUpdateCurrentLine()
		{
			switch (CurrentLine)
			{
				case 0:
					CurrentLine = 2;
					return;
				case 2: //InitStack(S);  p = T;
					currentIterator = new BiTreePreOrderIterator(biTreeGenerator.RootNode);
					currentIterator = currentIterator.First();
					status.CanEdit = true;
					status.P = ((IBiTreeNode)currentIterator.CurrentItem).Text;
					break;
				case 3: //while(p || !StackEmpty(S)){
					if(currentIterator.CurrentItem == null && ((BiTreePreOrderIterator)currentIterator).NodesStack.Count == 0)
					{
						CurrentLine = 16;
						return;
					}
					break;
				case 4: //if(p){
					if(currentIterator.CurrentItem == null)
					{
						CurrentLine = 12;
						return;
					}
					break;
				case 5: //if(!Visit(p->data)){
					visiting = true;
					CurrentLine = 8;
					((ArrayIterator)visitedIterator).InsertGlyph(CreateVisitedGlyph(currentIterator.CurrentItem));
					return;
				case 8: //Push(S,p);
					((BiTreePreOrderIterator)currentIterator).PushCurrentNode();
					((StackIterator)stackIterator).PushGlyph(CreateStackItem(currentIterator.CurrentItem));
					break;
				case 9: //p = p->lchild;
					((BiTreePreOrderIterator)currentIterator).SetToLeftChild();
					CurrentLine = 3;
					visiting = false;
					if(currentIterator.CurrentItem == null)
					{
						status.CanEdit = true;
						status.P = null;
					}
					else
					{
						status.CanEdit = true;
						status.P = ((IBiTreeNode)currentIterator.CurrentItem).Text;
					}
					return;
				case 12: //Pop(S,p);
					((BiTreePreOrderIterator)currentIterator).PopupToCurrentNode();
					((StackIterator)stackIterator).Pop();
					visiting = false;
					status.CanEdit = true;
					status.P = ((IBiTreeNode)currentIterator.CurrentItem).Text;
					break;
				case 13: //p = p->rchild;
					((BiTreePreOrderIterator)currentIterator).SetToRightChild();
					CurrentLine = 3;
					visiting = false;
					if(currentIterator.CurrentItem == null)
					{
						status.CanEdit = true;
						status.P = null;
					}
					else
					{
						status.CanEdit = true;
						status.P = ((IBiTreeNode)currentIterator.CurrentItem).Text;
					}
					return;
				case 16:
					return;
			}
			CurrentLine++;
		}
Esempio n. 35
0
		public override void ExecuteAndUpdateCurrentLine()
		{
			switch (CurrentLine)
			{
				case 0:
					CurrentLine = 3;
					return;
				case 3:  //L=(LinkList)malloc(sizeof(Lnode));  L->next=NULL;
					//生成一个头节点
					LinkCircleNode headNode = null;
					LinkLineNode   headLineNode = null;
					headNode = new LinkCircleNode(40,50,diameter,status.头结点颜色,"H");
					headLineNode = new LinkLineNode(40 + diameter,50 + diameter/2,40 + diameter + lineLength,50 + diameter/2,lineWidth,Color.Red);
					headNode.Next = null;
					headLineNode.Next = null;
					circleNodeIterator = headNode.CreateIterator(); 
					lineNodeIterator = headLineNode.CreateIterator();
					break;
				case 4:  //for(i=n;i>0;i--){
					if(status.I == 0)
					{
						CurrentLine = 9;
						return;
					}
					break;
				case 5:  //p=(LinkList)malloc(sizeof(Lnode));  scanf(&p->data);
					if(iteratorInsertNode != null)
					{
						((NodeListIterator)circleNodeIterator).RefreshAllNodes((LinkCircleNode)iteratorInsertNode.First().CurrentItem,40,50,diameter,lineLength,status.结点颜色);
					}
					iteratorInsertNode = new LinkCircleNode(40 + diameter - 4,50 + diameter,diameter,status.插入结点颜色,status.L[status.I - 1].ToString()).CreateIterator();
					status.CanEdit = true;
					status.P = "p当前指向结点" + ((LinkCircleNode)iteratorInsertNode.First().CurrentItem).Text;
					break;
				case 6:  //p->next=L->next;
					((LinkCircleNode)iteratorInsertNode.First().CurrentItem).Next = ((LinkCircleNode)circleNodeIterator.First().CurrentItem).Next;
					//生成贝赛尔曲线
					nullIteratorBezierLine = new BezierLine(new Rectangle(1,1,1,1),GetPoints(),lineWidth,Color.Red).CreateIterator();
					break;
				case 7:  //L->next=p;
					((LinkCircleNode)circleNodeIterator.First().CurrentItem).Next = (LinkCircleNode)iteratorInsertNode.First().CurrentItem;
					//刷新所有的结点的位置
					((NodeListIterator)circleNodeIterator).RefreshAllNodes((LinkCircleNode)iteratorInsertNode.First().CurrentItem,40,50,diameter,lineLength,status.结点颜色);
					//设置当前结点的颜色
					((NodeListIterator)circleNodeIterator).SetCurrentItemNewColor(iteratorInsertNode.First().CurrentItem,status.插入结点颜色,status.结点颜色);
					//以下是生成一个箭头,并把它插入到箭头链表,最后刷新这个箭头链表
					LinkLineNode lineNode = new LinkLineNode(1,1,1 + lineLength,1,2,Color.Red);
					lineNode.Next = ((LinkLineNode)lineNodeIterator.First().CurrentItem).Next;
					((LinkLineNode)lineNodeIterator.First().CurrentItem).Next = lineNode;
					((NodeListIterator)lineNodeIterator).RefreshAllNodes((LinkLineNode)lineNodeIterator.First().CurrentItem,40 - lineLength,50 + diameter/2,diameter,lineLength,Color.Red);
					//删除贝赛尔曲线
					nullIteratorBezierLine = null;
					//i--
					status.CanEdit = true;
					status.I--;
					CurrentLine = 4;
					return;
				case 9:
					return;
			}
			CurrentLine++;
		}