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; using System.IO; using System.Drawing; namespace Soutez { public partial class FormInter : Form { short rozmerX; short rozmerY; int krok = 0; public FormInter() { InitializeComponent(); } Point vydejNovouPoziciZveda(Point origo, string cesta) { Point r = origo; int odsX = 0; int odsY = 0; while (cesta.Length < krok) cesta += cesta; for(int i = 0; i < krok; i++) { if (cesta[i] == '<') odsX -= 10; if (cesta[i] == '>') odsX += 10; if (cesta[i] == '^') odsY -= 10; if (cesta[i] == 'v' || cesta[i] == 'V') odsY += 10; } r = new System.Drawing.Point(r.X + odsX, r.Y + odsY); return r; } private void nakresli() { StreamReader sr = new StreamReader(".\\Temporary"); Bitmap bmp = new System.Drawing.Bitmap(800, 800); Graphics g = Graphics.FromImage(bmp); try { string radek = sr.ReadLine(); rozmerX = Convert.ToInt16(radek.Split(' ')[0]); rozmerY = Convert.ToInt16(radek.Split(' ')[1]); g.FillRectangle(new SolidBrush(Color.White), 0, 0, rozmerX * 10, rozmerY * 10); radek = ""; short indRadek = 0; //Pracovní proměnné short indSloupec = 0; string posledniCesta = ""; Point posledniZved = new System.Drawing.Point(); while (radek != null) { radek = sr.ReadLine(); if (radek != null) //Po-poslední řádek { indRadek++; indSloupec = 1; foreach (char ch in radek) //Rozlouskej řádek po písmenkách { if (ch == '.') //Volné políčko { // g.FillRectangle(new SolidBrush(Color.White), (indSloupec - 1) * 10, (indRadek - 1) * 10, 10, 10); indSloupec++; if (posledniCesta != "") { g.FillRectangle(new SolidBrush(Color.White), posledniZved.X, posledniZved.Y, 10, 10); g.FillRectangle(new SolidBrush(Color.White), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); g.FillEllipse(new SolidBrush(Color.Red), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); posledniCesta = ""; } } if (ch == 'X') //Zeď { g.FillRectangle(new SolidBrush(Color.Brown), (indSloupec - 1) * 10, (indRadek - 1) * 10, 10, 10); indSloupec++; if (posledniCesta != "") { g.FillRectangle(new SolidBrush(Color.White), posledniZved.X, posledniZved.Y, 10, 10); g.FillRectangle(new SolidBrush(Color.White), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); g.FillEllipse(new SolidBrush(Color.Red), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); posledniCesta = ""; } } if (ch == '&') //Bílá paní { g.FillRectangle(new SolidBrush(Color.White), (indSloupec - 1) * 10, (indRadek - 1) * 10, 10, 10); g.FillEllipse(new SolidBrush(Color.Blue), (indSloupec - 1) * 10, (indRadek - 1) * 10, 10, 10); indSloupec++; if (posledniCesta != "") { g.FillRectangle(new SolidBrush(Color.White), posledniZved.X, posledniZved.Y, 10, 10); g.FillRectangle(new SolidBrush(Color.White), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); g.FillEllipse(new SolidBrush(Color.Red), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); posledniCesta = ""; } } if (ch == '#') //Televizor { g.FillRectangle(new SolidBrush(Color.Yellow), (indSloupec - 1) * 10, (indRadek - 1) * 10, 10, 10); g.FillRectangle(new SolidBrush(Color.Green), ((indSloupec - 1) * 10) + 1, ((indRadek - 1) * 10) + 1, 8, 6); indSloupec++; if (posledniCesta != "") { g.FillRectangle(new SolidBrush(Color.White), posledniZved.X, posledniZved.Y, 10, 10); g.FillRectangle(new SolidBrush(Color.White), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); g.FillEllipse(new SolidBrush(Color.Red), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); posledniCesta = ""; } } if (ch == '@') //Zvěd { if (posledniCesta != "") { g.FillRectangle(new SolidBrush(Color.White), posledniZved.X, posledniZved.Y, 10, 10); g.FillRectangle(new SolidBrush(Color.White), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); g.FillEllipse(new SolidBrush(Color.Red), vydejNovouPoziciZveda(posledniZved, posledniCesta).X, vydejNovouPoziciZveda(posledniZved, posledniCesta).Y, 10, 10); posledniCesta = ""; } posledniZved = new Point((indSloupec - 1) * 10, (indRadek - 1) * 10); g.FillRectangle(new SolidBrush(Color.White), (indSloupec - 1) * 10, (indRadek - 1) * 10, 10, 10); g.FillEllipse(new SolidBrush(Color.Red), (indSloupec - 1) * 10, (indRadek - 1) * 10, 10, 10); indSloupec++; } if (ch == '<' || ch == '>' || ch == '^' || ch.ToString().ToUpper() == "V") //Cesta zvěda { char c = ch; if (c == 'v') c = 'V'; posledniCesta += c; } } } } } catch { MessageBox.Show("Na místě v kódu aplikace, kde nikdy nemělo dojít k chybě, došlo k chybě.", "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); } g.Save(); platno.BackgroundImage = bmp; sr.Close(); } private void FormInter_Load(object sender, EventArgs e) { nakresli(); } private void button2_Click(object sender, EventArgs e) { krok++; button1.Enabled = true; label1.Text = "Krok: " + krok.ToString(); nakresli(); } private void button1_Click(object sender, EventArgs e) { krok--; if (krok == 0) button1.Enabled = false; label1.Text = "Krok: " + krok.ToString(); nakresli(); } private void button3_Click(object sender, EventArgs e) { krok = 0; button1.Enabled = false; label1.Text = "Krok: " + krok.ToString(); nakresli(); } } }