//! Metoda uruchamiająca funkcje odpowiedzialne za mruganie oraz odgrywanie dźwięku dla danych punktów w czasie zapisanych w tablicy zapis[,,]. private void mrug(int s, int l, int i, grafika graf, dzwiek dzwk) { if (l == zapis[s, z, 0] && zapis[s, z, 1] == 1) { if (swiatlo) { graf.krop(mn); } if (dzwiek) { dzwk.kropD(mn); } z++; } else if (l == zapis[s, z, 0] && zapis[s, z, 1] == 3) { if (swiatlo) { graf.kres(mn); } if (dzwiek) { dzwk.kresD(mn); } z++; } if (z == i) { z = 0; wyk = true; } }
//! Metoda rysująca pełny ciąg znaków na panelu graficznym g (tylko tryb treningu). private void RysT(grafika graf) { graf.Clear(); x = 50; int dlugosc = 0; znaki = ""; for (int rr = 0; rr < dl; rr++) { for (int j = 0; j < losowy[rr].znak.Length; j++) { znaki = znaki + losowy[rr].znak[j]; } if (nadawanie) { graf.RysN1(x, y, losowy[rr].litera, losowy[rr].kolor, tekst); dlugosc = TextRenderer.MeasureText(losowy[rr].litera, new Font("Arial", 48)).Width; } else if (!nadawanie) { graf.RysN1(x, y, znaki, losowy[rr].kolor, tekst); dlugosc = TextRenderer.MeasureText(znaki, new Font("Arial", 48)).Width; } znaki = ""; x += dlugosc + 5; } }
//! Konstruktor klasy Gra. public Gra() { InitializeComponent(); g = panel1.CreateGraphics(); o = panel2.CreateGraphics(); h = panel9.CreateGraphics(); hh = panel10.CreateGraphics(); alfa = new ciag(); graf = new grafika(g, o, h, hh); dzwk = new dzwiek(); }
//! Metoda obsługująca tryb nauki biernej. internal async void Nauka1(grafika graf, dzwiek dzwk) { nauka = true; x = 450; while (nauka) { graf.Clear(); graf.off(); for (int i = 0; i < 26; i++) { znaki = alfabet[i].litera + " "; k = 3; for (int j = 0; j < alfabet[i].znak.Length; j++) { znaki = znaki + alfabet[i].znak[j]; uzupZ(0, i, j); } k = k + fa; z = 0; graf.RysN1(x, y, znaki, Color.Black, true); for (int l = 0; l < k; l++) { await Task.Delay(mn * 5); if (reset || menu) { if (menu) { menu = false; nauka = false; return; } break; } if (l > 2 && (swiatlo || dzwiek)) { mrug(0, l, alfabet[i].znak.Length, graf, dzwk); } } if (reset) { reset = false; break; } graf.Clear(); } } }
//! Metoda generująca losowy ciąg znaków (tylko tryb treningu). private void generator(grafika graf) { znaki = ""; int liczba; int dlugosc = 0; x = 50; Random rnd = new Random(); k += 1; for (int r = 0; r < dl; r++) { k += 2; liczba = rnd.Next(26); losowy[r] = new element(alfabet[liczba].litera, alfabet[liczba].znak); for (int j = 0; j < losowy[r].znak.Length; j++) { znaki = znaki + losowy[r].znak[j]; uzupZ(r, liczba, j); } if (fa == 4) { k += 1; } else { k += 4; } if (nadawanie) { graf.RysN1(x, y, losowy[r].litera, Color.Black, tekst); dlugosc = TextRenderer.MeasureText(losowy[r].litera, new Font("Arial", 48)).Width; } else if (!nadawanie) { graf.RysN1(x, y, znaki, Color.Black, tekst); dlugosc = TextRenderer.MeasureText(znaki, new Font("Arial", 48)).Width; } znaki = ""; x += dlugosc + 5; } k += 2 + fa; }
//! Metoda sprawdza czy wprowadzony kod z klawiatury jest poprawny (tylko tryb treningu oraz nauki czynnej). private void spraw(String zn, grafika graf, Label label1, Label label2) { if (zn == znaki2) { label1.ForeColor = Color.Green; label1.Text = "Poprawnie!"; if (!nadawanie) { graf.off(); } poprawne = true; } else { label1.ForeColor = Color.Red; label1.Text = "Błąd!"; bledy += 1; label2.Text = "Błędy: " + bledy; znaki2 = ""; keyPress = 0; } }
//! Metoda obsługująca tryb treningu. internal async void Trening(grafika graf, Label label1, Label label2, TextBox textBox1, dzwiek dzwk, Label label3) { nauka = true; poprawne = false; while (nauka) { int r = 0; z = 0; x = 10; k = 0; poprawne = false; graf.Clear(); generator(graf); label1.ForeColor = Color.Green; label1.Text = "Wpisz literę odpowiadającą symbolowi"; bledy = 0; label2.Text = "Błędy: " + bledy; label3.Text = "Czas: "; textBox1.Clear(); zegar2.Reset(); zegar2.Start(); if (nadawanie) { r = 0; znaki = ""; for (int i = 0; i < losowy[r].znak.Length; i++) { znaki = znaki + losowy[r].znak[i]; } while (!poprawne) { await Task.Delay(5); if (reset || menu) { if (menu) { menu = false; nauka = false; return; } reset = false; break; } textBox1.Text = znaki2; if (keyPress == losowy[r].znak.Length) { keyPress = 0; spraw(znaki, graf, label1, label2); if (poprawne) { losowy[r].kolor = Color.Green; r = r + 1; znaki = ""; znaki2 = ""; RysT(graf); if (r < dl) { poprawne = false; for (int i = 0; i < losowy[r].znak.Length; i++) { znaki = znaki + losowy[r].znak[i]; } } } } } } else if (!nadawanie) { r = 0; znaki = ""; int s = 0; wyk = false; while (!poprawne) { for (int l = 0; l < k && !poprawne; l++) { await Task.Delay(mn * 5); if (reset || menu) { if (menu) { menu = false; nauka = false; return; } break; } if (l > 2) { mrug(s, l, losowy[s].znak.Length, graf, dzwk); if (wyk) { wyk = false; s++; if (s == dl) { s = 0; } } } if (keyPress > 0) { keyPress = 0; textBox1.Text = ""; spraw(losowy[r].litera, graf, label1, label2); if (poprawne) { losowy[r].kolor = Color.Green; r = r + 1; znaki2 = ""; RysT(graf); if (r < dl) { poprawne = false; } } } } if (reset) { reset = false; break; } } } if (poprawne) { zegar2.Stop(); graf.Clear(); textBox1.Text = ""; graf.drawBrush.Color = Color.Green; label1.Text = "Dobra robota. Poprawnie zakodowałeś cały ciąg."; label3.Text = "Czas: " + zegar2.Elapsed; nauka = false; while (!menu) { await Task.Delay(mn * 5); if (reset) { reset = false; nauka = true; break; } } } } }
//! Metoda obsługująca tryb nauki czynnej. internal async void Nauka2(grafika graf, Label label1, Label label2, TextBox textBox1, dzwiek dzwk) { nauka = true; bledy = 0; x = 510; label2.Text = "Błędy: " + bledy; textBox1.Clear(); while (nauka) { graf.Clear(); label1.ForeColor = Color.Green; label1.Text = "Wpisz literę odpowiadającą symbolowi"; graf.drawBrush.Color = Color.Black; for (int i = 0; i < 26; i++) { znaki2 = ""; znaki = ""; keyPress = 0; poprawne = false; graf.Clear(); k = 3; z = 0; for (int j = 0; j < alfabet[i].znak.Length; j++) { znaki = znaki + alfabet[i].znak[j]; uzupZ(0, i, j); } k = k + fa; if (nadawanie) { graf.RysN1(x, y, alfabet[i].litera, Color.Black, tekst); } else if (!nadawanie) { graf.RysN1(x, y, znaki, Color.Black, tekst); } while (!poprawne) { if (nadawanie) { await Task.Delay(5); if (reset || menu) { if (menu) { menu = false; nauka = false; return; } break; } textBox1.Text = znaki2; if (keyPress == alfabet[i].znak.Length) { spraw(znaki, graf, label1, label2); } } else if (!nadawanie) { for (int l = 0; l < k && !poprawne; l++) { await Task.Delay(mn * 5); if (reset || menu) { if (menu) { menu = false; nauka = false; return; } break; } if (l > 2 && (swiatlo || dzwiek)) { mrug(0, l, alfabet[i].znak.Length, graf, dzwk); } if (keyPress > 0) { spraw(alfabet[i].litera, graf, label1, label2); textBox1.Text = ""; if (poprawne) { z = 0; } } } } if (reset) { break; } } if (reset) { reset = false; bledy = 0; break; } graf.drawBrush.Color = Color.Black; if (i == 25) { nauka = false; graf.Clear(); textBox1.Text = ""; graf.drawBrush.Color = Color.Green; label1.Text = "Dobra robota. Poprawnie zakodowałeś cały ciąg."; while (!menu) { await Task.Delay(mn * 5); if (reset) { reset = false; nauka = true; bledy = 0; label2.Text = "Błędy: " + bledy; break; } } } } } }