/// <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]; }
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; }
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(); }
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; }
public static void Initialize() { Wiring.wireSkip = new Dictionary<Point16, bool>(); Wiring.wireList = new DoubleStack<Point16>(1024, 0); Wiring.toProcess = new Dictionary<Point16, byte>(); }
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; }
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; }