module Nim where import Random (randomRIO) wins :: Int-> Maybe Int wins n = if m == 0 then Nothing else Just m where m = (n- 1) `mod` 4 play :: Int-> IO () play n = do putStrLn ("Der Haufen enthält "++ show n ++ " Hölzchen.") if n== 1 then putStrLn "Ich habe gewonnen!" else do m<- getInput case wins (n-m) of Nothing -> putStrLn "Ich gebe auf." Just l -> do putStrLn ("Ich nehme " ++ show l) play (n-(m+l)) getInput' :: IO Int getInput' = do putStr "Wieviele nehmen Sie? " n <- do s<- getLine return (read s) if n<= 0 || n>3 then do putStrLn "Ungültige Eingabe!" getInput' else return n getInput :: IO Int getInput = do putStr "Wieviele nehmen Sie? " n <- catch (do s<- getLine readIO s) (\_ -> do putStrLn "Eingabefehler!" getInput) if n<= 0 || n>3 then do putStrLn "Ungültige Eingabe!" getInput else return n main :: IO () main = do putStrLn "\nWillkommen bei Nim!\n" n <- randomRIO(5,49) play n