General programming

Moderators: None (Apply to moderate this forum)
Number of threads: 1642
Number of posts: 2791

This Forum Only
Post New Thread
Single Post View       Linear View       Threaded View      f

Report
haskell game Posted by akerman on 16 Dec 2012 at 9:50 AM
Hi,
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?
import System.IO

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!")
              return ()

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
    putStrLn ("\n" ++ player ++ "'s Turn")
    displayBoard board
    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!"
              getRow board
      else return (row-1)

getInt msg min max = do
    putStr msg
    input <- getLine
    let parsed = reads input :: [(Int,String)]
    if null parsed
      then badNumber "That's not a number!"
      else testNumber (fst (head parsed))
    where
        badNumber error = do putStrLn error
                             getInt msg min max
        testNumber number
            | number < min = badNumber "That number is too small."
            | number > max = badNumber "That number is too big."
            | otherwise = do return number

Thread Tree
akerman haskell game on 16 Dec 2012 at 9:50 AM



 

Recent Jobs

Official Programmer's Heaven Blogs
Web Hosting | Browser and Social Games | Gadgets

Popular resources on Programmersheaven.com
Assembly | Basic | C | C# | C++ | Delphi | Flash | Java | JavaScript | Pascal | Perl | PHP | Python | Ruby | Visual Basic
© Copyright 2011 Programmersheaven.com - All rights reserved.
Reproduction in whole or in part, in any form or medium without express written permission is prohibited.
Violators of this policy may be subject to legal action. Please read our Terms Of Use and Privacy Statement for more information.
Operated by CommunityHeaven, a BootstrapLabs company.