Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows中Haskell控制台游戏的简单游戏循环_Haskell - Fatal编程技术网

Windows中Haskell控制台游戏的简单游戏循环

Windows中Haskell控制台游戏的简单游戏循环,haskell,Haskell,我想在控制台中制作snake并用Haskell编写它 我应该如何定期刷新显示器(通过清除它或只是推送新内容)?我不需要固定的帧率或任何花哨的东西。只是一个简单的循环,每x毫秒执行一次代码 其次,我怎样才能正确地从控制台获取输入,而不阻塞它,也不需要我按enter键 我读过一些解决方案,但它们似乎都不能在windows上正常工作。有一个是Haskeline,我试着用它来编写代码 main = runInputT defaultSettings loop where

我想在控制台中制作snake并用Haskell编写它

我应该如何定期刷新显示器(通过清除它或只是推送新内容)?我不需要固定的帧率或任何花哨的东西。只是一个简单的循环,每x毫秒执行一次代码

其次,我怎样才能正确地从控制台获取输入,而不阻塞它,也不需要我按enter键

我读过一些解决方案,但它们似乎都不能在windows上正常工作。有一个是Haskeline,我试着用它来编写代码

main = 
    runInputT defaultSettings loop
    where
        loop :: InputT IO ()
        loop = do
            gotInput <- hReady stdin
            if gotInput
            then do
                input <- getInputChar ""
                case input of
                    Just chr -> outputStrLn [chr]
                    Nothing -> return ()
            else return ()
main=
RunInputDefaultSettings循环
哪里
循环::输入IO()
循环=do
gotInput返回()
否则返回()

这里的问题是,当我需要一个与Haskeline兼容的IO monad时,hReady stdin会返回一个IO monad。恕我直言,我对Monad非常陌生,对Haskell也非常陌生。

查找liftIO(来自Control.Monad.IO.Class)。然后输入:GotHey!这非常简单。它起作用了。周期循环部分呢?不再返回(),而是再次调用循环。这将建立循环。