Создать класс очередь. Графическая реализация очереди на основе класса - C#

Узнай цену своей работы

Формулировка задачи:

Помогите пожалуйста, полнейша безысходность в простых прораммах работа с очередью понятно, но с графической реализацией...

Решение задачи: «Создать класс очередь. Графическая реализация очереди на основе класса»

textual
Листинг программы
  1. public partial class Form1 : Form
  2.     {
  3.         public class MyQueue
  4.         {
  5.             List<MyRect> list;
  6.  
  7.             public MyQueue()
  8.             {
  9.                 list = new List<MyRect>();
  10.             }
  11.  
  12.             public void Enqueue(MyRect rect)
  13.             {
  14.                 rect.Number = list.Count;
  15.                 list.Add(rect);
  16.             }
  17.  
  18.             public MyRect Get()
  19.             {
  20.                 MyRect tmp = list[0];
  21.                 list.RemoveAt(0);
  22.                 return tmp;
  23.             }
  24.  
  25.             public void DrawQueue(Graphics g)
  26.             {
  27.                 foreach (MyRect r in list)
  28.                 {
  29.                     r.Draw(g);
  30.                 }
  31.             }
  32.         }
  33.  
  34.         public class MyRect
  35.         {
  36.             Rectangle rect;
  37.             int number;
  38.  
  39.             public MyRect(int x, int y, int width, int height)
  40.             {
  41.                 rect.X = x;
  42.                 rect.Y = y;
  43.                 rect.Width = width;
  44.                 rect.Height = height;
  45.             }
  46.  
  47.             public int Number
  48.             {
  49.                 get { return number; }
  50.                 set { this.number = value; }
  51.             }
  52.  
  53.             public void Draw(Graphics g)
  54.             {
  55.                 g.DrawRectangle(new Pen(new SolidBrush(Color.Black)), rect);
  56.                 g.DrawString(number.ToString(), new Font("Arial", 10), new SolidBrush(Color.Black), rect.X + 5, rect.Y + 5);
  57.             }
  58.         }
  59.        
  60.         MyQueue queue;
  61.         Random rand;
  62.         Panel panel1, panel2;
  63.         List<MyRect> l; //список для выборки из очереди
  64.  
  65.         public Form1()
  66.         {
  67.             queue = new MyQueue();
  68.             rand = new Random();
  69.             l = new List<MyRect>();
  70.             Button add, del;
  71.             add = new Button();
  72.             del = new Button();
  73.             add.SetBounds(10, 10, 70, 30);
  74.             del.SetBounds(100, 10, 70, 30);
  75.             add.Text = "Добавить";
  76.             del.Text = "Вытащить";
  77.             this.Controls.Add(add);
  78.             this.Controls.Add(del);
  79.             add.Click += add_Click;
  80.             del.Click += del_Click;
  81.             panel1 = new Panel();
  82.             panel2 = new Panel();
  83.             panel1.SetBounds(10, 50, 200, 200);
  84.             panel2.SetBounds(220, 50, 200, 200);
  85.             panel1.BorderStyle = BorderStyle.FixedSingle;
  86.             panel2.BorderStyle = BorderStyle.FixedSingle;
  87.             this.Controls.Add(panel1);
  88.             this.Controls.Add(panel2);
  89.             panel1.Paint += panel1_Paint;
  90.             panel2.Paint += panel2_Paint;
  91.             InitializeComponent();
  92.             this.Width = 440;
  93.             this.Height = 300;
  94.         }
  95.  
  96.         void panel2_Paint(object sender, PaintEventArgs e)
  97.         {
  98.             Graphics g = Graphics.FromHwnd(panel2.Handle);
  99.             foreach (MyRect r in l)
  100.             {
  101.                 r.Draw(g);
  102.             }
  103.         }
  104.  
  105.         void panel1_Paint(object sender, PaintEventArgs e)
  106.         {
  107.             queue.DrawQueue(Graphics.FromHwnd(panel1.Handle));
  108.         }
  109.  
  110.         void del_Click(object sender, EventArgs e)
  111.         {
  112.             try
  113.             {
  114.                 l.Add(queue.Get());
  115.             }
  116.             catch (ArgumentOutOfRangeException)
  117.             { MessageBox.Show("Очередь пуста"); return; }
  118.             panel1.Refresh();
  119.             panel2.Refresh();
  120.         }
  121.  
  122.         void add_Click(object sender, EventArgs e)
  123.         {
  124.             queue.Enqueue(new MyRect(rand.Next(0, panel1.Width-30), rand.Next(panel2.Height-30), 20, 20));
  125.             panel1.Refresh();
  126.         }
  127.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы