在haskell中为游戏板绘制正方形

时间:2017-02-18 13:17:23

标签: haskell draw gloss

我希望能够使用haskell和gloss来绘制像棋盘这样的东西。

在任何其他语言中我都可以做类似

的事情
for( i=0; i < 10; i++){
   for( j=0; j < 10; j++){
      drawSquare(radius, i, j)
    }
}

就是这样,但我是haskell的新手,我不知道如何做到这一点。我正在使用Gloss,我可以手动绘制内容,但我希望能够逐步创建它们,直到我绘制100个方块为止。

2 个答案:

答案 0 :(得分:3)

如果您在IO monad中工作,则可以使用相同的样式。例如

printSquares :: IO ()
printSquares =
   forM_ [0..9] $ \x ->
      forM_ [0..9] $ \y -> do
         putStrLn "Here's a square!"
         putStrLn ("Square(" ++ show x ++ ", " ++ show y ++ ")")
         -- add here the actual drawing Gloss commands

我不熟悉Gloss来建议实际的绘图命令。

更新:看起来Gloss的界面与上面使用的IO不同。你可能需要像

这样的东西
squares :: Picture
squares = Pictures [ square x y | x<-[0..9], y<-[0..9] ]

square :: Float -> Float -> Picture
square x y = Polygon [(x,y), (x+1,y), (x+1,y+1), (x,y+1) ]
   -- even better: use rectangleWire and then translate
   -- rectangleUpperWire also seems useful

答案 1 :(得分:3)

虽然我不熟悉光泽库,但您可能正在寻找类似于列表理解的内容:

drawBoard :: Int -> Int -> IO ()
drawBoard w h = sequence_ [drawSquare radius i j | i <- [0 .. w], j <- [0 .. h]]