C/Visual C - juego del ping-pong

 
Vista:

juego del ping-pong

Publicado por albasti (9 intervenciones) el 07/10/2007 10:43:47
wenas a todos, estoy intentando emular el famoso juego para ordenador del ping-pong,si ese de las 2 barras y una pelota, pero me han surgido unos cuantos problemillas:

1º) No puedo mover las 2 barras a la vez.
2º) Se mueven muy despacio.
3º) El codigo ASCII de las flechas no me lo acepta y le tengo que poner letras para darle
movimiento.

Aquí os dejo el codigo del programa, en borland c++ 5.01:

#include <graphics.h>
#include <conio.h>
#include <stdio.h>

int main()
{
int driver=DETECT;
int modo,x=0,y=0;
initgraph(&driver,&modo,"C:\\BC5\\BGI");
setfillstyle(1,7);
do{
getch();
switch(getch())
{
case 'w':
x=x-1;
break;
case 's':
x=x+1;
break;
case 'o':
y=y-1;
break;
case 'l':
y=y+1;
break;
}
cleardevice();
bar(20,x,40,x+100);
bar(580,y,600,y+100);
}
while(getch()!='q');
closegraph();
return 0;
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:juego del ping-pong

Publicado por nayumi (53 intervenciones) el 08/10/2007 15:46:14
Para empezar estás leyendo tres veces el teclado, una despues del do, otra en el switch y otra en el while.
Guarda el valor del getch en una variable y opera con esa variable. Así, tu juego irá 3 veces más rapido.

Para leer las flechas hazte un programita de prueba. Las flechas y las teclas de funcion envían dos caracteres (no recuerdo los valores por eso te digo que hagas un programa de prueba). Es decir, tendrás que hacer dos getch(), El primer caracter es un caracter de control y el segundo indica la tecla pulsada.

Más cositas.

Tendras que comprobar que no te sales de los límites de la pantalla; por ejemplo que x no valga menos que 0 o más de 640 o 1024, según la resolución.

Está bien usar cleardevice, pero verás que es muy lento y desagradable a la vista que parpadee la pantalla cada vez que se mueven las paletas.

Has metido dentro del bucle principal del programa todo el codigo de procesamiento. Te recomiendo lo saques a una funcion aparte y que desde el bucle principal llames a esta función.

Con ese tipo de bucle, tu programa va hacer algo sólo cuando pulses una tecla. Recuerda que la pelotita se mueve por su cuenta, así que tendrás que hacer en el bucle del juego que se mueva la pelota y comprobar el estado del teclado.

Ale, ya tienes curro suficiente por ahora.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:juego del ping-pong

Publicado por Carlos Master (1 intervención) el 17/01/2008 00:51:33
No estoy de acuerdo en lo que has escrito.

Primero que todo dentro de un bucle do o while si colocas un getch() el pc esperara hasta que ingreses un caracter valido, es decir, no habria animacion de la pelota y tendrias que tener oprimida una tecla constantemente, algo muy absurdo en el juego.

Para arreglar este problema usa la libreria windows.h y usa la funcion:

GetKeyState(int VKey)

que te devuelve el valor de estado de la tecla virtual que necesites. Devuelve 0 o 1 cuando la tecla esta en estado de reposo, -127 y -128 cuando se encuentra presionada.

Usa estos para restar 1 unidad a la posicion de tu raqueta
ejemplo

if (GetKeyState(VK_UP) == -127 || GetKeyState(VK_UP) == -128)
pos_y -= 1;

if (GetKeyState(VK_DOWN) == -127 || GetKeyState(VK_DOWN) == -128)
pos_y++;

Segundo, debes usar el system("cls") cada ves que uses el stream de salida, de lo contrario sera mas complicado borrar cada paso que haces independientemente solo por ahorrarte imprimir unas lineas de mas.

Tercero, sin un API grafico debes trabajar sobre el command prompt, y este tiene unas dimensiones de 80x50

Espero te sirva, salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar