10

私は Haskell にかなり慣れていないので、を使用するのではなく、キープレスを検出する簡単な方法を探していgetLineます。

誰かがライブラリ、またはこれを行うためのトリックを知っていれば、それは素晴らしいことです!

そして、これを尋ねるのに適した場所があれば、そこに案内してください。よろしくお願いします。

4

2 に答える 2

16

ブロックしたくない場合はhReady、キーがまだ押されているかどうかを検出するために使用できます。これは、プログラムを実行して、ゲームを一時停止することなく、キーが押されたときにそれを取得するゲームに役立ちます。

これに私が使用する便利な関数を次に示します。

ifReadyDo :: Handle -> IO a -> IO (Maybe a)
ifReadyDo hnd x = hReady hnd >>= f
   where f True = x >>= return . Just
         f _    = return Nothing

次のように使用できます。

stdin `ifReadyDo` getChar

キーが押された場合とそうでない場合のMaybeを返します。JustNothing

于 2010-10-09T15:42:37.713 に答える
9
import System.IO

main :: IO ()
main = do
  hSetBuffering stdin NoBuffering
  x <- getChar
  putStrLn ("You pressed: " ++ [x])

これがいつ動作することが保証されるかはわかりません。端末を「raw」モードにするのは、システムに依存するプロセスです。しかし、Linux上のGHC 6.12.1で動作します。

于 2010-10-08T22:47:05.187 に答える