[ Foro de Pascal ]

ayuda con el juego de ping pong! no se como seguir

29-Mar-2018 01:47
Invitado (yearim ortega)
1 Respuestas

hola, tengo un gran problema con programar el juego de ping-pong, es bastante basico , solo necesito hacer las barras y lograr que se muevan independiente y verticalente por que ya tengo la pelota.El problema es que no se como hacerlo, el profesor no nos explico nada y solo nos puso a hacerlo :c, pasar mi materia depende de este programa,ojala puedan ayudarme.
MUCHAS GRACIAS POR SU TIEMPO! C:


program ping;
uses CRT;
var x,y,i,xi,yi:integer;

Const
KEY_UP = 18432;
KEY_DOWN = 20480;
KEY_EXIT = 27;
CHAR_ON = ('[');

Var
Key :Word;
b, a :Byte;
procedure pong;
Function wReadKey :Word;
Var
Key :Word;
Begin
Key := Ord(ReadKey);
If (Key=0) then Key := Ord(ReadKey)*256;
wReadKey := Key;
End;

Begin
a := 1;
b := 1;
ClrScr;
Repeat
GotoXY(a, b);
Write(CHAR_ON);
Repeat
Key := wReadKey;
Until (Key=KEY_UP) or (Key=KEY_DOWN) or (Key=KEY_EXIT);
GotoXY(a,b);
Write(' ');
Case Key of
KEY_UP : Dec(b);
KEY_DOWN : Inc(b);
End; 
If (a=0) then a:= 80;
If (a=81) then a := 1;
If (b=0) then b := 23;
If (b=24) then b := 1;
Until (Key=KEY_EXIT);
end;
procedure pelota;

begin
x:=1;
y:=1;
xi:=1;
yi:=1;
for i:=1 to 200 do
begin
pong;

begin
gotoxy(x,y);
writeln('*');
delay(100);
gotoxy(x,y);
writeln(' ');
x:=x+xi;
y:=y+yi;
if (y=20) then
begin
yi:= -1;
end;
if y=1 then
begin
yi:=1;
end;
if (x=80) then
begin
xi:=-1;
end;
if (x=1) then
begin
xi:=1;
end;
end;


end;
end;
begin
pelota;
end.


09-Apr-2018 12:31
Nacho Cabanes (+83)

Para mover la barra a la vez, puedes comprobar si hay una tecla pulsada (keypressed) y, en ese caso, leer la tecla (readkey) y, si es una de las teclas adecuadas, cambiar su coordenada X.

Esto se debe hacer de forma repetitiva, de modo que no habría un "for" en tu procedimiento "pelota", sino que ambas cosas se controlarían desde el cuerpo del programa:


begin
    repeat
        moverPelota;
        if keypressed then moverBarra;
    until terminado;
end.


       






(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.)