lunes, 21 de marzo de 2011

Ejercicio. Diseñar el juego Pong


Crea una nueva aplicación de Windows en Sharp Develop, agrega los controles necesarios para conformar la interfaz y que resulte similar a la que se muestra en la figura y sustituye el código del MainForm por el que se muestra a continuación. En concreto, la pelota se simula con un RadioButton y las palas con dos Buttons sin texto. Habrá un menú sencillo (ToolStrip) desde el que se puede iniciar una nueva partida, mostrar una pequeña ventana de ayuda con las teclas que permiten deslizar las palas y una opción de salida (ToolStripLabels). Asimismo se reproducirá un sonido WAV cada vez que la pelota toque las palas. No olvides vincular cada delegado con el método del código que atenderá cada evento. Por otra parte, se necesita un componente Timer para generar el movimiento de la pelota. NOTA: Para mejorar la corrección y legibilidad del código sustituye la codificación
   1 -> Derecha      -1 -> Izquierda
1 -> Abajo        -1 -> Arriba
'u' (up) -> arriba     'd' (down) -> abajo
por enumerados.
DESCARGA EL CÓDIGO AQUÍ
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;

namespace Pong
{
public  partial class MainForm : 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 MainForm()
{
InitializeComponent();
}

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


// Las opciones del menú
void NuevoToolStripMenuItemClick(object sender, EventArgs e)
{
Timer1.Enabled = true;
pelota.Left = 154;
pelota.Top  = 134;
}

void ControlesToolStripMenuItemClick(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 los
    jugadores 1 y 2", "Controles");
}

void SalirToolStripMenuItemClick(object sender, EventArgs e)
{
Application.Exit();
}
}
}

5 comentarios:

  1. Saludos. Quisiera saber si puedes volver a subir el link para descargar el codigo.
    Gracias de antemano

    ResponderEliminar
  2. buenas, podrías subir el proyecto completo de nuevo? Gracias

    ResponderEliminar
  3. De vez en cuando Dropbox inhabilita el enlace por seguridad. Gracias por avisar. He actualizado el enlace; ya pueden volver a descargarlo.

    ResponderEliminar
  4. Hola amigo estamos en el año 2016 y el link sigue roto, podrias reparar el link, codigo, del juego PONG
    gracias. :)

    ResponderEliminar