Pascal 中一名玩家的乒乓球游戏

问题描述 投票:0回答:1

所以在过去的 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.

好吧,我尝试改变循环中的顺序,做了两个循环,将球运动和球拍运动放在一起按键,等等。没有任何帮助。另外,我知道球和球拍的碰撞问题还没有解决,那是因为我不想更进一步,直到这成功为止。

pascal cycle pong
1个回答
0
投票
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;
© www.soinside.com 2019 - 2024. All rights reserved.