Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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
        }
Beispiel #4
0
        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);
        }
Beispiel #5
0
        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;
            }
        }
Beispiel #6
0
 private void button8_Click(object sender, EventArgs e)
 {
     independent = new Ant(new Point(map.Height / 2, map.Width / 2), 0, Color.GreenYellow, false);
 }