/// <summary>
    /// Test the double stack.
    /// </summary>
    public static void TestDoubleStack()
    {
        // Create stack
        int         size  = 10;
        DoubleStack stack = new DoubleStack(size);

        // Push elements on the stack
        try
        {
            for (int i = 0; i <= size; i++)
            {
                stack.Push(i);
                Console.WriteLine("Push: {0}", i);
            }
        }
        catch (ApplicationException ex)
        {
            Console.WriteLine("Error while pushing values on the stack: {0}", ex.Message);
        }

        // Pop elelments from the stack
        try
        {
            while (true)
            {
                Console.WriteLine("Pop: {0}", stack.Pop());
            }
        }
        catch (ApplicationException ex)
        {
            Console.WriteLine("Error while poping values from the stack: {0}", ex.Message);
        }
    }
		public static void Initialize()
		{
			Wiring._wireSkip = new Dictionary<Point16, bool>();
			Wiring._wireList = new DoubleStack<Point16>(1024, 0);
			Wiring._toProcess = new Dictionary<Point16, byte>();
			Wiring._inPumpX = new int[20];
			Wiring._inPumpY = new int[20];
			Wiring._outPumpX = new int[20];
			Wiring._outPumpY = new int[20];
			Wiring._teleport = new Vector2[2];
			Wiring._mechX = new int[1000];
			Wiring._mechY = new int[1000];
			Wiring._mechTime = new int[1000];
		}
Esempio n. 3
0
 private static void HitWire(DoubleStack<Point16> next, int wireType)
 {
     int num;
     int num1;
     bool flag;
     byte num2;
     for (int i = 0; i < next.Count; i++)
     {
         Point16 point16 = next.PopFront();
         Wiring.SkipWire(point16);
         Wiring._toProcess.Add(point16, 4);
         next.PushBack(point16);
     }
     while (next.Count > 0)
     {
         Point16 point161 = next.PopFront();
         int x = point161.X;
         int y = point161.Y;
         if (!Wiring._wireSkip.ContainsKey(point161))
         {
             Wiring.HitWireSingle(x, y);
         }
         for (int j = 0; j < 4; j++)
         {
             switch (j)
             {
                 case 0:
                 {
                     num = x;
                     num1 = y + 1;
                     break;
                 }
                 case 1:
                 {
                     num = x;
                     num1 = y - 1;
                     break;
                 }
                 case 2:
                 {
                     num = x + 1;
                     num1 = y;
                     break;
                 }
                 case 3:
                 {
                     num = x - 1;
                     num1 = y;
                     break;
                 }
                 default:
                 {
                     num = x;
                     num1 = y + 1;
                     break;
                 }
             }
             if (num >= 2 && num < Main.maxTilesX - 2 && num1 >= 2 && num1 < Main.maxTilesY - 2)
             {
                 Tile tile = Main.tile[num, num1];
                 if (tile != null)
                 {
                     switch (wireType)
                     {
                         case 1:
                         {
                             flag = tile.wire();
                             break;
                         }
                         case 2:
                         {
                             flag = tile.wire2();
                             break;
                         }
                         case 3:
                         {
                             flag = tile.wire3();
                             break;
                         }
                         default:
                         {
                             flag = false;
                             break;
                         }
                     }
                     if (flag)
                     {
                         Point16 point162 = new Point16(num, num1);
                         if (!Wiring._toProcess.TryGetValue(point162, out num2))
                         {
                             next.PushBack(point162);
                             Wiring._toProcess.Add(point162, 3);
                         }
                         else
                         {
                             num2 = (byte)(num2 - 1);
                             if (num2 != 0)
                             {
                                 Wiring._toProcess[point162] = num2;
                             }
                             else
                             {
                                 Wiring._toProcess.Remove(point162);
                             }
                         }
                     }
                 }
             }
         }
     }
     Wiring._wireSkip.Clear();
     Wiring._toProcess.Clear();
     Wiring.running = false;
 }
