You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 4 Next »

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.

Eksempel på kjøring
>> 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 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.

Eksempel på kjøring
>> 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♢
Eksempel på kjøring
>> 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: 

  1. Straight Flush – alle på rad i samme sort, f.eks. 9♠ 8♠ 7♠ 6♠ 5♠
  2. Quads – fire kort av samme rang, f.eks. 5♠ 5♥ 5♦5♣ 9♠
  3. Full House – tre like pluss to like, f.eks. 6♠ 6♦ 6♥ K♠ K♣
  4. Flush – alle i samme sort, f.eks. A♠ 10♠ 8♠ 6♠ 4♠
  5. Straight – alle kortene på rad, f.eks. 7♠ 6♥ 5♦ 4♣ 3♠
  6. Trips – tre kort av samme rang, f.eks. 3♠ 3♥ 3♦ 9♣ 5♠
  7. Two pairs – to forskjellige par, f.eks. K♠ K♦ 4♥ 4♠ 6♣
  8. Pair – to kort av samme rang, f.eks. 10♠ 10♦ Q♥9♠ 7♣
  9. 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:

 

Et forslag til en måte å sette opp funksjonen, dersom du er kjent med Function Handles i Matlab er å opprette en cell-array med forskjellige function handles. Deretter lager du en funksjon for hver type hånd ovenfor, som gir ut true eller false på om hånden vi evaluerer er av den aktuelle typen. Cell-arrayen skal så inneholde et element med en function handle for hver av disse funksjonene, og vi kan dermed iterere over denne listen og se hvilke funksjoner som gir true.
En annen måte å løse oppgaven på er ved å bruke mange IF-setninger og som tester for hver enkelt type hånd og returnerer navnet på den hånden hvis testen gir positivt utslag.



Eksempel på kjøring
>> getValue(randomHand(5))
ans =

    'Pair'

>> getValue(randomHand(5))
ans =

    'High Card'

 

 

 

  • No labels