private void button_UP_Click(object sender, EventArgs e) { mapAVC.reset(); mapAVC.Upscale(10); independent.setPos(new Point(independent.getPosX(), independent.getPosY() - 1)); mapAVC.Setpixel(independent.getPos(), independent.Color); pictureBox.Image = mapAVC.get(); colorcheck(); }
public int ljus() { int steg; Ant ljus = new Ant(_pos.X, _pos.Y, _dir, Color.White, false); //Kollar hur många steg till det finns ett gult ljus ivägen- for (steg = 0; ljus_stop(ljus); steg++) { if (MainForm.map_elements[ljus.X, ljus.Y] == 1 || MainForm.map_elements[ljus.X, ljus.Y] == 2) { return(-2); } if (MainForm.map_elements[ljus.X, ljus.Y] == -1 || ljus.Y < MainForm.map.Height - 1 && ljus.Y >= 0 && ljus.X < MainForm.map.Width - 1 && ljus.X >= 0) { return(-1); } for (int i = 0; i < MainForm.Turn_fields_Left.Length; i++) { if (MainForm.Turn_fields_Left[i].Contains(ljus.Pos) && ljus._dir == i) { ljus._dir--; ljus._dir = dirOverFlowCorr(ljus._dir); } } for (int i = 0; i < MainForm.Turn_fields_Right.Length; i++) { if (MainForm.Turn_fields_Right[i].Contains(ljus.Pos) && ljus._dir == i) { ljus._dir++; ljus._dir = dirOverFlowCorr(ljus._dir); } } //Sväng diagonalt if (MainForm.Turn_fields_Right_Diagonal.Contains(ljus.getPos())) { ljus.step(); ljus._dir = dirOverFlowCorr(ljus._dir + 1); ljus.step(); ljus._dir = dirOverFlowCorr(ljus._dir - 1); } else if (MainForm.Turn_fields_Left_Diagonal[ljus._dir].Contains(ljus.getPos()) && !MainForm.is_ant_to_side_right(ljus)) { ljus.step(); ljus._dir = dirOverFlowCorr(ljus._dir - 1); ljus.step(); ljus._dir = dirOverFlowCorr(ljus._dir + 1); } else// Gör tillsammans med if-sats i början att trace myra dör på killfields. { ljus.step(); } } return(steg); }
public Trafikljus trace_t(MainForm inputform, out int step) { Ant trace = new Ant(X, Y, _dir, Color.White, false); //Rörelse logik for (step = 0; !trace_t_stop(inputform); step++) { for (int i = 0; i < MainForm.Turn_fields_Left.Length; i++) { if (MainForm.Turn_fields_Left[i].Contains(trace.Pos) && trace._dir == i) { trace._dir--; trace._dir = dirOverFlowCorr(trace._dir); } } for (int i = 0; i < MainForm.Turn_fields_Right.Length; i++) { if (MainForm.Turn_fields_Right[i].Contains(trace.Pos) && trace._dir == i) { trace._dir++; trace._dir = dirOverFlowCorr(trace._dir); } } //Sväng diagonalt if (MainForm.Turn_fields_Right_Diagonal.Contains(trace.getPos())) { trace.step(); trace._dir = dirOverFlowCorr(trace._dir + 1); trace.step(); trace._dir = dirOverFlowCorr(trace._dir - 1); } else if (MainForm.Turn_fields_Left_Diagonal[trace._dir].Contains(trace.getPos()) && !MainForm.is_ant_to_side_right(trace)) { trace.step(); trace._dir = dirOverFlowCorr(trace._dir - 1); trace.step(); trace._dir = dirOverFlowCorr(trace._dir + 1); } else// Gör tillsammans med if-sats i början att trace myra dör på killfields. { trace.step(); } } return(findFromCord(X, Y, inputform)); }
public void trace(out int step, out bool need_brake, out int Ant_V, MainForm inputform) { t_ljus = false; forms = inputform; need_brake = true; Ant trace = new Ant(X, Y, _dir, Color.White, false); // Skapar en lokal myra som får springa till den stöter på något. for (step = 0; trace_stop(trace, step); step++) // En for-loop som ökar antalet steg tills logiken blir false se metod trace_stop ovan. { if (MainForm.map_elements[trace.X, trace.Y] == -1) { need_brake = false; break; } for (int i = 0; i < MainForm.Turn_fields_Left.Length; i++) { if (MainForm.Turn_fields_Left[i].Contains(trace.Pos) && trace._dir == i) { trace._dir--; trace._dir = dirOverFlowCorr(trace._dir); } } for (int i = 0; i < MainForm.Turn_fields_Right.Length; i++) { if (MainForm.Turn_fields_Right[i].Contains(trace.Pos) && trace._dir == i) { trace._dir++; trace._dir = dirOverFlowCorr(trace._dir); } } //Sväng diagonalt if (MainForm.Turn_fields_Right_Diagonal.Contains(trace.getPos())) { trace.step(); trace._dir = dirOverFlowCorr(trace._dir + 1); trace.step(); trace._dir = dirOverFlowCorr(trace._dir - 1); } else if (MainForm.Turn_fields_Left_Diagonal[trace._dir].Contains(trace.getPos()) && !MainForm.is_ant_to_side_right(trace)) { trace.step(); trace._dir = dirOverFlowCorr(trace._dir - 1); trace.step(); trace._dir = dirOverFlowCorr(trace._dir + 1); } else// Gör tillsammans med if-sats i början att trace myra dör på killfields. { trace.step(); } } // try { // bool hey = MainForm.karta[trace.X, trace.Y]; // Om vi får true här är den nuvarande positionen okuperad av en myra } // catch { // need_brake = false; } //Form1.mapAVC.Setpixel(trace.X, trace.Y, Color.Aqua); try { Ant_V = MainForm.ants[MainForm.ants.IndexOf(trace)].v; } catch { Ant_V = -1; } }