0
我正在嘗試在Haskell中製作遊戲。現在,我正在研究敵方碰撞:即如果敵人與玩家發生衝突,則得分會重置爲0,敵人就會死亡。但是,我只是不能完全工作,如何。更改遞歸函數中的變量
我已經考慮過一個do
塊,但這是不正確的(我不想返回IO)。我找不到任何點我在正確的方向,使我懷疑,如果它甚至有可能...
的(那種醜陋的)的代碼我是這樣的:
newEnemies = updateEnemies enemies
updateEnemies :: [Point] -> [Point]
updateEnemies [] = []
updateEnemies (x:xs) | hitPlayer (nextLocation x) = -- TODO: Reset multipliers
updateEnemies xs
| otherwise = nextLocation x : updateEnemies xs
where
hitPlayer :: Point -> Bool
hitPlayer (x, y) | abs (fst newPosition - x) < 10 && abs (snd newPosition - y) < 10
= True
| otherwise = False
nextLocation loc = (loc + ((dirToPlayer loc) * (100, 100) * (timeStep, timeStep)))
dirToPlayer loc = normalizeV (playerPosition - loc)
你們中的一個人能否指出我的方向是正確的,還是我習慣了命令式語言?
謝謝!
如果你的功能沒有返回分數,你如何期望它重置分數?如果你想重構那麼我建議你使用一個狀態monad。相反,如果你想從你當前的代碼中增加進度,那麼考慮做'updateEnemies :: Score - > [Point] - >(Score,[Point])''。在命中的情況下,你返回'(0,updateEnemies xs)'。 –
那麼,我正在嘗試做什麼不起作用?我很害怕。無論如何,我會嘗試一些其他的東西! – AwesomeUnicorn