Keyboard Pascal中的键盘管理

Keyboard Pascal中的键盘管理,keyboard,pascal,freepascal,Keyboard,Pascal,Freepascal,我是帕斯卡的初学者,我正在做一个小的翼型游戏。在游戏中的某个时候,角色(一个方块)必须放下(方块的高度只有原来的一半)。我希望在按住向下箭头键时发生这种情况,但我实现它的方式实际上不起作用。我的另一个问题是,我不知道如何同时读取键(例如,在向右奔跑和跳跃时需要读取键) 我就是这样写的: procedure joystick; begin key:=readkey; case key of #0:begin key:=readkey; case key of

我是帕斯卡的初学者,我正在做一个小的翼型游戏。在游戏中的某个时候,角色(一个方块)必须放下(方块的高度只有原来的一半)。我希望在按住向下箭头键时发生这种情况,但我实现它的方式实际上不起作用。我的另一个问题是,我不知道如何同时读取键(例如,在向右奔跑和跳跃时需要读取键)

我就是这样写的:

procedure joystick;
begin
  key:=readkey;
  case key of 
  #0:begin  
  key:=readkey;  
    case key of  
    #80:with block do  
       begin  
        y1:=y2-100; //make it get half of its height  
        repeat  
         moveblock; //these are the drawing routines.   
         moveball;  //they are in another procedure, which is the 'main loop'   
         collisioncheck;  
         draw;      //i expected the code to run inside here with the block's  
         alternateball; //height changed, and as soon as the arrow key gets released  
         updateGraph(updateNow);  //it should go back to the 'main loop'  
         killball;  
         delay(10);  
        until keypressed = false; //<--thats what i think is not working  
        y1:=y2-200; //this would make the block get normal again  
       end;  
     end;  
   end;      
 end;  
程序;
开始
key:=readkey;
案例关键
#0:开始
key:=readkey;
案例关键
#80:用block do
开始
y1:=y2-100//让它有一半的高度
重复
移动块//这些是绘图例程。
移动球//它们在另一个过程中,即“主循环”
碰撞检查;
画//我希望代码在这里运行,并带有块的
交替球//高度已更改,一旦松开箭头键
updateGraph(updateNow)//它应该回到“主回路”
杀手球;
延迟(10);

直到按下键=false// 它不起作用,因为每次按下
键()
后,您都应该有一个
readkey()
。函数
keypressed()
返回true,直到再次调用
readkey()

演示:

使用crt;
var c:char;
i:长型;
开始
而c#27会
开始
不按按键()时,请执行以下操作
开始
clrsc;
writeln(“不按任何内容”);
延迟(500);
结束;
i:=0;
当按下键()时
开始
clrsc;
c:=readkey();
如果(c=#0),那么
c:=readkey();
公司(一);
书面(c),,i);
延迟(300);
结束;
结束
结束。

如果您使用freepascal/Lazarus:

  • 不要将机组crt与wingraph一起使用,但应使用wincrt。Wingraph钩住win32 GUI事件,而(win32)crt通过控制台API调用钩住works。Wincrt钩住GUI(消息泵)事件
  • 最好不要使用*crt,但最好使用单元键盘
  • 看看免费的Pascal示例,它包含几个小游戏(一个俄罗斯方块和一个samegame实现),可以选择使用wingraph和单位键盘。甚至在键盘和wingraph上还有一些高分单元和一个简单的线条编辑程序

下次,请提供有关您使用的开发平台(和版本)的更精确的详细信息。

请发布您的实际代码。没有它我们就看不出你做错了什么。(这样想吧——告诉你的汽车修理工,“我的车发出奇怪的声音。它是一辆红色的车,看起来像停在那边的那辆。我的车怎么了?”。你想得到答案吗?我希望不会。)我们不能从这里读你的代码(或你的想法);我们这里只有你提供给我们的东西。请编辑您的问题并发布您的实际代码;在发布时,根据需要将每行缩进四(或更多)个空格,以使其可读,并在下面的键入位置预览。谢谢。这是密码:快到了。:-)首先,您的代码需要放在这里,而不是放在pastebin。如果由于某种原因pastebin关闭或链接消失,您的问题将变得毫无意义。第二,你发布的代码太多;你只需要在这里发布关于处理钥匙的部分。-把它减少到给你带来麻烦的部分,把它和你的问题一起贴在这里。我们很想帮助你,但是这里有很多问题,你需要通过提出好的问题来帮助我们。谢谢。:-)我又换了一次。很抱歉给您带来不便,如果我又做错了,请告诉我您需要对键盘进行更全面的控制,而不是按
键和
ReadKey
来实现您想要的功能。(Word文档)介绍如何用Pascal制作键盘处理程序可能是一个很好的起点。我猜想一定有很多现成的单元,也有源代码,但我只找到了俄语(有些部分是英语的),在那里你可以下载带有源代码的工作示例(不是所有的都是你需要的!)。
uses crt;
var c:char;
    i:longint;
begin
while c<>#27 do
  begin
  while not keypressed() do
    begin
    clrscr;
    writeln('not pressing anything');
    delay(500);
    end;
  i:=0;
  while keypressed() do
    begin
    clrscr;
    c:=readkey();
    if(c=#0) then
      c:=readkey();
    inc(i);
    writeln(c,' ',i);
    delay(300);
    end;
  end
end.