Pensum for denne øvingen er pensum i faget.
a)
lag funksjonen getDeck()
, denne skal sette opp og returnere en liste med structs som inneholder feltene suit og value. Listen som returneres skal inneholde totalt 52 elementer, altså lengden av en vanlig kortstokk.
I hvert element skal feltet suit betegne hvilken farge kortet har, enten Hjerter, Ruter, Kløver og Spar. Disse forskjellige fargene representeres henholdsvis med tegnene 'H', 'D', 'C' og 'S'. Feltet suit skal altså inneholde en av disse char-verdiene.
Feltet value er da verdien på selve kortet, som går fra 2 til 14 (ess) for alle farger.
>> deck = getDeck() deck = 1×52 struct array with fields: suit value >> deck(1).suit ans = 'H' >> deck(1).value ans = 2 >> deck(52).suit ans = 'S' >> deck(52).value ans = 14
b)
Lag nå funksjonen randomHand(n)
, denne skal ta inn et tall n som er antall kort vi ønsker å trekke. Funksjonen skal generere en vektor med tilfeldige unike tall mellom 1 og 52. Antall tall i vektoren er gitt som n. Deretter skal funksjonen opprette en ny kortstokk vha. getDeck fra forrige oppgave, og opprette en hånd med de kort-structene ligger på de posisjonene vi valgte ut tilfeldig. Vi skal altså stå igjen med en vektor på samme format som i getDeck, men som kun inneholder de n kortene vi har valgt oss ut tilfeldig.
>> randomHand(5) ans = 1×5 struct array with fields: suit value % Innholdet i structene i denne listen er likt som i oppgave a
c)
Du skal nå lage en visuell representasjon av kortene i en hånd. For å gjøre dette skal du lage funksjonen visualRepresentation(hand)
, som tar inn en hånd av samme format som returneres fra getDeck og randomHand. Funksjonen skal deretter printe ut innholdet av denne hånden som en streng på følgende format:
Q♦3♤2♥4♤6♤
Tallverdien til kortet når vi kommer over 9 skal altså erstattes med et tegn. Disse er som følger:
'T' for tallet 10, 'J' for knekt, 'Q' for dame, 'K' for konge og 'A' for ess.
(valgfritt) Videre kan du velge å erstatte innholdet i feltet suit med et ASCII-tegn som representerer kortfargen. ASCII-kodene for disse tegnene er listet opp nedenfor.
♠ | Black Spade | ♠ |
♥ | Black Heart | ♥ |
♣ | Black Club | ♣ |
♦ | Black Diamond | ♦ |
♤ | White Spade | ♤ |
♡ | White Heart | ♡ |
♧ | White Club | ♧ |
♢ | White Diamond | ♢ |
>> visualRepresentation(randomHand(10)) 5♧J♦4♥9♧3♤9♥6♥T♦7♧T♤
d)
Du skal nå lage en funksjon som evaluerer hånden som vi genererer i randomHand. Funksjonen skal kunne evaluere om hånden inneholder en av følgende hender i Poker:
- Straight Flush – alle på rad i samme sort, f.eks. 9♠ 8♠ 7♠ 6♠ 5♠
- Quads – fire kort av samme rang, f.eks. 5♠ 5♥ 5♦5♣ 9♠
- Full House – tre like pluss to like, f.eks. 6♠ 6♦ 6♥ K♠ K♣
- Flush – alle i samme sort, f.eks. A♠ 10♠ 8♠ 6♠ 4♠
- Straight – alle kortene på rad, f.eks. 7♠ 6♥ 5♦ 4♣ 3♠
- Trips – tre kort av samme rang, f.eks. 3♠ 3♥ 3♦ 9♣ 5♠
- Two pairs – to forskjellige par, f.eks. K♠ K♦ 4♥ 4♠ 6♣
- Pair – to kort av samme rang, f.eks. 10♠ 10♦ Q♥9♠ 7♣
- High Card – ingen av de nevnte kombinasjonene, f.eks. Q♠ 10♦ 8♥ 5♠ 2♣
Måten du setter opp denne funksjonen er veldig åpen og det er mange måter å løse denne på. Dersom du bare får til å implementere noen av hendene er dette bedre enn ingenting. Funksjonen skal returnere en streng med navnet på hånden skrevet på samme format som i listen over. Vi har laget noen forslag til hvordan du kan lage funksjonen nedenfor:
>> getValue(randomHand(5)) ans = 'Pair' >> getValue(randomHand(5)) ans = 'High Card'