Прямоугольная спираль - C#

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

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

Помогите пожалуйста!! я написала программу, в которой штрих-пунктирная линия двигается и образует прямоугольную спираль. мне сказали что это все не так и надо, чтобы когда линия движется вниз или вверх, то она поворачивалась и прорисовывалась вертикально (то есть когда она движется вправо/влево, она горизонтальная, а когда вверх/вниз- вертикальная).. Помогите, а то у меня какая-то ерунда получается по этому поводу...
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace _4
{    
    public partial class Form1 : Form
    {
        int Q = 6;
        int i = 0;
       
        public bool draw = false;
        struct my_line
        {
            public Point first;
            public Point last;
        };
        my_line my_lines;
        /*struct my_linee
        {
            public Point first;
            public Point last;
        };
        my_linee my_linees;*/
 
        Pen p = new Pen(Color.Brown, 3);
        
       public Form1()
        {
            InitializeComponent();

        }
 
        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
        }
 
        private void запускToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!draw)
            {
                draw = true;
            }
            timer1.Enabled = true;   
        }
 
        private void остановкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }
 
        private void увеличениеToolStripMenuItem_Click(object sender, EventArgs e)
        {
           
            if (увеличениеToolStripMenuItem.Text == "Увеличение")
            {
              p.Width = 6;
                увеличениеToolStripMenuItem.Text = "Уменьшение";
                
            }
            else
            {
                p.Width = 3; 
                увеличениеToolStripMenuItem.Text = "Увеличение";
               
            }
        }
 
        private void ускорениеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ускорениеToolStripMenuItem.Text == "Ускорение")
            {
                ускорениеToolStripMenuItem.Text = "Замедление";
                timer1.Interval /= 4;
            }
            else
            {
                ускорениеToolStripMenuItem.Text = "Ускорение";
                timer1.Interval *= 4;
            } 
        }
 
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Выйти?", "Сообщение", MessageBoxButtons.OKCancel) == DialogResult.OK) Close();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            p.DashPattern = new float[] { 2f, 1f };
            progressBar1.Maximum = 67;
            progressBar1.Value = 0;
            progressBar1.Step = 1;
            my_lines = new my_line();
            my_lines.first.X = 660;
            my_lines.first.Y = 381;
            my_lines.last.X = 700;
            my_lines.last.Y = 381;
          
           // my_linees.last.Y = 411;
        }

        private void Form1_DoubleClick(object sender, EventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            g.DrawString("Л.P. №4 Марушко Катерины", new Font("Times New Roman", 12), new SolidBrush(Color.Black), 0, 0);
            
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
           Graphics g = CreateGraphics();
           if ((my_lines.last.Y > this.ClientSize.Height) || (my_lines.first.Y < 0))
            {
                g.Clear(Color.WhiteSmoke);
                g.DrawLine(p, 660, 381, 700, 381);
                timer1.Stop();
                
            }
           
            i++;
            if (i == 17)
                i = 1;
 
            if (i <=4)
            {
                my_lines.first.X = my_lines.first.X + Q;
                my_lines.last.X = my_lines.last.X + Q;
                
            }
            if ((i >4 )&&(i<=8))
            {

                my_lines.first.Y = my_lines.first.Y + Q;
                my_lines.last.Y = my_lines.last.Y + Q;
                
            }
            if ((i > 8)&&(i<=12))
            {

                my_lines.first.X = my_lines.first.X - Q;
                my_lines.last.X = my_lines.last.X - Q;
               
            }
            if ((i > 12)&&(i<=16))
            {

                my_lines.first.Y = my_lines.first.Y - Q;
                my_lines.last.Y = my_lines.last.Y - Q;
                
            }
            
            g.DrawLine(p, my_lines.first, my_lines.last);
            Q += 3;
            if (progressBar1.Value == progressBar1.Maximum)
            {
                progressBar1.Value = 0;
            }
            progressBar1.PerformStep();
           
        }
    }
}

Решение задачи: «Прямоугольная спираль»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
 
namespace _4
{    
    public partial class Form1 : Form
    {
        const int Q = 30; //размер шага
        int i = 0;
        int line_length;
 
        public bool draw = false;
 
        enum Direction
        {
            Right, Down, Left, Up
        };
 
        struct my_line
        {
            public Point first;
            public Point last;
            public Direction direction;
        };
 
        my_line my_lines;
 
        Pen p = new Pen(Color.Brown, 3);
        
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_SizeChanged(object sender, EventArgs e)
        {
            this.WindowState = FormWindowState.Maximized;
        }
 
        private void запускToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (!draw)
            {
                draw = true;
            }
            timer1.Enabled = true;   
        }
 
        private void остановкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            timer1.Enabled = false;
        }
 
        private void увеличениеToolStripMenuItem_Click(object sender, EventArgs e)
        {
           
            if (увеличениеToolStripMenuItem.Text == "Увеличение")
            {
              p.Width = 6;
                увеличениеToolStripMenuItem.Text = "Уменьшение";
                
            }
            else
            {
                p.Width = 3; 
                увеличениеToolStripMenuItem.Text = "Увеличение";
               
            }
        }
 
        private void ускорениеToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (ускорениеToolStripMenuItem.Text == "Ускорение")
            {
                ускорениеToolStripMenuItem.Text = "Замедление";
                timer1.Interval /= 4;
            }
            else
            {
                ускорениеToolStripMenuItem.Text = "Ускорение";
                timer1.Interval *= 4;
            } 
        }
 
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Выйти?", "Сообщение", MessageBoxButtons.OKCancel) == DialogResult.OK) Close();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            p.DashPattern = new float[] { 2f, 1f };
            progressBar1.Maximum = 67;
            progressBar1.Value = 0;
            progressBar1.Step = 1;
            line_length = Q;
            my_lines.direction = Direction.Right;
            my_lines.first.X = 660;
            my_lines.first.Y = 381;
            my_lines.last = my_lines.first;
        } 
 
        private void Form1_DoubleClick(object sender, EventArgs e)
        {
            Graphics g = pictureBox1.CreateGraphics();
            g.DrawString("Л.P. №4 Марушко Катерины", new Font("Times New Roman", 12), new SolidBrush(Color.Black), 0, 0);
            
        }
 
        private void timer1_Tick(object sender, EventArgs e)
        {
            Graphics g = CreateGraphics();
            if ((my_lines.last.Y > this.ClientSize.Height) || (my_lines.first.Y < 0))
            {
                g.Clear(Color.WhiteSmoke);
                g.DrawLine(p, 660, 381, 700, 381);
                timer1.Stop();
            }
 
            if (i == 2)
            {
                line_length += Q;
                i = 0;
            }
 
            switch (my_lines.direction)
            {
                case Direction.Right:
                    my_lines.last.X += line_length;                    
                    my_lines.direction = Direction.Down;
                    break;
                case Direction.Down:
                    my_lines.last.Y += line_length;
                    my_lines.direction = Direction.Left;
                    break;
                case Direction.Left:
                    my_lines.last.X -= line_length;
                    my_lines.direction = Direction.Up;
                    break;
                case Direction.Up:
                    my_lines.last.Y -= line_length;
                    my_lines.direction = Direction.Right;
                    break;
            }            
 
            g.DrawLine(p, my_lines.first, my_lines.last);
            my_lines.first = my_lines.last;
            i++;
 
            if (progressBar1.Value == progressBar1.Maximum)
            {
                progressBar1.Value = 0;
            }
            progressBar1.PerformStep();           
        }
    }
}

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


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

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

8   голосов , оценка 3.875 из 5
Похожие ответы