Hide

Problem A
Spil

Languages en is

Í þessu verkefni útfærið þið þrjá klasa: Card, Deck, and Hand. Sérhvern klasa á að útfæri í eigin Python skrá. Tvö dæmi um aðalforrit sem notar klasana þrjá eru gefin (sjá main1.py og main2.py)

Athugið að fyrir suma liði þarf líka að fá rétt á prufutilvikunum fyrir meðlimabreytur og klasabreytur, og einnig fyrir rétta útfærslu á upphafsstilli.

Card klasinn (30 stig)

  • (10 stig) __init__(): Upphafsstillir (e. initializer) með færibreyturnar rank (annað hvort strengur eða heiltala) og suit (stafur).

  • (10 stig) Klasinn Card hefur tvær public tilvikabreytur: rank og suit. Sú fyrri er geymd sem heiltala á bilinu 2–14 og sú seinni sem stafur: ’H’, ’S’, ’D’, eða ’C’, fyrir hjarta, spaða, tígul og lauf (í þessari röð). Þið getið notað fallið type() til að athuga tagið á færibreytunum. Gera má ráð fyrir að alltaf sé kallað á smiðinn í Card með löglegum gildum.

  • (10 stig) __str__(): Strengjaframsetning fyrir tilvik af Card er hægri jafnað svið að lengdinni þrír: fyrst gildið (e. rank) og síðan sortin (e. suit). Stafirnir ’J’, ’Q’, ’K’ og ’A’ eru notaðir fyrir gildin 11, 12, 13 og 14 (í þessari röð). Til dæmis er "10H" strengjaframsetning fyrir hjartatíu og " AS" fyrir spaðaás.

Deck klasinn (40 stig)

  • (4 stig) __init__(): Upphafsstilir án færibreytna sem býr til stokk af 52 spilum. Stokkurinn er búinn til þannig að spilin eru fyrst röðuð eftir sort, HSDC (hjörtu fyrst, síðan spaðar, tíglar og lauf) og síðan eftir gildinu, í hækkandi röð. Fyrstu þrjú spilin í stokknum eru því: “2H”, “3H” og “4H”.

  • (9 stig) Klasinn Deck hefur eina public tilvikabreytu, deck, sem geymir lista af 13 spilum í sérhverri sort, það er 52 spil í heildina.

  • (9 stig) __str__(): Stengjaframsetning fyrir tilvik af Deck sýnir öll spilin í þeirri röð sem þau koma fyrir (með einu bili á eftir sérhverju spili) með nýrri línu á eftir sérhverjum 13 spilum.

  • (9 stig) shuffle(): Stokkar spilin á handahófskenndan hátt með því að nota random.shuffle(). Athugaðu að þú skalt ekki kalla á random.seed innan klasans.

  • (9 stig) deal(): Gefur eitt spil úr stokknum með því að skila spilinu sem er efst á stokknum (fyrsta spilið). Þú mátt gera ráð fyrir að það sé ekki kallað á þetta fall þegar stokkurinn er tómur.

Hand klasinn (30 stig)

  • (6 stig) __init__(): Upphafsstillir án færibreytna.

  • (8 stig) Klasinn Hand hefur eina public tilvikabreytu, cards, sem geymir lista af allt að 13 spilum.

  • (8 stig) __str__(): Strengjaframsetning fyrir tilvik af Hand er ein lína sem samanstendur af strengjaframsetningu sérhvers spils (með einu bili á eftir sérhverju spili). Ef höndin er tóm þá er strengnum “Empty” skilað.

  • (8 stig) add_card(card): Bætir gildi færibreytunnar við höndina. Ef höndin er full skal ekkert gerast.

Fastar

Þið eigið að nota fasta í útfærslunni ykkar. Þið þurfið að finna út sjálf hvaða fasta væri gott að hafa en eins og sést í aðalforritunum tveimur þá þurfið þið að minnsta kosi fastann NUMBER_OF_CARDS í klasanum Hand.

Úttak main1.py

 5S
 QD
 KH
 2C
 AS
10D

 JS  KD  3C 10C  5C  5S  3H  8D  5H  7S  AS  9C  8H 
 4D 10D  9H  AD  7C  JC  KS  7H  3S 10H 10S  JH  8C 
 AH  KH  8S  JD  QC  2D  2C  QS  4S  6H  9S  6C  9D 
 KC  QH  4C  6S  7D  5D  2S  2H  AC  6D  3D  4H  QD 

 JS  KD  3C 10C  5C  5S  3H  8D  5H  7S  AS  9C  8H 

 4D 10D  9H  AD  7C  JC  KS  7H  3S 10H 10S  JH  8C 
 AH  KH  8S  JD  QC  2D  2C  QS  4S  6H  9S  6C  9D 
 KC  QH  4C  6S  7D  5D  2S  2H  AC  6D  3D  4H  QD