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; namespace Soutez { public partial class FormEditor : Form { #region drobnosti /* Drobnější procedury a funkce, * které nejsou pro běh programu klíčové */ private void info(string text) { MessageBox.Show(text, "Informace", MessageBoxButtons.OK, MessageBoxIcon.Information); } private void error(string text) { MessageBox.Show(text, "Chyba", MessageBoxButtons.OK, MessageBoxIcon.Error); } #endregion; private short rozmerX = 0; private short rozmerY = 0; bool radaPresun = false; public Panel presouvany; public Control[,] objekty; public FormEditor() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { //Načíst bludiště StreamReader sr = new StreamReader(openFileDialog1.FileName); platno.Controls.Clear(); try { string radek = sr.ReadLine(); rozmerX = Convert.ToInt16(radek.Split(' ')[0]); rozmerY = Convert.ToInt16(radek.Split(' ')[1]); label1.Text = "Rozměry: " + rozmerX.ToString() + " × " + rozmerY.ToString(); radek = ""; short indRadek = 0; //Pracovní proměnné short indSloupec = 0; objekty = new Control[rozmerX, rozmerY]; platno.Hide(); this.Enabled = false; while (radek != null) { radek = sr.ReadLine(); if (radek != null) //Po-poslední řádek { indRadek++; indSloupec = 0; OBJ_zved posledniZved = new OBJ_zved(); foreach (char ch in radek) //Rozlouskej řádek po písmenkách { if (ch == '.') //Volné políčko { indSloupec++; OBJ_volnepolicko o = new OBJ_volnepolicko(); o.Parent = platno; o.Location = new Point((indSloupec - 1) * 10, (indRadek - 1) * 10); o.rodic = this; o.CreateControl(); objekty[indSloupec - 1, indRadek - 1] = o; } if (ch == 'X') //Zeď { indSloupec++; OBJ_zed o = new OBJ_zed(); o.Parent = platno; o.Location = new Point((indSloupec - 1) * 10, (indRadek - 1) * 10); o.rodic = this; o.CreateControl(); objekty[indSloupec - 1, indRadek - 1] = o; } if (ch == '#') //Televizor { indSloupec++; OBJ_televizor o = new OBJ_televizor(); o.Parent = platno; o.Location = new Point((indSloupec - 1) * 10, (indRadek - 1) * 10); o.rodic = this; o.CreateControl(); objekty[indSloupec - 1, indRadek - 1] = o; } if (ch == '@') //Zvěd { indSloupec++; posledniZved = new OBJ_zved(); posledniZved.Parent = platno; posledniZved.Location = new Point((indSloupec - 1) * 10, (indRadek - 1) * 10); posledniZved.rodic = this; posledniZved.CreateControl(); objekty[indSloupec - 1, indRadek - 1] = posledniZved; } if (ch == '&') //Bílá paní { indSloupec++; OBJ_bilapani o = new OBJ_bilapani(); o.Parent = platno; o.Location = new Point((indSloupec - 1) * 10, (indRadek - 1) * 10); o.rodic = this; o.CreateControl(); objekty[indSloupec - 1, indRadek - 1] = o; } if (ch == '<' || ch == '>' || ch == '^' || ch.ToString().ToUpper() == "V") //Část cesty zvěda { char c = ch; if (c == 'v') c = 'V'; posledniZved.trasa += c; } } } } this.Enabled = true; platno.Show(); button3.Enabled = true; groupBox1.Enabled = true; button4.Enabled = true; } catch { error("Bludiště nemá správný formát."); this.Enabled = true; platno.Show(); } sr.Close(); } } private void button2_Click(object sender, EventArgs e) { FormRozmery f = new FormRozmery(); if (f.ShowDialog() == System.Windows.Forms.DialogResult.OK) { platno.Controls.Clear(); rozmerX = (short)f.nSirka.Value; rozmerY = (short)f.nVyska.Value; objekty = new Control[rozmerX, rozmerY]; for (int y = 0; y <= rozmerY - 1; y++) { for (int x = 0; x <= rozmerX - 1; x++) { if (y == 0 && x == 0) { //Vlevo nahoře vytvoř bílou paní OBJ_bilapani o = new OBJ_bilapani(); o.Parent = platno; o.Location = new Point(y * 10, x * 10); o.rodic = this; o.CreateControl(); objekty[y, x] = o; } else if (y == rozmerY - 1 && x == rozmerX - 1) { //Vpravo dole vytvoř televizor OBJ_televizor o = new OBJ_televizor(); o.Parent = platno; o.Location = new Point(y * 10, x * 10); o.rodic = this; o.CreateControl(); objekty[y, x] = o; } else { //Zbytek zaplň volným místem OBJ_volnepolicko o = new OBJ_volnepolicko(); o.Parent = platno; o.Location = new Point(y * 10, x * 10); o.rodic = this; o.CreateControl(); objekty[y, x] = o; } } } button3.Enabled = true; groupBox1.Enabled = true; button4.Enabled = true; label1.Text = "Rozměry: " + rozmerX.ToString() + " × " + rozmerY.ToString(); } } private void radioButton1_CheckedChanged(object sender, EventArgs e) { if (st7.Checked) { if (!radaPresun) { radaPresun = true; info("Nejprve pravým tlačítkem vyberte objekt, který chcete přesunout,\npo té levým tlačítkem klikněte na místo určení.\nPůvodní místo bude nahrazeno prázným políčkem."); } } } private void button3_Click(object sender, EventArgs e) { if (saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { try { bool jednaPani = false; bool jednaTv = false; bool chybaJedna = false; int radek = 0; int sloupec = 1; string linka = ""; StreamWriter sw = new StreamWriter(saveFileDialog1.FileName); sw.WriteLine(rozmerX.ToString() + " " + rozmerY.ToString()); for (int y = 0; y <= rozmerY - 1; y++) { linka = ""; for (int x = 0; x <= rozmerX - 1; x++) { Control p = objekty[x, y]; if (p.TabIndex == 0) { linka += "&"; if (!jednaPani) jednaPani = true; else chybaJedna = true; } if (p.TabIndex == 1) { linka += "#"; if (!jednaTv) jednaTv = true; else chybaJedna = true; } if (p.TabIndex == 2) linka += "."; if (p.TabIndex == 3) linka += "X"; if (p.TabIndex == 4) linka += "@" + (p as OBJ_zved).trasa; } sw.WriteLine(linka); } if (!chybaJedna) info("Soubor byl úspěšně uložen."); else error("Byla zjištěna duplikace Bílé paní nebo televize\n- tento objekt je možno použít jen jednou!\nSoubor byl přesto uložen."); sw.Close(); } catch { error("Nepodařilo se soubor uložit."); } } } private void button4_Click(object sender, EventArgs e) { try { int radek = 0; int sloupec = 1; string linka = ""; StreamWriter sw = new StreamWriter(".\\Temporary"); sw.WriteLine(rozmerX.ToString() + " " + rozmerY.ToString()); for (int y = 0; y <= rozmerY - 1; y++) { linka = ""; for (int x = 0; x <= rozmerX - 1; x++) { Control p = objekty[x, y]; if (p.TabIndex == 0) linka += "&"; if (p.TabIndex == 1) linka += "#"; if (p.TabIndex == 2) linka += "."; if (p.TabIndex == 3) linka += "X"; if (p.TabIndex == 4) linka += "@" + (p as OBJ_zved).trasa; } sw.WriteLine(linka); } sw.Close(); FormInter f = new FormInter(); f.ShowDialog(); } catch { error("Nedaří se vytvořit soubor .\\Temporary.\nZkontrolujte, zda máte na určené místo práva zapisovat."); } } } }