Last active
October 15, 2015 23:01
-
-
Save Show-vars/043e9b333f392b8f462f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
data Suit = Clubs | Diamonds | Hearts | Spades deriving Show | |
data Rank = R6 | R7 | R8 | R9 | R10 | Jack | Queen | King | Ace deriving Show | |
data Card = Card { | |
suit::Suit, | |
rank::Rank | |
} deriving Show | |
data GameState = GameState { | |
activePlayer :: ActivePlayer, | |
dealer :: ActivePlayer, | |
humanDeck :: Deck, | |
computerDeck :: Deck, | |
restDeck :: Deck, | |
humanTricks :: Deck, | |
computerTricks :: Deck, | |
trump :: Suit, | |
playerCard :: [Card] | |
} | |
type Deck = [Card] | |
data ActivePlayer = Human | Computer | |
data WhoIsWinner = Nobody | HumanWin | ComputerWin | |
type Move = Int | |
whoIsWinner::GameState -> WhoIsWinner | |
whoIsWinner = undefined | |
applyMove::GameState -> Move -> GameState | |
applyMove= undefined | |
showGameState::GameState -> String | |
showGameState = undefined | |
calcComputerMove::GameState -> Move | |
calcComputerMove = undefined | |
showCard::Card -> String | |
showCard = undefined | |
shuffle = undefined | |
setup::Deck -> GameState | |
setup deck = | |
let humanDeck = take 3 deck | |
computerDeck = Card Clubs R6 : take 3 (drop 3 deck) | |
restDeck = drop 6 deck | |
in GameState Human Human humanDeck computerDeck restDeck [] [] (suit (head humanDeck)) [] | |
inputMove::GameState -> IO Move | |
inputMove gs = do | |
case (activePlayer gs) of | |
Human -> do | |
putStrLn "" | |
putStrLn (showGameState gs) | |
putStrLn "Wich card you do move?" | |
cardNumberStr <- getLine | |
let cardNumber = read cardNumberStr | |
if cardNumber < 1 || cardNumber > 3 then do | |
putStrLn "Invalid input. Try number from 0 to 3" | |
inputMove gs | |
else | |
return cardNumber | |
Computer -> do | |
let cm = calcComputerMove gs | |
putStrLn ("Computer has move by card: " ++ showCard (head $ computerDeck gs)) | |
return cm | |
gameLoop::GameState -> IO () | |
gameLoop state = do | |
m <- inputMove state | |
let newState = applyMove state m | |
case whoIsWinner newState of | |
Nobody -> do | |
gameLoop newState | |
HumanWin -> do | |
putStrLn "You Win!" | |
ComputerWin -> | |
putStrLn "You Lose :(" | |
main = do | |
putStrLn "Input your name: " | |
name <- getLine | |
let greeting = "Hello, " ++ name | |
putStrLn greeting | |
let rs = undefined | |
let deck = [ Card s r | s<-[Clubs, Diamonds, Hearts, Spades], r<-[ R6, R7, R8, R9, R10, Jack, Queen, King, Ace]] | |
let deck' = shuffle deck rs | |
let initState = setup deck' | |
gameLoop initState | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment