1

我希望能够使用 haskell 和光泽度绘制类似棋盘的东西。

用任何其他语言我都可以做类似的事情

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

就是这样,但我是haskell的新手,我不知道如何做到这一点。我正在使用 Gloss,我可以手动绘制东西,但我希望能够在程序上创建它们,而不是 1 比 1,直到我绘制 100 个正方形。

4

2 回答 2

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
于 2017-02-18T13:27:15.717 回答
3

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

drawBoard :: Int -> Int -> IO ()
drawBoard w h = sequence_ [drawSquare radius i j | i <- [0 .. w], j <- [0 .. h]]
于 2017-02-18T13:30:13.307 回答