Advertisement
Guest User

Lukas Bloznelis uzduotis nr.3 FInal

a guest
Jan 16th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 4.92 KB | None | 0 0
  1. open System
  2.  
  3. type Suit =
  4.         | Hearts  
  5.         | Diamonds
  6.         | Clubs    
  7.         | Spades  
  8.  
  9. type Rank =
  10.         | Two      | Three  | Four     | Five  
  11.         | Six      | Seven  | Eight  
  12.         | Nine     | Ten    | Jack
  13.         | Queen    | King   | Ace  
  14.  
  15. type Card       = Card      of (Rank*Suit)
  16. type CardPile   = CardPile  of Card list
  17. type Trump      = Trump     of Suit
  18.  
  19. let  newDeck =  [ (Rank.Two, Suit.Spades); (Rank.Three, Suit.Spades); (Rank.Four, Suit.Spades);  (Rank.Five, Suit.Spades);
  20.                  (Rank.Six, Suit.Spades); (Rank.Seven, Suit.Spades); (Rank.Eight, Suit.Spades); (Rank.Nine, Suit.Spades);
  21.                  (Rank.Ten, Suit.Spades); (Rank.Jack, Suit.Spades); (Rank.Queen, Suit.Spades); (Rank.King, Suit.Spades);
  22.                  (Rank.Ace, Suit.Spades);
  23.  
  24.                  (Rank.Two, Suit.Hearts); (Rank.Three, Suit.Hearts); (Rank.Four, Suit.Hearts); (Rank.Five, Suit.Hearts);
  25.                  (Rank.Six, Suit.Hearts); (Rank.Seven, Suit.Hearts); (Rank.Eight, Suit.Hearts); (Rank.Nine, Suit.Hearts);
  26.                  (Rank.Ten, Suit.Hearts); (Rank.Jack, Suit.Hearts); (Rank.Queen, Suit.Hearts); (Rank.King, Suit.Hearts);
  27.                  (Rank.Ace, Suit.Hearts);
  28.  
  29.                  (Rank.Two, Suit.Clubs); (Rank.Three, Suit.Clubs); (Rank.Four, Suit.Clubs); (Rank.Five, Suit.Clubs);
  30.                  (Rank.Six, Suit.Clubs); (Rank.Seven, Suit.Clubs); (Rank.Eight, Suit.Clubs); (Rank.Nine, Suit.Clubs);
  31.                  (Rank.Ten, Suit.Clubs); (Rank.Jack, Suit.Clubs); (Rank.Queen, Suit.Clubs); (Rank.King, Suit.Clubs);
  32.                  (Rank.Ace, Suit.Clubs);
  33.  
  34.                  (Rank.Two, Suit.Spades); (Rank.Three, Suit.Spades); (Rank.Four, Suit.Spades); (Rank.Five, Suit.Spades);
  35.                  (Rank.Six, Suit.Spades); (Rank.Seven, Suit.Spades); (Rank.Eight, Suit.Spades); (Rank.Nine, Suit.Spades);
  36.                  (Rank.Ten, Suit.Spades); (Rank.Jack, Suit.Spades); (Rank.Queen, Suit.Spades); (Rank.King, Suit.Spades);
  37.                  (Rank.Ace, Suit.Spades);
  38.                ]
  39.  
  40. let shuffle deck =
  41.     let random = new System.Random()
  42.     deck |> List.sortBy (fun card -> random.Next())
  43.  
  44. let findRandomItem lst (rng : Random)  =
  45.     List.nth lst (rng.Next(List.length lst))
  46.  
  47. let CreateDeck =
  48.     CardPile (shuffle [for i in 0 .. newDeck.Length-1 -> Card (newDeck.Item(i))] )
  49.  
  50. let SelectTrump =
  51.     let random = new Random()
  52.     let list = [Suit.Hearts;Suit.Clubs;Suit.Diamonds;Suit.Spades]
  53.     Trump (findRandomItem list random)
  54.  
  55. let everyNth n seq =
  56.     seq |> List.mapi (fun i el -> el, i)              
  57.         |> List.filter (fun (el, i) -> i % n = n - 1)
  58.         |> List.map fst    
  59.  
  60. let DealCardsForPlayer1 (CardPile mainDeck) =
  61.     CardPile (everyNth 2 mainDeck)
  62.  
  63. let DealCardsForPlayer2 (CardPile mainDeck) =
  64.     let list1 = (everyNth 2 mainDeck.Tail)
  65.     CardPile (mainDeck.Item(0)::list1)
  66.  
  67. let HigherCard (Card p1) (Card p2) =
  68.     if p1>p2 then
  69.         true,false      //P1 WINS
  70.     elif p2 > p1 then
  71.         false,true      //P2 WINS
  72.     else
  73.         false,false     //DRAW
  74.  
  75. let Won (Card p1) (Card p2) (Trump trump) =
  76.     let (p1Rank,p1Suit) = p1
  77.     let (p2Rank,p2Suit) = p2
  78.  
  79.     if p1Suit.Equals(trump) then
  80.         if p2Suit.Equals(trump) then
  81.             HigherCard (Card p1) (Card p2)  
  82.         else
  83.             true,false
  84.     elif p2Suit.Equals(trump) then
  85.         false,true
  86.     else
  87.         HigherCard (Card p1) (Card p2)
  88.  
  89. let Fight (CardPile p1) (CardPile p2) (trump:Trump) =
  90.  
  91.     let (p1Wins,p2Wins) = Won p1.Head p2.Head trump
  92.        
  93.     if   p1Wins then   2,0    
  94.     elif p2Wins then   0,2
  95.     else               1,1
  96.  
  97. let PrintScore (score:int*int) =
  98.     let (a,b) = score
  99.     printfn "Player1 score : %A" a
  100.     printfn "Player2 score : %A" b
  101.     if a>b then
  102.             printfn "PLAYER1 WINS"
  103.         elif a<b  then
  104.             printfn "PLAYER2 WINS"
  105.         else
  106.             printfn "GAME DRAW"
  107.  
  108. let rec PlayGame (CardPile p1) (CardPile p2) (Trump trump) mainScore =
  109.     if p1.Length.Equals(0) then
  110.         PrintScore mainScore
  111.     else
  112.         let (Player1Score,Player2Score) = Fight (CardPile p1) (CardPile p2) (Trump trump)
  113.         let (a,b) = mainScore
  114.         let score  = (a + Player1Score, b + Player2Score)
  115.         PlayGame (CardPile p1.Tail) (CardPile p2.Tail) (Trump trump) score
  116.  
  117. let getTrumpName (Trump trump) =
  118.     trump
  119.  
  120. let StartGame() =
  121.     printfn "STARTING GAME"
  122.     let deck =  CreateDeck
  123.     printfn "Deck has been created and shuffled"
  124.     let trump = SelectTrump
  125.     printfn "Trump has been selected : %A" (getTrumpName trump)
  126.     let p1deck =  deck|>DealCardsForPlayer1
  127.     printfn "Player 1 deck has been created"  
  128.     let p2deck =  deck|>DealCardsForPlayer2
  129.     printfn "Player 2 deck has been created"  
  130.     printfn "PLAYING GAME"
  131.     let  StartingScore   = (0,0)
  132.     PlayGame p1deck p2deck trump StartingScore
  133.     printfn "GAME OVER"
  134. StartGame()
  135.  
  136. Console.ReadKey() |> ignore
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement