Uncategorized

Recreando el juego del Ping Pong con Windows Forms(VB y C#)


Vale, pues como recordarán los asistentes a la sesión del sábado 19, hicimos un juego a base de Windows Forms, por si alguien quiere replicarlo, aquí les dejo lo que hicimos:

1.- Se crea un proyecto tipo Windows Forms, y se agregan 2 botones, un radiobutton y un timer, a continuación, se procede a poner en blanco las propiedades “Text” de los botones y del radiobutton. Se ajusta la propiedad de anchor para los botones, para el botón 1 que el anchor sea solo a la izquierda, y para el botón derecho, solo a la derecha. Se marca la propiedad “Checked” del RadioButton en True. Asignamos el valor 20, para la propiedad “Interval” del Timer. Finalmente se ajustan los elementos visualmente para dar la apariencia del juego  :

Pingpong1

Ahora, falta crear la funcionalidad del game, esto se hace con el siguiente código:

Public Class Form1
    ‘Se definen las coordenadas
    Private dx As Integer = 1, dy As Integer = 1

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        RadioButton1.Left += dx
        RadioButton1.Top += dy
        ‘Se hacen las respectivas comparaciones para checar donde se encuentra la pelota, así se determina hacia donde tiene que ir la pelota
        dx = IIf(RadioButton1.Location.X >= Me.ClientSize.Width – RadioButton1.Width, -1, dx)
        dx = IIf(RadioButton1.Location.X = 0, 1, dx)
        dy = IIf(RadioButton1.Location.Y >= Me.ClientSize.Height – RadioButton1.Height, -1, dy)
        dy = IIf(RadioButton1.Location.Y = 0, 1, dy)
    End Sub

    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
        ‘Se hace la comparación de las teclas presionadas, si es Q, el botón 1 irá para arriba, si es Z, para abajo
        Button1.Top -= IIf(Char.ToUpper(e.KeyChar) = “Q”, 5, 0)
        ‘Esta expressión iif, equivale a:
        ‘If (Char.ToUpper(e.KeyChar)) = “Q” Then
        ‘    Button1.Top = 5
        ‘Else
        ‘    Button1.Top = 0
        ‘End If
        ‘Lo mismo ocurre con todas las demás expresiones
        Button1.Top += IIf(Char.ToUpper(e.KeyChar) = “Z”, 5, 0)
    End Sub

    Private Sub Form1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseMove
        ‘Se asigna el valor de las coordenadas del mouse al alto del botón
        Button2.Top = e.Y
    End Sub

    Private Sub Form1_MouseUp(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseUp
        ‘Se activa timer cuando el botón del mouse izquierdo es presionado
        Timer1.Enabled = e.Button = Windows.Forms.MouseButtons.Left
    End Sub
End Class

Vale, pues ese es el código, si quieren aumentar en dado momento el grado de dificultad, deben de aumentar el valor de interval, para que la pelotita vaya mas rápido.

Ahora bien, debe considerarse que aún no se detectan las colisiones, así que eso os queda de tarea para que practiquéis un poco. Espero que les haya gustado, hasta la próxima, y cualquier cosa no duden en escribir.

El proyecto completo lo encuentran aquí:

Descargar

Salu2

Héctor Pérez

Recetas
Xamarin.Forms – Personalizando un NavigationPage
  • Cheguillen

    CheguillenCheguillen

    Author Reply

    Bueno excelente, me gusta tu blog, la unica observacion que tengo o mas bien dificultad es que el codigo siguiente no funciona, espero que puedas solucionarlo, gracias.

    Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
    ‘Se hace la comparación de las teclas presionadas, si es Q, el botón 1 irá para arriba, si es Z, para abajo
    Button1.Top -= IIf(Char.ToUpper(e.KeyChar) = “Q”, 5, 0)
    Button1.Top += IIf(Char.ToUpper(e.KeyChar) = “Z”, 5, 0)
    End Sub


  • hectorperez

    Hey hola cheguillen,

    grcias por el comentario, ya lo he checado, y tienes razón, eso sucede porque ha faltado cambiar una propiedad en la Form, la cual es “KeyPreview”, esta se tiene que cambiar a true para que funcione, ya lo he corregido ya demás he agregado la versión para C#

    🙂

    Salu2


  • hans oliver

    megustaria conseguir tu version pero para c sharp por favor y gracias


  • hectorperez

    Hola hans, en la descarga puedes encontrar ambas versiones.
    Salu2!


  • Pacer27

    Pacer27Pacer27

    Author Reply

    que tendria que hacer para que el boton no sobrepasara la forma, es decir que tope en la orilla de mi juego ??


    • hectorperez

      Eso sí lo hace, lo que no hace, es detectar la colisión, pero es algo faciísimo, haber si lo publico uno de estos días.

      Salu2


  • Roger

    RogerRoger

    Author Reply

    Descargue el juego y me pareció muy interesante gracias ^^

    Si me pudras guiar o facilitarme tutoriales realmente basicos te lo agradecería
    hasta ahora estoy aprendiendo


  • oscar

    oscaroscar

    Author Reply

    hola pero el programa en si funciona?? por que si levanta pero no veo ninguna accion!!


    • hectorperez

      En esta parte sólo se comprueba que el radiobutton no salga del formulario, pronto daré una explicación para detectar colisiones, salu2 😉


  • Yamileth Mujica

    Hola que tal me parecen muy interesantes tus publicaciones de echo logre terminar de programar el ping pong en c sharp gracias a las explicaciones… quisiera conocer mas del juego space wars que creaste le di clic al link q colocaste y descargue.. pero me pide clave 🙁 me puedes ayudar


    • hectorperez

      Claro que sí, el pass del juego es hotc@kes ;), espero que te sirva.


  • Cesar :)

    Cesar :)Cesar :)

    Author Reply

    Bro.. no si podria poner para que detecte la colision recien estoy aprendiendo y quisiera saber como se hace?
    te agradeceria mucho tu ayuda 🙂


    • hectorperez

      Claro que sí, en cuanto pueda haré un pequeño post sobre ello, vale? =)


  • Danny

    DannyDanny

    Author Reply

    Hola interesante post y grax por las explicaiones pero el juego de spacewars meparece muy interesante pero me pide Pass el y el pass quediste anterior mente no es correcto. podrias poner un pass que sirva de antemano graxias……..


  • Daniela Rios

    Bro… el proyecto de Ping Pong me sirvio de mucha ayuda… Y el proyecto de Space wars quisiera verlo pero la clave no me funciona no se si podrias postear otra clave. o el mismo proyecto sin clave de ante mano grax…..