- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 Haskell 中实现连接四的游戏。此时它基本上可以正常工作,但我很难将游戏已经结束的事实传递给 IO 递归函数。目前,代码将声明我有“函数游戏循环中的非详尽模式”,并且我不知道在实现胜利状态时如何正确退出。
这里是一些代码片段:
data Action = Move Piece State Col -- do Piece in State
| Start -- returns starting state
data Result = EndOfGame Int -- end of game
| ContinueGame State
deriving (Eq, Show)
type Game = Action -> Result
connectfour :: Game
connectfour Start = ContinueGame ([],[],[],[],[],[],[])
connectfour (Move move state col)
| win move (addPiece move state col) col = EndOfGame move -- player of Piece value move wins
| isTie (addPiece move state col) = EndOfGame 0 -- no moves, tie
| otherwise = ContinueGame (addPiece move state col)
gameLoop (ContinueGame state) player = do
let turn = if player == 1 then 2 else 1
-- Removed code for forum, just prepping values to feed into printboard and printing dialog
putStrLn "Please select a column to enter your piece"
input <- getLine
gameLoop (connectfour (Move turn state (read input :: Int))) turn
TDLR; 我试图返回一个字符串,说明哪个玩家在退出时获胜,但我不知道如何编写一个在游戏循环中检查此情况的条件。
最佳答案
您只需在 gameLoop
中添加 EndOfGame
的情况即可:
gameLoop :: Result -> Int -> IO ()
gameLoop (EndOfGame move) _ = putStrLn ("Game over! Player " ++ show move ++ " won")
gameLoop (ContinueGame state) player = do
{- omitted -}
gameLoop (connectfour (Move turn state (read input :: Int))) turn
“函数 gameloop
中的非详尽模式”警告告诉您 gameLoop
缺少一个案例 - EndOfGame
案例。
另一方面,您可能需要考虑制作一个播放器 ADT:
data Player = One | Two deriving (Show)
otherPlayer :: Player -> Player
otherPlayer One = Two
otherPlayer Two = One
关于haskell - 如何通过检查是否满足获胜条件来退出 Haskell 中的 IO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40966916/
我正在开发一个 CMD 批次。我想在里面做一些数学运算。这个公式:(x+1)100:y 所以批量处理,x = %x%, and y = %y% .我知道如何设置变量。现在,如何批量计算这个? (WIN
我正在使用 Electron 制作桌面应用程序,我制作了自己的最小化最大化和关闭按钮,所有这些按钮都工作正常,但是当您单击最大化并且它已经最大化时,它并没有取消最大化。这是我的代码: const $
目前我在这里面临着危机。 问题是,当我尝试使用 Windows 窗体的默认 WebBrowser 控件打开 G-Mail 时,它说浏览器不支持较新版本的 HTML 即 XHTML。 那么,有人能建议我
我遇到了一个让我发疯的问题。我在一个网站上工作,该网站在与主导航相同的 div 中有一个框。它一直显示到右边(栏的宽度为 100%),我需要它显示在带有主导航的 div 中(宽度 1020px) 我正
我是一名优秀的程序员,十分优秀!