[ Foro de C# ]
Saludos.
Queria saber si me podian ayudar en un juego de ping pong en c# windows from, ya que tome como ejemplos otros codigos y la verdad no me funciona, entonces queria saber si me podian ayudar.
Este es el codigo que tengo.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Ping_Pong
{
public partial class MainForm1 : Form
{
// 1 -> Derecha -1 -> Izquierda
// 1 -> Abajo -1 -> Arriba
private int dx = -1, dy = 1;
// Variables q contiene la ultima tecla pulsada por cierta pala
// para q el rebote se efectue en una o otra direcion
// 'u' (up) -> arriba 'd' (down) -> abajo
private char d1, d2;
public MainForm1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
void reproducirSonido()
{
System.Media.SoundPlayer player = new System.Media.SoundPlayer();
player.SoundLocation = @"C:\WINDOWS\Media\ding.wav";
player.Play();
}
void Timer1Tick(object sender, EventArgs e)
{
// Movemos la "pelota"
pelota.Left += dx;
pelota.Top += dy;
/* Para el movimiento de la pelota
dx = pelota.Location.X >= this.ClientSize.Width ? -1 : dx;
dx = pelota.Location.X == 0 ? 1 : dx;*/
if (pelota.Location.X + 18 >= this.ClientSize.Width)
{
Timer1.Enabled = false;
MessageBox.Show("Gana el jugador 1", "Felicidades");
}
if (pelota.Location.X == 0)
{
Timer1.Enabled = false;
MessageBox.Show("Gana el jugador 2", "Felicidades");
}
// Si choca contra la parte inferior o el menú
dy = pelota.Location.Y + 50 >= this.ClientSize.Width ? -1 : dy;
dy = pelota.Location.Y == 25 ? 1 : dy;
// Si choca contra la pala1
if (pelota.Left == pala1.Left + pala1.Width)
{
reproducirSonido();
if (pelota.Top > pala1.Top && pelota.Top < dx =" 1;" dy =" d1" left ="="> pala2.Top && pelota.Top < dx =" -1;" dy =" d2" a =" arriba," z =" abajo" k =" arriba," m =" abajo" top =" 25;" d1 =" 'u';">= this.ClientSize.Height)
pala1.Top = this.ClientSize.Height - pala1.Height;
d1 = 'd';
break;
case 'K':
//La pala2
pala2.Top -= 10;
if (pala2.Top < top =" 25;" d2 =" 'u';">= this.ClientSize.Height)
pala2.Top = this.ClientSize.Height - pala2.Height;
d2 = 'd';
break;
}
}
private void BtnControles_Click(object sender, EventArgs e)
{
MessageBox.Show ("Pulsar las teclas A y K para subir y las teclas Z y M para bajar las respectivas paletas de losjugadores 1 y 2", "Controles");
}
private void BtnSalir_Click(object sender, EventArgs e)
{
Application.Exit();
}
}
}
Es difícil reproducir un programa de "Windows Forms", porque tu código incluye sólo la parte "lógica", pero no la "parte visual". Por ejemplo, habría que recrear BtnControles y BtnSalir, y no hay detalles sobre qué son "pala1" y "pala2".
¿Que problema es el que estás teniendo?
si tengo la parte visual e incluso ya tengo creado lo necesario... solo que no me dejo pegar una imagen para que vieran como quedaba
Imagino que la tienes. Lo que digo es que incluyas algún detalle más sobre lo que falla, porque es difícil probarlo viendo apenas la mitad del problema.
ok. La pala1 y pala2 son botones que los e utilizado como "raquetas" y la pelota es un radiobotton que la funcion de ella seria chochar con las "raquetas".
me empieza el error desde esta parte:
if (pelota.Left == pala1.Left + pala1.Width)
{
reproducirSonido();
if (pelota.Top > pala1.Top && pelota.Top < dx =" 1;" dy =" d1" left ="="> pala2.Top && pelota.Top < dx =" -1;" dy =" d2" a =" arriba," z =" abajo" k =" arriba," m =" abajo" top =" 25;" d1 =" 'u';">= this.ClientSize.Height)
pala1.Top = this.ClientSize.Height - pala1.Height;
d1 = 'd';
break;
case 'K':
//La pala2
pala2.Top -= 10;
if (pala2.Top < top =" 25;" d2 =" 'u';">= this.ClientSize.Height)
pala2.Top = this.ClientSize.Height - pala2.Height;
d2 = 'd';
break;
No puedo probarlo sin recrear la parte visual, pero no entiendo qué pretendes hacer con ese "if" tan largo y que incluye puntos y coma, asignaciones de valores en incluso órdenes "cas" que no corresponde a ningún "switch".
Si lo has creado tú, tendrás que revisar la lógica; si lo has "copiado y pegado" desde algún sitio, tendrás que comprobar qué has dejado sin incluir.
Yo esperaría una lógica parecida a
if (pelota.Left == pala1.Left + pala1.Width) // Izquierda de pelota con derecha de pala
{
reproducirSonido();
pelota.velocidadX = -pelota.velocidadX; // Rebote horizontal
}
Pero eso tampoco es bueno, porque puede ocurrir que nunca llegue a coincidir exactamente el borde de la pelota con el bode de la raqueta, sino que se solapen un poco. Es más fiable mirar si se solapan los rectángulos que contienen la raqueta y la pelota. Cuando tu fuente al menos compile, te ayudo a mejorar esos detalles.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)