나는 haskell에 새로 왔고 Im은 Monopoly 게임을 코딩하려고 노력하고 있습니다. 아래는 매 턴마다 폰을 움직이는 코드입니다. 내 문제는 현재 위치를 올바르게 업데이트하기 위해 두 주사위의 이전 합계를 저장할 수 없다는 것입니다. 그러나 콘솔에서 저장 명령을 사용하면 완벽하게 작동하지만 스크립트에서는 구문 분석 오류가 잘못된 들여 쓰기 또는 일치하지 않는 대괄호가 있다고 말합니다. 또한 게임의 개념에 대한 몇 가지 조언을 환영합니다. 미리 감사드립니다
rollDice1 :: Int
rollDice1 = unsafePerformIO(getStdRandom (randomR (1,6)))
rollDice2 :: Int
rollDice2 = unsafePerformIO(getStdRandom (randomR (1,6)))
move :: Int
move = rollDice1 + rollDice2
let position = move
다음은없이 다음과 같이 할 수있는 방법입니다 unsafePerformIO
.
module Test where
import System.Random
rollDice :: IO Int
rollDice = randomRIO (1,6)
sumOfTwoDices :: IO Int
sumOfTwoDices = do
dice1 <- rollDice
dice2 <- rollDice
return $ dice1+dice2
이것을 ghci에로드 한 다음 재생할 수 있어야합니다.
~/Temp $ ghci test.hs
GHCi, version 7.10.1: http://www.haskell.org/ghc/ :? for help
[1 of 1] Compiling Test ( test.hs, interpreted )
Ok, modules loaded: Test.
*Test> sumOfTwoDices
3
이제 모든 계산이 IO 내부에있는 것을 볼 수 있으므로 그에 따라 반환 유형을 변경해야합니다.
sumOfTwoDices
용도
do
구문IO Int
와 값 dice1 <-
...dice2
Int
값을 추가합니다.dice1 + dice2
IO
에 return
(당신이 같은 언어에서 알고있을 게 아니에요 C / C ++ , 자바 , ...)은 $
그냥 날 쓰기에 게으른되고있다 return (dice1+dice2)
)
이제 당신이 원하는 경우에 당신은 당신의 전체 게임 내부를 쓸 수 있습니다 IO
(그리고 다른 어떤 언어를 사용하여 거의 것) 하지만 당신이 원하지 않는이 - 당신은 당신이 수없이 많이 수행 할 IO
만 할 때 마지막으로 필요로 돌아가 랜덤 오지에 - 그러나 이것은 단지 훨씬이다는 하나의 대답에 넣어 :(
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다