Прямоугольная спираль - 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(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д