En esta semana he estado publicando algo sobre un juego de la viborita en C# y ahora que le he avanzado a lo que quería (dejaré el código abajo), me he atorado con algo nuevo:
Ya tengo las letras separadas una por una, pero quiero que una siga a otra, como en una fila. Lo que tengo ahorita es una palabra moviéndose en las direcciones, pero con las letras en un mismo lugar, "Hola" moviéndose arriba, abajo, izquierda y derecha en vez de:
H
O
L
A
Donde las letras siguen el camino de la "H" si va arriba, abajo, y en todas las direcciones.
Mi código (no incluye otros métodos):
Código C#:
Ver original
namespace Viborita { public partial class Form1 : Form { string nombre; int Ancho; int Alto; //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) nombre = Microsoft.VisualBasic.Interaction.InputBox("Escribe tu nombre", "Bienvenido", ""); while (nombre == "") { Microsoft.VisualBasic.Interaction.MsgBox("Ingresa un nombre por favor."); nombre = Microsoft.VisualBasic.Interaction.InputBox("Escribe tu nombre", "Bienvenido", ""); lbNombre.Text = nombre; } lbNombre.Text = nombre; //Empezar el juego EmpezarJuego(); } public 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() { int PosicionXmax = pbArea.Size.Width / Config.Ancho; int PosicionYmax = pbArea.Size.Height / Config.Alto; 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; nombre = Microsoft.VisualBasic.Interaction.InputBox("Escribe tu nombre", "Bienvenido", "" + nom + ""); while (nombre == "") { Microsoft.VisualBasic.Interaction.MsgBox("Ingresa un nombre por favor."); nombre = Microsoft.VisualBasic.Interaction.InputBox("Escribe tu nombre", "Bienvenido", "" + nom + ""); lbNombre.Text = nombre; nom = nombre; } 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 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 Ancho = Viborita[i].X * Config.Ancho; Alto = Viborita[i].Y * Config.Alto; foreach (char c in nombre) { area.DrawString(c.ToString(), new Font(FontFamily.GenericSansSerif, 15, FontStyle.Regular), new SolidBrush(Color.Black), Ancho, Alto); Ancho += 14; } //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; } } } public 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; } } }
En la parte de " private void pbArea_Paint" es donde creo a la víbora de letras, específicamente en foreach(char c in nombre), muchas gracias por leer, espero que alguien me brinde su ayuda.