示例#1
0
 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();
 }
示例#2
0
        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);
        }
示例#3
0
        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));
        }
示例#4
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;
            }
        }