私は Haskell にかなり慣れていないので、を使用するのではなく、キープレスを検出する簡単な方法を探していgetLine
ます。
誰かがライブラリ、またはこれを行うためのトリックを知っていれば、それは素晴らしいことです!
そして、これを尋ねるのに適した場所があれば、そこに案内してください。よろしくお願いします。
私は Haskell にかなり慣れていないので、を使用するのではなく、キープレスを検出する簡単な方法を探していgetLine
ます。
誰かがライブラリ、またはこれを行うためのトリックを知っていれば、それは素晴らしいことです!
そして、これを尋ねるのに適した場所があれば、そこに案内してください。よろしくお願いします。
ブロックしたくない場合は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
を返します。Just
Nothing
import System.IO
main :: IO ()
main = do
hSetBuffering stdin NoBuffering
x <- getChar
putStrLn ("You pressed: " ++ [x])
これがいつ動作することが保証されるかはわかりません。端末を「raw」モードにするのは、システムに依存するプロセスです。しかし、Linux上のGHC 6.12.1で動作します。