Skip to content

Instantly share code, notes, and snippets.

@Show-vars
Last active October 15, 2015 23:01
Show Gist options
  • Save Show-vars/043e9b333f392b8f462f to your computer and use it in GitHub Desktop.
Save Show-vars/043e9b333f392b8f462f to your computer and use it in GitHub Desktop.
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