NCurses连续更新moveCursor中的x和y坐标

时间:2019-04-06 15:35:50

标签: haskell ncurses

我想用类似蛇的机械手制作某种游戏,在其中您可以使用箭头键更改蛇的坐标。但是由于变量的重新分配并不是haskell的事情,所以我不确定如何执行此操作。这是我的代码:

import Control.Monad
import UI.NCurses

main :: IO ()
main = runCurses $ do
    w <- defaultWindow
    forever $ do
        e <- getEvent w Nothing
        updateWindow w $ do
            moveCursor 0 0
            drawString (show e)
        render

我希望它打印按下的键(drawString (show e),然后将光标更改为上一个x + 1,上一个y + 1,然后绘制下一个按下的键,然后更改光标,依此类推。

您如何在NCurses中做到这一点?如果可以重新分配,那将很简单,例如

loop forever:
moveCursor x y
print
x = x+1
y = y+1

但是重新分配不起作用,那我该怎么办?

1 个答案:

答案 0 :(得分:5)

诅咒,ncurse和递归:

loop w x y = do
    e <- getEvent w Nothing
    updateWindow w $ do
        moveCursor x y
        drawString (show e)
    render
    loop w (x+1) (y+1)

main = runCurses $ do
    w <- defaultWindow
    loop w 0 0