Ejemplo n.º 1
0
        public string str_color(vertex_color c) // returns given vertex_colors, color-string
        {
            string r = "";

            switch (c)
            {
            case vertex_color.Empty:
                r = "EMPTY";
                break;

            case vertex_color.Red:
                r = "RED";
                break;

            case vertex_color.Green:
                r = "GREEN";
                break;

            case vertex_color.Blue:
                r = "BLUE";
                break;

            default:
                break;
            }

            return(r);
        }
Ejemplo n.º 2
0
        public int count_colors(vertex_color c) // count given colors total occurence
        {
            int count = 0;

            for (int i = 0; i < vertex_colors.Length; i++)
            {
                if (vertex_colors[i] == c)
                {
                    count++;
                }
            }

            return(count);
        }
Ejemplo n.º 3
0
        public vertex_color find_color(vertex_color c1, vertex_color c2) // find a color for vertex using given two other colors
        {
            if (c1 == vertex_color.Red)                                  // red
            {
                if (c2 == vertex_color.Blue)                             // red + blue
                {
                    return(vertex_color.Green);                          // ===========> green
                }
                else if (c2 == vertex_color.Green)                       // red + green
                {
                    return(vertex_color.Blue);                           // ===========> blue
                }
            }
            else if (c1 == vertex_color.Blue)       // blue
            {
                if (c2 == vertex_color.Red)         // blue + red
                {
                    return(vertex_color.Green);     // ===========> green
                }
                else if (c2 == vertex_color.Green)  // blue + green
                {
                    return(vertex_color.Red);       // ============> red
                }
            }
            else if (c1 == vertex_color.Green)      // green
            {
                if (c2 == vertex_color.Red)         // green + red
                {
                    return(vertex_color.Blue);      // ===========> blue
                }
                else if (c2 == vertex_color.Blue)   // green + blue
                {
                    return(vertex_color.Red);       // ===========> red
                }
            }

            return(vertex_color.Empty);              // return decided color
        }
Ejemplo n.º 4
0
        public vertex_color get_minumum_color() // count the each colors, return the minumum count color
        {                                       // used for deciding the minimum guard
            int red_count   = count_colors(vertex_color.Red);
            int blue_count  = count_colors(vertex_color.Blue);
            int green_count = count_colors(vertex_color.Green);

            int          min       = red_count;
            vertex_color min_color = vertex_color.Red;

            if (blue_count < min)
            {
                min       = blue_count;
                min_color = vertex_color.Blue;
            }

            if (green_count < min)
            {
                min       = green_count;
                min_color = vertex_color.Green;
            }

            return(min_color);
        }
Ejemplo n.º 5
0
        // scans selected guards vision
        private void scan_colors(vertex_color c)
        {
            Point    p;
            Graphics g = panel_screen.CreateGraphics();
            Brush    b = Brushes.White;

            // set guard colors
            switch (c)
            {
            case vertex_color.Empty:
                break;

            case vertex_color.Red:
                b = Brushes.Red;    //Itt  Firebrick
                break;

            case vertex_color.Green:
                b = Brushes.Lime;    //Itt DarkGreen
                break;

            case vertex_color.Blue:
                b = Brushes.Blue;    //Itt RoyalBlue
                break;

            default:
                break;
            }

            g.Clear(Color.White);
            status = prosess_status.ANIMATING;

            draw_ears(true);                                 // draw tringulated polygon - wireframe-only mode

            for (int i = 0; i < m.vertex_colors.Length; i++) // loop through guards
            {
                if (m.vertex_colors[i] == c)                 // if this is the guard we'r looking for
                {
                    p = m.input_vertices[i];                 // get guard point
                    Rectangle r = new Rectangle(p.X - 10, p.Y - 10, 20, 20);
                    g.FillEllipse(b, r);                     // draw guard
                    g.DrawEllipse(new Pen(Color.White, 1), r);
                    Application.DoEvents();
                    Thread.Sleep(750);                                                                     // wait 750 ms for next step

                    for (int j = 0; j < m.polygons.Length; j++)                                            // loop through polygons and find related polygons to current point
                    {
                        if ((p == m.polygons[j][0]) || (p == m.polygons[j][1]) || (p == m.polygons[j][2])) // if related polygon
                        {
                            g.FillPolygon(b, m.polygons[j]);                                               // draw the polygon
                            g.DrawPolygon(Pens.White, m.polygons[j]);
                            Application.DoEvents();
                            Thread.Sleep(750); // wait 750 ms for next step
                        }
                    }
                    g.FillEllipse(b, r);
                    g.DrawEllipse(new Pen(Color.White, 1), r);
                }
            }

            status = prosess_status.TRICOLOR_COMPLETED;
        }