private void antstep(Ant s) { //mapAVC.reset(); //mapAVC.Upscale(1); int a = ants.IndexOf(s); //Kollar ifall myran står på vänstersväng ant_check_Turn_Fields_Left(a); //Kollar ifall myran står på en högersväng ant_check_Turn_Fields_Right(a); //Sväng diagonalt ant_check_Turn_Diagonal(a, !is_ant_in_front(ants[a])); //Tar bort myror på dödsrutor ant_check_remove(s); //renderar allt till skärmen // render_To_Screen(); }
private bool is_ant_in_front(Ant greger)// säger huruvida en rutan är okuperad. { try { bool output = false; switch (greger._dir) { case 0: if (true == karta[greger.X, greger.Y - 1]) { output = true; } break; case 1: if (karta[greger.X + 1, greger.Y] == true) { output = true; } break; case 2: if (true == karta[greger.X, greger.Y + 1]) { output = true; } break; case 3: if (karta[greger.X - 1, greger.Y] == true) { output = true; } break; } return(output); } catch { return(true); } }
private void ACC(Ant a, bool brake) { for (int x = 1; x <= a.v; x++) { if (map_elements[a.X, a.Y] == -1) { a.v = 0; } antstep(a); } // if (!brake && a.v != 0) // { // // antstep(a); // } if (a.v < v_max && map_elements[a.X, a.Y] != -1) { a.Acc = 1; } ant_check_remove(ants); //Tar bort alla myror }
static public bool is_ant_to_side_left(Ant Orvar) { if (Orvar.X < map.Width && Orvar.X > 0 && Orvar.Y < map.Height && Orvar.Y > 0) { switch (Orvar._dir) { case 0: return(karta[Orvar.X - 1, Orvar.Y - 1]); case 1: return(karta[Orvar.X + 1, Orvar.Y - 1]); case 2: return(karta[Orvar.X + 1, Orvar.Y + 1]); case 3: return(karta[Orvar.X - 1, Orvar.Y + 1]); default: return(false); } } return(true); }
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; } }
private void button8_Click(object sender, EventArgs e) { independent = new Ant(new Point(map.Height / 2, map.Width / 2), 0, Color.GreenYellow, false); }