所以在过去的 4 天里,我一直在尝试用 pascal 编写一个乒乓球游戏(没有任何教程)。但我一直被这个问题困扰,无法解决。我的桨运动和球运动处于同一周期,但我不知道如何将这两者分开,因为如果我连续多次移动桨,球就会消失,只有在按下按键时才会移动。另外,我只想延迟球,而不是球拍,我不知道如何实现这一点。
uses
SysUtils, crt32;
var
i, j, k, l, m, n, o, paddleY, paddleY2, paddleY3, paddleY4, paddleY5, a, b: integer;
ballX, ballY, ballSpeedX, ballSpeedY : integer;
key : char;
score: integer;
begin
score := 0;
paddleY := 16;
paddleY2 := 17;
paddleY3 := 18;
paddleY4 := 19;
paddleY5 := 20;
ballX := 11;
ballY := 6;
ballSpeedX := 1;
ballSpeedY := 1;
repeat
//score
textcolor(11);
gotoxy(55,4);
write('SCORE: ', score);
//ball movement
textcolor(12);
gotoxy(ballX,ballY);
write(chr($FE));
delay(20);
gotoxy(ballX, ballY);
write(' ');
ballX := ballX + ballSpeedX;
ballY := ballY + ballSpeedY;
if (ballX <= 11) or (ballX >= 110) then ballSpeedX := -ballSpeedX;
if (ballY <=6) or (ballY >= 29) then ballSpeedY := -ballSpeedY;
//paddle movement
textcolor(14);
gotoxy(12,paddleY);
writeln(chr($DB));
gotoxy(12,paddleY2);
writeln(chr($DB));
gotoxy(12,paddleY3);
writeln(chr($DB));
gotoxy(12,paddleY4);
writeln(chr($DB));
gotoxy(12,paddleY5);
writeln(chr($DB));
if keypressed then begin
readkey;
key := readkey;
if (key = 'w') and (paddleY5 >= 11) then begin
paddleY := paddleY - 1;
gotoxy(12,paddleY + 1);
writeln(' ');
paddleY2 := paddleY2 -1;
gotoxy(12,paddleY2 + 1);
writeln(' ');
paddleY3 := paddleY3 -1;
gotoxy(12,paddleY3 + 1);
writeln(' ');
paddleY4 := paddleY4 -1;
gotoxy(12,paddleY4 + 1);
writeln(' ');
paddleY5 := paddleY5 -1;
gotoxy(12,paddleY5 + 1);
writeln(' ');
end;
if (key = 's') and (paddleY <=24) then begin
paddleY := paddleY + 1;
gotoxy(12,paddleY - 1);
writeln(' ');
paddleY2 := paddleY2 + 1;
gotoxy(12,paddleY2 - 1);
writeln(' ');
paddleY3 := paddleY3 + 1;
gotoxy(12,paddleY3 - 1);
writeln(' ');
paddleY4 := paddleY4 + 1;
gotoxy(12,paddleY4 - 1);
writeln(' ');
paddleY5 := paddleY5 + 1;
gotoxy(12,paddleY5 - 1);
writeln(' ');
end;
if key = 'r' then score := 0;
end;
until key = 'c';
end.
好吧,我尝试改变循环中的顺序,做了两个循环,将球运动和球拍运动放在一起按键,等等。没有任何帮助。另外,我知道球和球拍的碰撞问题还没有解决,那是因为我不想更进一步,直到这成功为止。
repeat
//score
textcolor(11);
gotoxy(55,4);
write('SCORE: ', score);
while not keypressed and (u=20) do begin
//ball movement
textcolor(12);
delay(20);
gotoxy(ballX, ballY);
write(' ');
ballX := ballX + ballSpeedX;
ballY := ballY + ballSpeedY;
if (ballX <= 11) or (ballX >= 110) then ballSpeedX := -ballSpeedX;
if (ballY <=6) or (ballY >= 29) then ballSpeedY := -ballSpeedY;
gotoxy(ballX,ballY);
write(chr($FE));
u:=0;
//paddle movement
textcolor(14);
gotoxy(12,paddleY);
writeln(chr($DB));
gotoxy(12,paddleY2);
writeln(chr($DB));
gotoxy(12,paddleY3);
writeln(chr($DB));
gotoxy(12,paddleY4);
writeln(chr($DB));
gotoxy(12,paddleY5);
writeln(chr($DB));
end;
readkey;
key := readkey;
if (key = 'w') and (paddleY5 >= 11) then begin
paddleY := paddleY - 1;
gotoxy(12,paddleY + 1);
writeln(' ');
paddleY2 := paddleY2 -1;
gotoxy(12,paddleY2 + 1);
writeln(' ');
paddleY3 := paddleY3 -1;
gotoxy(12,paddleY3 + 1);
writeln(' ');
paddleY4 := paddleY4 -1;
gotoxy(12,paddleY4 + 1);
writeln(' ');
paddleY5 := paddleY5 -1;
gotoxy(12,paddleY5 + 1);
writeln(' ');
end;
if (key = 's') and (paddleY <=24) then begin
paddleY := paddleY + 1;
gotoxy(12,paddleY - 1);
writeln(' ');
paddleY2 := paddleY2 + 1;
gotoxy(12,paddleY2 - 1);
writeln(' ');
paddleY3 := paddleY3 + 1;
gotoxy(12,paddleY3 - 1);
writeln(' ');
paddleY4 := paddleY4 + 1;
gotoxy(12,paddleY4 - 1);
writeln(' ');
paddleY5 := paddleY5 + 1;
gotoxy(12,paddleY5 - 1);
writeln(' ');
end;
if key = 'r' then score := 0;
delay(0);
u:=u+1;