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 Zelvaci { public partial class InteractiveViewForm : Form { private int steps = 1; public List prog = new List(); private int maxSteps = 0; public InteractiveViewForm() { InitializeComponent(); } private void pictureBox1_Paint(object sender, PaintEventArgs e) { if (maxSteps == 0) { int pppp = 0; foreach (pair p in prog) { switch (p.typ) { case prikaz.FORWARD: if (pppp > 0) { maxSteps++; } break; case prikaz.PEN: pppp = p.parameters[0]; break; } } } if (maxSteps <= 1) { nextButton.Enabled = false; if(maxSteps == 0) return; } Graphics g = e.Graphics; g.FillRectangle(Brushes.White, 0, 0, 700, 700); Color c = Color.Black; float x = 350, y = 350; // pozice želvy int rotation = -90; int pen = 0; int stepsDone = 0; foreach (pair p in prog) { switch (p.typ) { case prikaz.FORWARD: float endX = x + p.parameters[0] * (float)Math.Cos(rotation * (Math.PI / 180)); float endY = y + p.parameters[0] * (float)Math.Sin(rotation * (Math.PI / 180)); if (pen > 0) { float startX = x; float startY = y; stepsDone++; if (stepsDone == maxSteps) pen = 10; g.DrawLine(new Pen(c, pen), new PointF(startX, startY), new PointF(endX, endY)); } x = endX; y = endY; break; case prikaz.LEFT: rotation -= p.parameters[0]; break; case prikaz.RIGHT: rotation += p.parameters[0]; break; case prikaz.PEN: pen = p.parameters[0]; break; case prikaz.COLOR: int r, gg, b; r = Math.Max(0, Math.Min(255, p.parameters[0])); gg = Math.Max(0, Math.Min(255, p.parameters[1])); b = Math.Max(0, Math.Min(255, p.parameters[2])); c = Color.FromArgb(r, gg, b); break; } if (steps == stepsDone) break; } if (steps == maxSteps && stepsDone == maxSteps) { g.FillEllipse(Brushes.Red, x - 5, y - 5, 10, 10); float endX = x + 12 * (float)Math.Cos(rotation * (Math.PI / 180)); float endY = y + 12 * (float)Math.Sin(rotation * (Math.PI / 180)); g.DrawLine(Pens.Red, new PointF(x, y), new PointF(endX, endY)); } } private void nextButton_Click(object sender, EventArgs e) { prevButton.Enabled = true; if (steps != maxSteps) { steps++; pictureBox1.Refresh(); } if (steps == maxSteps) nextButton.Enabled = false; } private void prevButton_Click(object sender, EventArgs e) { nextButton.Enabled = true; if (steps != 0) { steps--; pictureBox1.Refresh(); } if (steps == 0) prevButton.Enabled = false; } } }