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.