Laboration 6
Introduktion
I denna laboration är er uppgift att utgå från ett färdigt klassdiagram och med detta skapa ett Blackjack-spel. Information som finns i klassdiagramet är bland annat:
- Vilka klasser som måste skapas
- Vilka metoder klasserna har (tänk på vad dessa tar emot och/eller returnerar)
- Vilka attribut klasserna har (tänk på vilka typer dessa är)
- Relationer och arv mellan klasserna
Syftet med laborationen är att ni ska få förståelse för hur ni kan använda er av UML (klassdiagram i detta fallet) för att underlätta utvecklandet av mjukvara. Ni ska här skapa spelet blackjack, tänk även på hur ni själva möjligen valt att modellera upp detta spelet själva - jämfört med att bli tilldelade ett färdigt klassdiagram. Förhoppningsvis visar detta fördelarna med att separera modellering och programmering, vilket även öppnar upp nya dörrar vad gäller samarbete mellan olika yrkesområden.
Uppgift
Som tidigare nämnt är er uppgift att implementera spelet Blackjack, nedan visas det klassdiagram ni kan utgå ifrån:
Klassdiagram över Blackjack.
I ovanstående klassdiagram består vår version av spelat av 7st klasser, som alla hänger ihop på ett eller annat sätt. Börja med att skapa stubbar i Python, baserat på klasserna och respektive metoder. Försök att bilda er en uppfattning för hur allting sedan hänger ihop innan ni börjar implementera någonting. Glöm inte att dokumentera er kod. För att ni ska få en flygande start får ni hela klassen “Card” presenterad nedan - så har ni en utgångspunkt i alla fall!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
class Card():
"""A card, belongs to a Deck or a Hand
Args:
card_number (int) : Index of a card (0 - 51)
Example:
# Generate a full deck of cards:
deck = []
for i in range(52):
deck.append(Card(i))
# Shuffle the cards (don't forget to include the random module):
random.shuffle(deck)
"""
def __init__(self, card_number):
"""Creates a card with folloing attributes
Attributes:
+ color (str) : The color of the card
+ number (str) : The number of a card (2-10, knight, queen, king, ace)
+ value (int) : The value of a card (2-11)
Args:
card_number (int) : Index of a card (0 - 51)
"""
self.color = self.set_color(card_number)
self.number = self.set_number(card_number)
self.value = self.set_value(card_number)
def set_color(self, card_number):
"""Sets the color of a card
Args:
card_number (int) : The index of the card (0-51)
Returns:
str : The color of the card
"""
if card_number < 13:
return "Hjärter"
elif card_number < 26:
return "Ruter"
elif card_number < 39:
return "Spader"
else:
return "Klöver"
def get_color(self):
"""Gets the color of a card
Returns:
str : The color of the card
"""
return self.color
def set_number(self, card_number):
"""Sets the number of a card
Args:
card_number (int) : The index of the card (0-51)
Returns:
str : The number of the card
"""
card_value = card_number % 13
if card_value < 9:
return str(card_value + 2)
elif card_value == 9:
return "Knekt"
elif card_value == 10:
return "Dam"
elif card_value == 11:
return "Kung"
else:
return "Ess"
def get_number(self):
"""Gets the number of a card
Returns:
str : The number of the card
"""
return self.number
def set_value(self, card_number):
"""Sets the value of a card
Args:
card_number (int) : The index of the card (0-51)
Returns:
int : The value of the card
"""
card_value = card_number % 13
if card_value < 9:
return card_value + 2
elif card_value == 12:
return 11
else:
return 10
def get_value(self, soft):
"""Gets the value of a card
Args:
card_number (int) : The index of the card (0-51)
soft (bool) : If the hand (holder of the n cards) is soft, aces gets the value of 1
Returns:
int : The value of the card
"""
if self.value != 11:
return self.value
else:
if soft:
return 1
else:
return 11
def __str__(self):
"""Generates a readable presentation of the card
Returns:
str : The readable string, including the cards color and number
"""
return "{} {}".format(self.color, self.number)
Nu är det upp till er att fortsätta översätta klassdiagramet till körbar kod - alltså att slutföra programmet så att ni kan möta datorn i Blackjack, och förhoppningsvis vinna!
Lycka till!
Exempelkörningar
Exempelkörning 1.
Exempelkörning 2.