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); }
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); }
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 }
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); }
// 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; }