Skip to content

Commit 20c8d5b

Browse files
authored
Merge pull request #3 from 777Samael/feature/object1
Feature/object1
2 parents 46e17a2 + d179eb5 commit 20c8d5b

File tree

18 files changed

+2249
-8
lines changed

18 files changed

+2249
-8
lines changed

Backjack/blackjack.py

Lines changed: 51 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ def load_images(card_images):
2929
def deal_card(frame):
3030
# pop the next card off top of the deck
3131
next_card = deck.pop(0)
32+
# and add it to back of the deck
33+
deck.append(next_card)
3234
# add the image to a Label and display the label
3335
tkinter.Label(frame, image=next_card[1], relief='raised').pack(side='left')
3436
# now return the card's face value
@@ -97,6 +99,46 @@ def deal_player():
9799
# result_text.set("Dealer wins!")
98100

99101

102+
def initial_deal():
103+
deal_player()
104+
dealer_hand.append(deal_card(dealer_card_frame))
105+
dealer_score_label.set(score_hand(dealer_hand))
106+
deal_player()
107+
108+
109+
def new_game():
110+
global dealer_card_frame
111+
global player_card_frame
112+
global dealer_hand
113+
global player_hand
114+
# embedded frame to hold the card images
115+
dealer_card_frame.destroy()
116+
dealer_card_frame = tkinter.Frame(card_frame, background='green')
117+
dealer_card_frame.grid(row=0, column=1, sticky='ew', rowspan=2)
118+
# embedded frame to hold the card images
119+
player_card_frame.destroy()
120+
player_card_frame = tkinter.Frame(card_frame, background='green')
121+
player_card_frame.grid(row=2, column=1, sticky='ew', rowspan=2)
122+
123+
result_text.set("")
124+
125+
# Create the list to store the dealer's and player's hands
126+
dealer_hand = []
127+
player_hand = []
128+
initial_deal()
129+
130+
131+
def shuffle():
132+
random.shuffle(deck)
133+
134+
135+
def play():
136+
initial_deal()
137+
deal_player()
138+
139+
mainWindow.mainloop()
140+
141+
100142
mainWindow = tkinter.Tk()
101143

102144
# Set up the screen and frames for the dealer and player
@@ -137,21 +179,22 @@ def deal_player():
137179
player_button = tkinter.Button(button_frame, text="Player", command=deal_player)
138180
player_button.grid(row=0, column=1)
139181

182+
new_game_button = tkinter.Button(button_frame, text="New Game", command=new_game)
183+
new_game_button.grid(row=0, column=2)
184+
185+
shuffle_button = tkinter.Button(button_frame, text="Shuffle", command=shuffle)
186+
shuffle_button.grid(row=0, column=3)
140187
# load cards
141188
cards = []
142189
load_images(cards)
143190
print(cards)
144191
# Create a new deck of cards and shuffle them
145-
deck = list(cards)
146-
147-
random.shuffle(deck)
192+
deck = list(cards) * 2
193+
shuffle()
148194

149195
# Create the list to store the dealer's and player's hands
150196
dealer_hand = []
151197
player_hand = []
152198

153-
deal_player()
154-
dealer_hand.append(deal_card(dealer_card_frame))
155-
deal_player()
156-
157-
mainWindow.mainloop()
199+
if __name__ == "__main__":
200+
play()

Backjack/import_test.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
import blackjack
2+
3+
print(__name__)
4+
blackjack.play()

Game/ducks.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Wing(object):
2+
3+
def __init__(self, ratio):
4+
self.ratio = ratio
5+
6+
def fly(self):
7+
if self.ratio > 1:
8+
print("Weee, this is fun")
9+
elif self.ratio == 1:
10+
print("This is hard word, but I'm flying")
11+
else:
12+
print("I think I'll just walk")
13+
14+
15+
class Duck(object):
16+
17+
def __int__(self):
18+
self._wing = Wing(1.8)
19+
20+
def walk(self):
21+
print("Waddle, waddle, waddle")
22+
23+
def swim(self):
24+
print("Come on it, th water's lovely")
25+
26+
def quack(self):
27+
print("Quack quack")
28+
29+
def fly(self):
30+
self._wing.fly()
31+
32+
33+
class Penguin(object):
34+
35+
def walk(self):
36+
print("Waddle, waddle, I waddle too")
37+
38+
def swim(self):
39+
print("Come on in, it's a bit chilly this far South")
40+
41+
def quack(self):
42+
print("Are you 'avin' a larf? I'm penguin!")
43+
44+
45+
# def test_duck(duck):
46+
# duck.walk()
47+
# duck.swim()
48+
# duck.quack()
49+
50+
51+
if __name__ == '__main__':
52+
donald = Duck()
53+
54+
# percy = Penguin()
55+
# test_duck(percy)

