using System; using System.Drawing; using System.Collections.Generic; using System.Text; namespace Snake { class Plansza_Snake : Plansza { public enum kierunki { gora, dol, lewo, prawo }; private Waz figura; public kierunki kierunek = kierunki.lewo; public bool gra = false; public bool pauza = false; public bool przedluz = false; public bool nowy_element = false; private Color kolor_nowych = Color.MediumSeaGreen; private Random losuj; public Plansza_Snake() : base() { figura = new Waz(); losuj = new Random(); } public Plansza_Snake(int a, int b) : base(a, b) { figura = new Waz(); losuj = new Random(); } public void nowywaz() { figura = new Waz(); kierunek = kierunki.lewo; int i, j; foreach (Point buf in figura.punkty) { i = buf.X; j = buf.Y; siatka[i, j] = new kratka(i, j, figura.kolor); siatka[i, j].rysuj(g); } int[] rnd_wsp = new int[2]; Point rnd_Punkt = losowe_wspolrzedne(); siatka[rnd_Punkt.X, rnd_Punkt.Y] = new kratka(rnd_Punkt.X, rnd_Punkt.Y, kolor_nowych); siatka[rnd_Punkt.X, rnd_Punkt.Y].rysuj(g); } public void ruch() { LinkedListNode<Point> buf = figura.punkty.First; int x = buf.Value.X; int y = buf.Value.Y; int nowy_x, nowy_y; nowy_x = nowy_y = 0; bool zlapano_kratke = false; switch (kierunek) { case kierunki.dol: nowy_x = x; nowy_y = y + 1; break; case kierunki.gora: nowy_x = x; nowy_y = y - 1; break; case kierunki.lewo: nowy_x = x - 1; nowy_y = y; break; case kierunki.prawo: nowy_x = x + 1; nowy_y = y; break; } if (!sprawdzwymiary(nowy_x, nowy_y)) { gra = false; return; } buf = buf.Next; if (siatka[nowy_x, nowy_y].czyzajeta()) { if (siatka[nowy_x, nowy_y].getkolor() != kolor_nowych && siatka[nowy_x, nowy_y] == siatka[buf.Value.X, buf.Value.Y]) { switch (kierunek) { case kierunki.dol: kierunek = kierunki.gora; break; case kierunki.gora: kierunek = kierunki.dol; break; case kierunki.lewo: kierunek = kierunki.prawo; break; case kierunki.prawo: kierunek = kierunki.lewo; break; } ruch(); return; } else if (siatka[nowy_x, nowy_y].getkolor() == kolor_nowych) zlapano_kratke = true; else { gra = false; return; } } figura.punkty.AddFirst(new LinkedListNode<Point>(new Point(nowy_x, nowy_y))); siatka[nowy_x, nowy_y] = new kratka(nowy_x, nowy_y, Color.Azure); siatka[nowy_x, nowy_y].rysuj(g); if (!nowy_element) { buf = figura.punkty.Last; siatka[buf.Value.X, buf.Value.Y].kasuj(g, BackColor); figura.punkty.RemoveLast(); } else { Point rnd_Punkt = new Point(); rnd_Punkt = losowe_wspolrzedne(); siatka[rnd_Punkt.X, rnd_Punkt.Y].setkolor(kolor_nowych); siatka[rnd_Punkt.X, rnd_Punkt.Y].rysuj(g); } if (zlapano_kratke) nowy_element = true; else nowy_element = false; } public Point losowe_wspolrzedne() { Point p = new Point(); do { p.X = losuj.Next(sz_ekranu - 1); p.Y = losuj.Next(wys_ekranu - 1); } while (siatka[p.X, p.Y].czyzajeta()); return p; } } }