2

私は卓球ゲームを書いています。ゲームのロジックについて助けが必要です。私の問題は、ボールがマップの外にあるかどうかを検出するときに問題が発生したことです。これにより、ボールが範囲外になり、スコアがカウントされません。現在、次のように機能します。

stepScore :: State -> State
stepScore s
  | s^.ball.pos.x <= 15 = resetGame $ score.right +~ 1 $ s
  | s^.ball.pos.x >= 585 = resetGame $ score.left +~ 1 $ s
  | otherwise = s

定数の理由は、ゲームのサイズが 600x400 で、ボールの幅が 15 ピクセルで、位置が中心にあるためです。resetGame は次のように機能します。

resetGame :: State -> State
resetGame s = ball.pos.y .~ 200 $ ball.pos.x .~ 300 $ state .~ Pause $ s

しかし、どういうわけか、これは何らかの理由で機能しません。ボールはまだマップから外れており、ゲームは基本的に壊れています。

だから、私の質問は次のとおりです。基本的に、ボールがアウトオブバウンズになったときにゲームがリセットされ、各プレーヤーに意図したとおりにスコアが与えられるように、これをどのように記述すればよいでしょうか? 完全なソース コードはhttp://lpaste.net/91745にあります。上記のコードは 107 ~ 114 行で定義され、118 行で使用されています。

助けていただければ幸いです、ありがとう。

編集: stepScore でさまざまな定数を試しましたが、stepScore が問題で、何らかの理由で機能しません。:(

4

1 に答える 1