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;
}
}
}