Game/enemy.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
import random
2+
3+
class Enemy:
4+
5+
def __init__(self, name="Enemy", hit_points=0, lives=1):
6+
self._name = name
7+
self._hit_points = hit_points
8+
self._lives = lives
9+
self._alive = True
10+
11+
def take_damage(self, damage):
12+
remaining_points = self._hit_points - damage
13+
if remaining_points >= 0:
14+
self._hit_points = remaining_points
15+
print(f"I took {damage} points damage and have {self._hit_points} left.")
16+
else:
17+
self._lives -= 1
18+
if self._lives > 0:
19+
print(f"{self._name} lost a life and have {self._lives} lives left.")
20+
else:
21+
print(f"{self._name} is dead")
22+
self._alive = False
23+
24+
def __str__(self):
25+
return f"Name: {self._name}, Lives: {self._lives}, Hit points: {self._hit_points}"
26+
27+
28+
# subclass Troll, inherits from Enemy
29+
class Troll(Enemy):
30+
31+
def __init__(self, name):
32+
# super(Troll, self).__init__(name=name, lives=1, hit_points=23)
33+
super().__init__(name=name, lives=1, hit_points=23)
34+
35+
def grunt(self):
36+
print(f"Me {self._name}. {self._name} stomp you")
37+
38+
39+
class Vampyre(Enemy):
40+
41+
def __init__(self, name):
42+
super().__init__(name=name, lives=3, hit_points=12)
43+
44+
def dodges(self):
45+
if random.randint(1, 3) == 3:
46+
print(f"***** {self._name} dodges *****")
47+
return True
48+
else:
49+
return False
50+
51+
def take_damage(self, damage):
52+
if not self.dodges():
53+
super().take_damage(damage=damage)
54+
55+
56+
class VampyreKing(Vampyre):
57+
58+
def __init__(self, name):
59+
super().__init__(name=name)
60+
self._hit_points = 140
61+
62+
def take_damage(self, damage):
63+
super().take_damage(damage // 4)

Game/html_doc.py

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
class Tag(object):
2+
3+
def __init__(self, name, contents):
4+
self.start_tag = '<{}>'.format(name)
5+
self.end_tag = '</{}>'.format(name)
6+
self.contents = contents
7+
8+
def __str__(self):
9+
return f"{self.start_tag}{self.contents}{self.end_tag}"
10+
11+
def display(self, file=None):
12+
print(self, file=file)
13+
14+
15+
class DocType(Tag):
16+
17+
def __init__(self):
18+
super().__init__('!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" http://www.w3.org/TR/html4/strict.dtd', '')
19+
self.end_tag = '' # DOCTYPE doesn't have an end tag
20+
21+
22+
class Head(Tag):
23+
24+
def __init__(self, title=None):
25+
super().__init__('head', '')
26+
if title:
27+
self._title_tag = Tag('title', title)
28+
self.content = str(self._title_tag)
29+
30+
31+
class Body(Tag):
32+
33+
def __init__(self):
34+
super().__init__('body', '')
35+
self._body_contents = []
36+
37+
def add_tag(self, name, contents):
38+
new_tag = Tag(name, contents)
39+
self._body_contents.append(new_tag)
40+
41+
def display(self, file=None):
42+
for tag in self._body_contents:
43+
self.contents += str(tag)
44+
45+
super().display(file=file)
46+
47+
48+
class HtmlDoc(object):
49+
50+
# def __init__(self, title=None):
51+
# self._doc_type = DocType()
52+
# self._head = Head(title)
53+
# self._body = Body()
54+
55+
def __init__(self, doc_type, head, body):
56+
self._doc_type = doc_type
57+
self._head = head
58+
self._body = body
59+
60+
def add_tag(self, name, contents):
61+
self._body.add_tag(name, contents)
62+
63+
def display(self, file=None):
64+
self._doc_type.display(file=file)
65+
print('<html>', file=file)
66+
self._head.display(file=file)
67+
self._body.display(file=file)
68+
print('</html>', file=file)
69+
70+
71+
if __name__ == '__main__':
72+
# my_page = HtmlDoc('Demo HTML Doc')
73+
# my_page.add_tag('h1', 'Main heading')
74+
# my_page.add_tag('h2', 'sub-heading')
75+
# my_page.add_tag('p', 'This is a paragraph that will appear on the page')
76+
#
77+
# with open('test.html', 'w') as test_doc:
78+
# my_page.display(file=test_doc)
79+
80+
new_body = Body()
81+
new_body.add_tag('h1', 'Aggregation')
82+
new_body.add_tag('p', "Unlike <strong>composition</strong>, aggregation uses existing instances"
83+
" of objects to build up another object.")
84+
new_body.add_tag('p', "The composed object doesn't actually own the objects that it's composed of"
85+
" - if it's destroyed, those objects continue to exist.")
86+
87+
new_docType = DocType()
88+
new_header = Head('Aggregation document')
89+
my_page = HtmlDoc(new_docType, new_header, new_body)
90+
91+
with open('test3.html', 'w') as test_doc:
92+
my_page.display(file=test_doc)

Game/main.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from player import Player
2+
from enemy import Enemy, Troll, Vampyre, VampyreKing
3+
4+
tim = Player("Tim")
5+
6+
random_monster = Enemy("Basic enemy", 12, 1)
7+
print(random_monster)
8+
9+
ugly_troll = Troll("Pug")
10+
print(f"Ugly troll - {ugly_troll}")
11+
12+
another_troll = Troll("Ug")
13+
print(f"Another troll - {another_troll}")
14+
15+
brother = Troll("Urg")
16+
print(brother)
17+
18+
ugly_troll.grunt()
19+
another_troll.grunt()
20+
brother.grunt()
21+
22+
brother.take_damage(10)
23+
print(brother)
24+
25+
print("---")
26+
27+
big_vamp = Vampyre("Nosferatu")
28+
print(big_vamp)
29+
30+
# while big_vamp._alive:
31+
# big_vamp.take_damage(2)
32+
# print(big_vamp)
33+
34+
king_vamp = VampyreKing("Dodo")
35+
print(king_vamp)
36+
37+
while king_vamp._alive:
38+
king_vamp.take_damage(16)
39+
print(king_vamp)

Game/player.py

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
class Player(object):
2+
3+
def __init__(self, name):
4+
self.name = name
5+
self._lives = 3
6+
self._level = 1
7+
self._score = 0
8+
9+
# Creating Attributes With property() https://realpython.com/python-property/#creating-attributes-with-property
10+
def _get_lives(self):
11+
return self._lives
12+
13+
def _set_lives(self, lives):
14+
if lives >= 0:
15+
self._lives = lives
16+
else:
17+
print("Lives cannot be negative")
18+
self._lives = 0
19+
20+
def _get_level(self):
21+
return self._level
22+
23+
def _set_level(self, level):
24+
if level > 0:
25+
delta = level - self._level
26+
self._score += delta * 1000
27+
self._level = level
28+
else:
29+
print("Level can't be less than 1")
30+
31+
lives = property(_get_lives, _set_lives)
32+
level = property(_get_level, _set_level)
33+
34+
# Using property() as a Decorator https://realpython.com/python-property/#using-property-as-a-decorator
35+
@property
36+
def score(self):
37+
return self._score
38+
39+
@score.setter
40+
def score(self, score):
41+
self._score = score
42+
43+
def __str__(self):
44+
return "Name: {0.name}, Lives: {0.lives}, Level: {0.level}, Score: {0.score}".format(self)

Game/test.html

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" http://www.w3.org/TR/html4/strict.dtd>
2+
<html>
3+
<head></head>
4+
<body><h1>Main heading</h1><h2>sub-heading</h2><p>This is a paragraph that will appear on the page</p></body>
5+
</html>

0 commit comments

Comments
 (0)