Welcome to the new platform of Programmers Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use it's exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.
here I'm writing a NIM game have and I need to change one small thing to make it work however not sure how...
I need to change the second player to act like a computer so it moves automatically...
can I have some help please?
main = play [1,2,3,4,5] ["Player 1","Player 2"]
play :: [Int] -> [String] -> IO ()
play board players = do
(newBoard,winner) <- takeTurns board players
if null winner
then play newBoard players
else do putStrLn (winner ++ " won!")
takeTurns :: [Int] -> [String] -> IO ([Int],String)
takeTurns board  = return (board,)
takeTurns board (player:players) = do
newBoard <- takeTurn board player
if sum newBoard == 0
then return (newBoard,player)
else takeTurns newBoard players
takeTurn :: [Int] -> String -> IO [Int]
takeTurn board player = do
" ++ player ++ "'s Turn")
row <- getRow board
count <- getInt "How many stars? " 1 (board!!row)
return $ take row board ++ [board!!row - count] ++ drop (row+1) board
displayBoard :: [Int] -> IO ()
displayBoard  = return ()
displayBoard board = do
putStrLn $ show (length board) ++ " : " ++ replicate (last board) '*'
displayBoard (init board)
getRow :: [Int] -> IO Int
getRow board = do
row <- getInt "Which row? " 1 (length board)
if board!!(row-1) == 0
then do putStrLn "That row is empty!"
else return (row-1)
getInt msg min max = do
input <- getLine
let parsed = reads input :: [(Int,String)]
if null parsed
then badNumber "That's not a number!"
else testNumber (fst (head parsed))
badNumber error = do putStrLn error
getInt msg min max
| number < min = badNumber "That number is too small."
| number > max = badNumber "That number is too big."
| otherwise = do return number