namespace Viborita
{
public partial class Form1 : Form
{
int Record;
int RecordFinal;
//Cuerpo de la víbora
private List<Circulos>Viborita = new List<Circulos>();
//Formar comida
private Circulos comida = new Circulos();
public Form1()
{
InitializeComponent();
//Cargar las configuraciones predeterminadas
new Config();
//Establecer la velocidad y empezar el temporizador
Tiempo.Interval = 1000 / Config.Velocidad;
Tiempo.Tick += Actualizar;
Tiempo.Start();
//Cuadro de diálogo para escribir tu nombre (Hacer referecia a Visual Basic para que funcione)
string nombre = Microsoft.VisualBasic.Interaction.InputBox("Escribe tu nombre", "Bienvenido", "");
lbNombre.Text = nombre;
//Empezar el juego
EmpezarJuego();
}
private void EmpezarJuego()
{
lbFinJuego.Visible = false;
//Cargar las configuraciones predeterminadas
lbrecord.Text = RecordFinal.ToString();
new Config();
//Esto crea a la víbora y la pone en el juego
Viborita.Clear();
Circulos cabeza = new Circulos();
cabeza.X = 10;
cabeza.Y = 5;
Viborita.Add(cabeza);
lbPuntos.Text = Config.Puntuacion.ToString();
GenerarComida();
}
//Genera la comida aleatoriamente en la pantalla
private void GenerarComida()
{
//Divide la altura y anchura de nuestra área de juego por la de la configuración
//para tener una variable qué usar y en dónde ponerla sin salir del área
int PosicionXmax = pbArea.Size.Width / Config.Ancho;
int PosicionYmax = pbArea.Size.Height / Config.Alto;
//Esto crea un nuevo objeto aleatorio y un objeto de comida
//y lo coloca en un lugar del área de juego entre cero y el máximo del área de juego en X y Y
Random aleatorio = new Random();
comida = new Circulos();
comida.X = aleatorio.Next(0, PosicionXmax);
comida.Y = aleatorio.Next(0, PosicionYmax);
}
private void Actualizar (object sender, EventArgs e)
{
//Ver si el juego terminó
if (Config.FinJuego==true)
{
//Verificar si la tecla Enter es presionada
if (Entrada.KeyPressed(Keys.Enter))
{
EmpezarJuego();
Viborita.Clear();
string nom = lbNombre.Text;
string nombre = Microsoft.VisualBasic.Interaction.InputBox("Escribe tu nombre", "Bienvenido",""+nom+"");
lbNombre.Text = nombre;
nom = nombre;
EmpezarJuego();
}
}
else
{
if (Entrada.KeyPressed(Keys.Right) && Config.direccion != Direccion.Izq)
Config.direccion = Direccion.Der;
else if (Entrada.KeyPressed(Keys.Left) && Config.direccion != Direccion.Der)
Config.direccion = Direccion.Izq;
else if (Entrada.KeyPressed(Keys.Up) && Config.direccion != Direccion.Abajo)
Config.direccion = Direccion.Arriba;
else if (Entrada.KeyPressed(Keys.Down) && Config.direccion != Direccion.Arriba)
Config.direccion = Direccion.Abajo;
Moverse();
}
pbArea.Invalidate();
}
private void Tiempo_Tick(object sender, EventArgs e)
{
throw new NotImplementedException();
}
private void label1_Click(object sender, EventArgs e)
{
}
private void lbPuntos_Click(object sender, EventArgs e)
{
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void pbArea_Paint(object sender, PaintEventArgs e)
{
Graphics area = e.Graphics;
if(!Config.FinJuego)
{
//Establecer el color de la víbora
Brush colorVib;
//Colores de la víbora
for(int i=0; i< Viborita.Count; i++)
{
if (i == 0)
colorVib = Brushes.Black; //Dibuja la cabeza
else
colorVib = Brushes.OrangeRed; //Dibuja el resto del cuerpo
//Dibujar la víbora
area.FillEllipse(colorVib, new Rectangle(Viborita[i].X * Config.Ancho,
Viborita[i].Y * Config.Alto,
Config.Ancho, Config.Alto));
//Dibujar comida
area.FillEllipse(Brushes.Green,
new Rectangle(comida.X * Config.Ancho,
comida.Y * Config.Alto, Config.Ancho, Config.Alto));
}
}
else
{
string finjuego = "Fin del juego.\nTu puntuación final fue: " + Config.Puntuacion +
"\n Presiona la tecla Enter para reintentar.";
if (RecordFinal==0)
{
Record = Config.Puntuacion;
RecordFinal = Record;
}
if(Config.Puntuacion>RecordFinal)
{
RecordFinal = Config.Puntuacion;
}
lbFinJuego.Text = finjuego;
lbFinJuego.Visible = true;
}
}
private void Moverse()
{
for(int i = Viborita.Count -1; i>=0; i--)
{
//Mover cabeza
if (i == 0)
{
switch (Config.direccion)
{
case Direccion.Der:
Viborita[i].X++;
break;
case Direccion.Izq:
Viborita[i].X--;
break;
case Direccion.Arriba:
Viborita[i].Y--;
break;
case Direccion.Abajo:
Viborita[i].Y++;
break;
}
//Obtener las posiciones máximas de X y Y
int maxX = pbArea.Size.Width / Config.Ancho;
int maxY = pbArea.Size.Height / Config.Alto;
//Detectar la colisión en las paredes
if (Viborita[i].X < 0 || Viborita[i].Y < 0
|| Viborita[i].X >= maxX || Viborita[i].Y >= maxY)
{
Muere();
}
//Detectar colisión con el cuerpo
for(int j=1; j<Viborita.Count; j++)
{
if(Viborita[i].X == Viborita[j].X &&
Viborita[i].Y == Viborita[j].Y)
{
Muere();
}
}
//Detectar colisión con la comida
if(Viborita[0].X==comida.X && Viborita[0].Y == comida.Y)
{
Come();
}
}
else
{
//Mover el cuerpo
Viborita[i].X = Viborita[i - 1].X;
Viborita[i].Y = Viborita[i - 1].Y;
}
}
}
private void Come()
{
//Agregar un círculo a la víbora
Circulos comida = new Circulos();
comida.X = Viborita[Viborita.Count - 1].X;
comida.Y = Viborita[Viborita.Count - 1].Y;
Viborita.Add(comida);
//Actualizar puntaje
Config.Puntuacion += Config.Puntos;
lbPuntos.Text = Config.Puntuacion.ToString();
GenerarComida();
}
private void Muere()
{
Config.FinJuego = true;
}
private void lbFinJuego_Click(object sender, EventArgs e)
{
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
Entrada.CambiarEstado(e.KeyCode, true);
}
private void Form1_KeyUp(object sender, KeyEventArgs e)
{
Entrada.CambiarEstado(e.KeyCode, false);
}
private void label1_Click_1(object sender, EventArgs e)
{
}
private void label1_Click_2(object sender, EventArgs e)
{
}
private void tbNomre_TextChanged(object sender, EventArgs e)
{
}
private void BAplicar_Click(object sender, EventArgs e)
{
}
private void pbArea_Click(object sender, EventArgs e)
{
}
}
}