Esempio n. 4
0
    static void Main()
    {
        /*  ARRAY
         *
         * Dynamic_Array<int> obj = new Dynamic_Array<int>(10);
         * obj.Insert(10);
         * obj.Insert(13,12);
         * obj.Insert(16, 2);
         * obj.Insert(17);
         * obj.remove(2);
         * obj.remove(4);
         * Console.WriteLine(obj.ToString());
         */

        /*   LINK LIST
         *
         * LinkedList<int> list = new LinkedList<int>();
         * list.FindMiddleNode();
         * list.GetKthFromEndUtil(2);
         * list.AddFirst(10);
         * list.GetKthFromEndUtil(2);
         * list.AddFirst(200);
         * list.AddLast(40);
         * list.AddLast(50);
         * list.AddFirst(7);
         * list.CreateLoop();
         * list.DetectLoop();
         *
         * Console.WriteLine(list.ToString());
         *
         * list.DeleteLast();
         * list.DeleteFirst();
         * list.Contains(70);
         * list.IndexOf(10);
         * list.IndexOf(30);
         * Console.WriteLine(list.ToString());
         */

        /* STRING OPS
         *
         * StringOperations op = new StringOperations();
         * op.ReverseString("Cammel");
         * Console.WriteLine(op.CheckBalancedExpression("[(1+3)-(a*3)]"));
         */

        /* STACK OPERATIONS
         * Stack stk = new Stack();
         * stk.Push(10);
         * stk.Push(90);
         * stk.Pop();
         * Console.WriteLine(stk.Peek());
         * stk.Push(100);
         * stk.Push(-1);
         * stk.Push(78);
         * Console.WriteLine(stk.Peek());
         *
         * for (int i = 0; i < 5; i++)
         *  stk.Pop();
         *
         */

        DoubleStack ds = new DoubleStack();

        ds.PushStackB(19);
        ds.PushStackB(-1);
        ds.PrintStackA();
        ds.PrintStackB();
        ds.PushStackA(10);
        ds.PushStackB(5);
        ds.PrintStackA();
        ds.PrintStackB();
        ds.IsStackBEmpty();
        ds.IsStackAEmpty();
    }
Esempio n. 5
0
		private static void hitWire(DoubleStack<Point16> next, int wireType)
		{
			for (int i = 0; i < next.Count; i++)
			{
				Point16 point = next.PopFront();
				Wiring.SkipWire(point);
				Wiring.toProcess.Add(point, 4);
				next.PushBack(point);
			}
			while (next.Count > 0)
			{
				Point16 key = next.PopFront();
				int x = (int)key.x;
				int y = (int)key.y;
				if (!Wiring.wireSkip.ContainsKey(key))
				{
					Wiring.hitWireSingle(x, y);
				}
				for (int j = 0; j < 4; j++)
				{
					int num;
					int num2;
					switch (j)
					{
					case 0:
						num = x;
						num2 = y + 1;
						break;
					case 1:
						num = x;
						num2 = y - 1;
						break;
					case 2:
						num = x + 1;
						num2 = y;
						break;
					case 3:
						num = x - 1;
						num2 = y;
						break;
					default:
						num = x;
						num2 = y + 1;
						break;
					}
					if (num >= 2 && num < Main.maxTilesX - 2 && num2 >= 2 && num2 < Main.maxTilesY - 2)
					{
						Tile tile = Main.tile[num, num2];
						if (tile != null)
						{
							bool flag;
							switch (wireType)
							{
							case 1:
								flag = tile.wire();
								break;
							case 2:
								flag = tile.wire2();
								break;
							case 3:
								flag = tile.wire3();
								break;
							default:
								flag = false;
								break;
							}
							if (flag)
							{
								Point16 point2 = new Point16(num, num2);
								byte b;
								if (Wiring.toProcess.TryGetValue(point2, out b))
								{
									b = (byte)(b - 1);
									if (b == 0)
									{
										Wiring.toProcess.Remove(point2);
									}
									else
									{
										Wiring.toProcess[point2] = b;
									}
								}
								else
								{
									next.PushBack(point2);
									Wiring.toProcess.Add(point2, 3);
								}
							}
						}
					}
				}
			}
			Wiring.wireSkip.Clear();
			Wiring.toProcess.Clear();
			Wiring.running = false;
		}
Esempio n. 6
0
		public static void Initialize()
		{
			Wiring.wireSkip = new Dictionary<Point16, bool>();
			Wiring.wireList = new DoubleStack<Point16>(1024, 0);
			Wiring.toProcess = new Dictionary<Point16, byte>();
		}
