2017-02-18 3 views
1

저는 haskell과 광택을 사용하여 체스 보드와 같은 것을 그릴 수 있기를 바랍니다.haskell의 게임 보드에 사각형을 그립니다.

다른 언어에서 나는

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

처럼 뭔가를 할 수 그게 될 것입니다,하지만 난 하스켈에 새로운 오전과 내가 어떻게이 작업을 수행 할 수 있습니다 아무 생각이 없습니다. 나는 광택을 사용하고 수동으로 물건을 그릴 수 있지만 100 개의 사각형을 그릴 때까지 1 씩 1이 아닌 절차 적으로 만들 수 있기를 원합니다.

답변

3

IO 모나드 내부에서 작업하는 경우 동일한 스타일을 사용할 수 있습니다. 예를 들어

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는 위의 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 
+0

오, 난 당신 같은 스타일을 사용할 수 몰랐어요 , 나는 시도 할 것이다. –

+1

@ZloySmiertniy 사실, 나는 Gloss 인터페이스에 대해 확신이 없습니다. 어쩌면이 답변은 완전히 트랙에서 벗어난 것일 수 있습니다. 어쩌면 광택에서 이미지를 목록/트리 형태로 표현해야합니다. – chi

+0

네,이 게시물 http://andrew.gibiansky.com/blog/haskell/haskell-gloss/에서 그림을 만들어야 만하는 것 같습니다. 알아낼 수없는 것은 길이가 긴 보드를 만드는 방법이었습니다. 그림 물감. "[square x y | x <- [0..9], y <- [0..9]] 스타일은 완벽합니다. 나는 지금 당장 그것을 시험해보고있다 –

3

나는 광택 라이브러리에 익숙하지 않은 오전 동안 뭔가를해야

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

나는이 스타일을 사용하여 범위를 정의하고이를 변수에 할당합니다. 광택이 나면 결국 "Picture"를 렌더링에 보내서 결국 다음과 같이 보이게됩니다. squares :: 그림 squares = Pictures [(x y $ rectangle Solid 1 1) | x <- [0,2..9], y <- [0,2..9] 대단히 감사합니다. –

+1

Nitpick : 이것은'IO' 액션 목록에 적용될'sequence_'를 필요로합니다. – duplode

+0

@duplode 물론 편집했습니다. 감사합니다! – SDR

관련 문제