2012-06-01 53 views
2

我是Pascal的初學者,我正在開發一個小型的WIngraph遊戲。在遊戲的某個時刻,角色(這是一個塊)必須放下(該塊獲得其原始高度的一半)。我想在按住箭頭鍵的同時發生這種情況,但我實現它的方式實際上並不奏效。我的另一個問題是我不知道如何同時讀取按鍵(例如,在右側跳躍時需要這樣做)。Pascal中的鍵盤管理

那怎麼我試着寫它:

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; 

我預期的代碼,而鍵被按下一切正常,一旦它的發佈,該塊應該得到它的正常高度,然後程序會基於主循環運行,但在此過程之外。

一切工作,除了鑰匙持有的東西。

+0

請發佈您的**實際**代碼。如果沒有它,我們不能分辨出你做錯了什麼。 (想想這樣 - 告訴你的汽車修理工,「我的車發出有趣的聲音,這是一輛紅色的汽車,看起來就像停在那兒的那輛車,我的車出了什麼問題?」你會期待答案嗎?希望不會)。我們無法從這裏讀取您的代碼(或您的想法);我們只有你提供給我們在這裏工作的東西。請編輯您的問題併發布您的實際代碼;在發佈時通過按照需要縮進每行四(或更多)個空格來對其進行格式化,以便它可讀,並在您輸入的地方預覽。謝謝。 –

+0

這是代碼:http://pastebin.com/AqkD90kL – Thiago

+0

幾乎在那裏。 :-)首先,你的代碼需要在這裏**,而不是在pastebin。如果由於某種原因pastebin被關閉或鏈接消失,你的問題變得毫無意義。其次,你發佈**的方式**太多的代碼;你只需要在這裏發佈關於處理密鑰的部分。 [StackOverflow不會讀取所有](http://meta.stackexchange.com/a/129787/172661) - 將它減少到給你帶來麻煩的部分,並將它發佈到你的問題。我們想幫助你,但是這裏有很多問題,你需要通過提出很好的問題來幫助我們。謝謝。 :-) –

回答

3

它可能無法正常工作,因爲在每個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. 
4

如果使用FreePascal的/拉撒路:

  • 不wingraph使用單位CRT在一起,但使用wincrt。 Wingraph掛鉤到win32 GUI事件中,而(win32)crt通過控制檯API調用掛鉤到作品中。 Wincrt鉤入GUI(消息泵)事件。
  • 最好不要使用* CRT所有,但更好地利用單位鍵盤
  • 已在Free Pascal中的實例看,它包含了幾個小遊戲(一俄羅斯方塊和samegame實現),其可任選也適用於wingraph和單位鍵盤。甚至還有一些單位可以在鍵盤和僚機上進行高分和簡單的編排程序。

下一次,請提供關於您使用的開發平臺(和版本)的更準確的詳細信息。