Advertisement
Guest User

Lukas Bloznelis uzduotis nr.3 FInal

a guest
Jan 16th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
F# 5.02 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 shuffle2 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.     let pile = CardPile (shuffle2 [for i in 0 .. newDeck.Length-1 -> Card (newDeck.Item(i))] )
  49.     pile
  50.  
  51. let SelectTrump =
  52.     let random = new Random()
  53.     let list = [Suit.Hearts;Suit.Clubs;Suit.Diamonds;Suit.Spades]
  54.     let trump = Trump (findRandomItem list random)
  55.     trump
  56.  
  57. let everyNth n seq =
  58.     seq |> List.mapi (fun i el -> el, i)              
  59.         |> List.filter (fun (el, i) -> i % n = n - 1)
  60.         |> List.map fst    
  61.  
  62. let DealCardsForPlayer1 (CardPile mainDeck) =
  63.    let list = CardPile (everyNth 2 mainDeck)
  64.    list
  65.  
  66. let DealCardsForPlayer2 (CardPile mainDeck) =
  67.    let list1 = (everyNth 2 mainDeck.Tail)
  68.    let list2 = CardPile (mainDeck.Item(0)::list1)
  69.    list2
  70.  
  71. let HigherCard (Card p1) (Card p2) =
  72.     if p1>p2 then
  73.         true,false      //P1 WINS
  74.     elif p2 > p1 then
  75.         false,true      //P2 WINS
  76.     else
  77.         false,false     //DRAW
  78.  
  79. let Won (Card p1) (Card p2) (Trump trump) =
  80.     let (p1Rank,p1Suit) = p1
  81.     let (p2Rank,p2Suit) = p2
  82.  
  83.     if p1Suit.Equals(trump) then
  84.         if p2Suit.Equals(trump) then
  85.             HigherCard (Card p1) (Card p2)  
  86.         else
  87.             true,false
  88.     elif p2Suit.Equals(trump) then
  89.         false,true
  90.     else
  91.         HigherCard (Card p1) (Card p2)
  92.  
  93. let Fight (CardPile p1) (CardPile p2) (trump:Trump) =
  94.  
  95.         let (p1Wins,p2Wins) = Won p1.Head p2.Head trump
  96.        
  97.         if   p1Wins then   2,0    
  98.         elif p2Wins then   0,2
  99.         else               1,1
  100.  
  101. let PrintScore (score:int*int) =
  102.     let (a,b) = score
  103.     printfn "Player1 score : %A" a
  104.     printfn "Player2 score : %A" b
  105.     if a>b then
  106.             printfn "PLAYER1 WINS"
  107.         elif a<b  then
  108.             printfn "PLAYER2 WINS"
  109.         else
  110.             printfn "GAME DRAW"
  111.  
  112. let rec PlayGame (CardPile p1) (CardPile p2) (Trump trump) mainScore =
  113.     if p1.Length.Equals(0) then
  114.         PrintScore mainScore
  115.     else
  116.         let (Player1Score,Player2Score) = Fight (CardPile p1) (CardPile p2) (Trump trump)
  117.         let (a,b) = mainScore
  118.         let score  = (a + Player1Score, b + Player2Score)
  119.         PlayGame (CardPile p1.Tail) (CardPile p2.Tail) (Trump trump) score
  120.  
  121. let getTrumpName (Trump trump) =
  122.     trump
  123.  
  124. let StartGame() =
  125.     printfn "STARTING GAME"
  126.     let deck =  CreateDeck
  127.     printfn "Deck has been created and shuffled"
  128.     let trump = SelectTrump
  129.     printfn "Trump has been selected : %A" (getTrumpName trump)
  130.     let p1deck =  deck|>DealCardsForPlayer1
  131.     printfn "Player 1 deck has been created"  
  132.     let p2deck =  deck|>DealCardsForPlayer2
  133.     printfn "Player 2 deck has been created"  
  134.     printfn "PLAYING GAME"
  135.     let  StartingScore   = (0,0)
  136.     PlayGame p1deck p2deck trump StartingScore
  137.     printfn "GAME OVER"
  138. StartGame()
  139.  
  140. Console.ReadKey() |> ignore
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement