packages feed

foo-1.0: PlayFoo.hs

-- ==================================
-- Module name: PlayFoo
-- Project: Foo
-- Copyright (C) 2007  Bartosz Wójcik
-- Created on: 01.10.2007
-- Last update: 28.11.2007
-- Version: %

{-  This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-}
-- ==================================
module Main where

-- Simply user interface aksing for initial game parameters.

import Court
import Foo

main = do
     player1 <- selectPlayer1
     alg1 <- selectAlgorithm player1
     player2 <- selectPlayer2
     alg2 <- selectAlgorithm player2
     nbrOfGames <- selectNumerOfGames
     court 8 8 (player1,toEnum alg1) (player2,toEnum alg2) nbrOfGames


algDisp :: [String]
algDisp = ["Select playing algorithm"] ++ map (\(a,n) -> (show a ++ " - " ++ show n)) (zip [GoAhead ..] [0..])

algNum :: [String]
algNum = map (\(a,n) -> (show n)) (zip [GoAhead ..] [0..])

enterValue :: [String] -> [String] -> IO String
enterValue possibleValues messages = do
   mapM putStrLn messages
   word <- getLine
   if any (word ==) possibleValues
      then return word
      else enterValue possibleValues messages

selectPlayer1 :: IO Bool
selectPlayer1 = enterValue ["c","h"] ["Enter Player 1","c - computer","h - human"] >>= (\x -> return (x == "c"))
selectPlayer2 :: IO Bool
selectPlayer2 = enterValue ["c","h"] ["Enter Player 2","c - computer","h - human"] >>= (\x -> return (x == "c"))

selectAlgorithm :: Bool -> IO Int
selectAlgorithm True = enterValue algNum algDisp >>= (\x -> return (read x))
selectAlgorithm False = return 0

selectNumerOfGames :: IO Int
selectNumerOfGames = enterValue (map show [1..12]) ["Enter number of games {1,..,12}"] >>= (\x -> return (read x))