Esempio n. 7
0
		private static void TripWire(int left, int top, int width, int height)
		{
			if (wireList == null)
				wireList = new DoubleStack<Point16>(1024, 0);

			Wiring.running = true;
			if (Wiring.wireList.Count != 0)
			{
				Wiring.wireList.Clear(true);
			}
			for (int i = left; i < left + width; i++)
			{
				for (int j = top; j < top + height; j++)
				{
					Point16 back = new Point16(i, j);
					Tile tile = Main.tile[i, j];
					if (tile != null && tile.wire())
					{
						Wiring.wireList.PushBack(back);
					}
				}
			}
			Vector2[] array = new Vector2[6];
			Wiring.teleport[0].X = -1f;
			Wiring.teleport[0].Y = -1f;
			Wiring.teleport[1].X = -1f;
			Wiring.teleport[1].Y = -1f;
			if (Wiring.wireList.Count > 0)
			{
				Wiring.numInPump = 0;
				Wiring.numOutPump = 0;
				Wiring.hitWire(Wiring.wireList, 1);
				if (Wiring.numInPump > 0 && Wiring.numOutPump > 0)
				{
					Wiring.xferWater();
				}
			}
			for (int k = left; k < left + width; k++)
			{
				for (int l = top; l < top + height; l++)
				{
					Point16 back = new Point16(k, l);
					Tile tile2 = Main.tile[k, l];
					if (tile2 != null && tile2.wire2())
					{
						Wiring.wireList.PushBack(back);
					}
				}
			}
			array[0] = Wiring.teleport[0];
			array[1] = Wiring.teleport[1];
			Wiring.teleport[0].X = -1f;
			Wiring.teleport[0].Y = -1f;
			Wiring.teleport[1].X = -1f;
			Wiring.teleport[1].Y = -1f;
			if (Wiring.wireList.Count > 0)
			{
				Wiring.numInPump = 0;
				Wiring.numOutPump = 0;
				Wiring.hitWire(Wiring.wireList, 2);
				if (Wiring.numInPump > 0 && Wiring.numOutPump > 0)
				{
					Wiring.xferWater();
				}
			}
			array[2] = Wiring.teleport[0];
			array[3] = Wiring.teleport[1];
			Wiring.teleport[0].X = -1f;
			Wiring.teleport[0].Y = -1f;
			Wiring.teleport[1].X = -1f;
			Wiring.teleport[1].Y = -1f;
			for (int m = left; m < left + width; m++)
			{
				for (int n = top; n < top + height; n++)
				{
					Point16 back = new Point16(m, n);
					Tile tile3 = Main.tile[m, n];
					if (tile3 != null && tile3.wire3())
					{
						Wiring.wireList.PushBack(back);
					}
				}
			}
			if (Wiring.wireList.Count > 0)
			{
				Wiring.numInPump = 0;
				Wiring.numOutPump = 0;
				Wiring.hitWire(Wiring.wireList, 3);
				if (Wiring.numInPump > 0 && Wiring.numOutPump > 0)
				{
					Wiring.xferWater();
				}
			}
			array[4] = Wiring.teleport[0];
			array[5] = Wiring.teleport[1];
			for (int num = 0; num < 5; num += 2)
			{
				Wiring.teleport[0] = array[num];
				Wiring.teleport[1] = array[num + 1];
				if (Wiring.teleport[0].X >= 0f && Wiring.teleport[1].X >= 0f)
				{
					Wiring.Teleport();
				}
			}
			Wiring.running = false;
		}
Esempio n. 8
0
 private static void HitWire(DoubleStack<Point16> next, int wireType)
 {
     for (int index = 0; index < next.Count; ++index)
     {
         Point16 point16 = next.PopFront();
         Wiring.SkipWire(point16);
         Wiring._toProcess.Add(point16, (byte)4);
         next.PushBack(point16);
     }
     while (next.Count > 0)
     {
         Point16 key = next.PopFront();
         int i = (int)key.X;
         int j = (int)key.Y;
         if (!Wiring._wireSkip.ContainsKey(key))
             Wiring.HitWireSingle(i, j);
         for (int index1 = 0; index1 < 4; ++index1)
         {
             int X;
             int Y;
             switch (index1)
             {
                 case 0:
                     X = i;
                     Y = j + 1;
                     break;
                 case 1:
                     X = i;
                     Y = j - 1;
                     break;
                 case 2:
                     X = i + 1;
                     Y = j;
                     break;
                 case 3:
                     X = i - 1;
                     Y = j;
                     break;
                 default:
                     X = i;
                     Y = j + 1;
                     break;
             }
             if (X >= 2 && X < Main.maxTilesX - 2 && (Y >= 2 && Y < Main.maxTilesY - 2))
             {
                 Tile tile = Main.tile[X, Y];
                 if (tile != null)
                 {
                     bool flag;
                     switch (wireType)
                     {
                         case 1:
                             flag = tile.k_HasWireFlags(k_WireFlags.WIRE_RED);
                             break;
                         case 2:
                             flag = tile.k_HasWireFlags(k_WireFlags.WIRE_GREEN);
                             break;
                         case 3:
                             flag = tile.k_HasWireFlags(k_WireFlags.WIRE_BLUE);
                             break;
                         default:
                             flag = false;
                             break;
                     }
                     if (flag)
                     {
                         Point16 index2 = new Point16(X, Y);
                         byte num;
                         if (Wiring._toProcess.TryGetValue(index2, out num))
                         {
                             --num;
                             if ((int)num == 0)
                                 Wiring._toProcess.Remove(index2);
                             else
                                 Wiring._toProcess[index2] = num;
                         }
                         else
                         {
                             next.PushBack(index2);
                             Wiring._toProcess.Add(index2, (byte)3);
                         }
                     }
                 }
             }
         }
     }
     Wiring._wireSkip.Clear();
     Wiring._toProcess.Clear();
     Wiring.running = false;
 }