2

私はPascalの初心者で、小さなWINgraphゲームに取り組んでいます。ゲームのある時点で、キャラクター(ブロック)は横になる必要があります(ブロックは元の高さの半分になります)。矢印キーを押しながらこれを実行したいのですが、実装方法が実際には機能していません。私が抱えているもう1つの問題は、キーを同時に読み取る方法がわからないことです(たとえば、右に走ってジャンプするときに必要になります)。

それが私がそれを書き込もうとした方法です:

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;  

キーが押されている間はコードが正常に実行され、リリースされるとすぐにブロックは通常の高さになり、プログラムはメインループに基づいて実行されますが、この手順の範囲外です。

キーを保持することを除いて、すべてが機能しています。

4

2 に答える 2

4

keypressed()それぞれの後にあなたが持っているべきなので、それは機能しませんreadkey()。この関数は、再度keypressed()呼び出すまでtrueを返しますreadkey()

デモ:

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.
于 2012-06-01T19:19:05.527 に答える
4

freepascal / Lazarusを使用する場合:

  • wingraphと一緒にunitcrtを使用しないでください。ただし、 wincrtを使用してください。Wingraphはwin32GUIイベントにフックし、(win32)crtはコンソールAPI呼び出しを介して動作します。WincrtはGUI(メッセージポンプ)イベントにフックします。
  • できれば*crtをまったく使用しないでください。ただし、ユニットキーボードを使用することをお勧めします。
  • Free Pascalの例を見てください。これには、オプションでwingraphとユニットキーボードでも動作できるいくつかの小さなゲーム(テトリスと同じゲームの実装)が含まれています。キーボードとウィングラフの上にハイス​​コアと簡単なラインエディット手順のためのいくつかのユニットさえあります。

次回は、使用している開発プラットフォーム(およびバージョン)について、より正確な詳細を提供してください。

于 2012-06-02T10:01:41.030 に答える