Advertisement
Guest User

Lukas Bloznelis uzduotis nr.3 FInal

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