Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f235a4c

Browse files
Brick.py
1 parent 7ed356a commit f235a4c

File tree

1 file changed

+277
-0
lines changed

1 file changed

+277
-0
lines changed

‎brick_game/brick.py‎

Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
import pygame
2+
from pygame.locals import *
3+
4+
pygame.init()
5+
6+
'''
7+
Defining gaming window size and font
8+
'''
9+
Window_width = 500
10+
Window_height = 500
11+
12+
window = pygame.display.set_mode((Window_width, Window_height))
13+
pygame.display.set_caption('Brickstroy')
14+
15+
16+
font = pygame.font.SysFont('Arial', 30)
17+
18+
'''
19+
Defining Bricks colour
20+
'''
21+
O_brick = (255, 100, 10)
22+
w_brick = (255, 255, 255)
23+
g_brick = (0, 255, 0)
24+
black = (0, 0, 0)
25+
26+
27+
game_rows = 6
28+
game_coloumns = 6
29+
clock = pygame.time.Clock()
30+
frame_rate = 60
31+
my_ball = False
32+
game_over = 0
33+
score = 0
34+
35+
36+
class Ball():
37+
'''
38+
Creating ball for the game
39+
'''
40+
41+
def __init__(self, x, y):
42+
43+
self.radius = 10
44+
self.x = x - self.radius
45+
self.y = y - 50
46+
self.rect = Rect(self.x, self.y, self.radius * 2, self.radius * 2)
47+
self.x_speed = 4
48+
self.y_speed = -4
49+
self.max_speed = 5
50+
self.game_over = 0
51+
52+
def motion(self):
53+
collision_threshold = 5
54+
block_object = Block.bricks
55+
brick_destroyed = 1
56+
count_row = 0
57+
for row in block_object:
58+
count_item = 0
59+
for item in row:
60+
# check collision with gaming window
61+
if self.rect.colliderect(item[0]):
62+
if abs(self.rect.bottom - item[0].top) < collision_threshold and self.y_speed > 0:
63+
self.y_speed *= -1
64+
65+
if abs(self.rect.top - item[0].bottom) < collision_threshold and self.y_speed < 0:
66+
self.y_speed *= -1
67+
if abs(self.rect.right - item[0].left) < collision_threshold and self.x_speed > 0:
68+
self.x_speed *= -1
69+
if abs(self.rect.left - item[0].right) < collision_threshold and self.x_speed < 0:
70+
self.x_speed *= -1
71+
72+
if block_object[count_row][count_item][1] > 1:
73+
block_object[count_row][count_item][1] -= 1
74+
else:
75+
block_object[count_row][count_item][0] = (0, 0, 0, 0)
76+
77+
if block_object[count_row][count_item][0] != (0, 0, 0, 0):
78+
brick_destroyed = 0
79+
count_item += 1
80+
count_row += 1
81+
82+
if brick_destroyed == 1:
83+
self.game_over = 1
84+
85+
# check for collision with bricks
86+
if self.rect.left < 0 or self.rect.right > Window_width:
87+
self.x_speed *= -1
88+
89+
if self.rect.top < 0:
90+
self.y_speed *= -1
91+
if self.rect.bottom > Window_height:
92+
self.game_over = -1
93+
94+
# check for collission with base
95+
if self.rect.colliderect(user_basepad):
96+
if abs(self.rect.bottom - user_basepad.rect.top) < collision_threshold and self.y_speed > 0:
97+
self.y_speed *= -1
98+
self.x_speed += user_basepad.direction
99+
if self.x_speed > self.max_speed:
100+
self.x_speed = self.max_speed
101+
elif self.x_speed < 0 and self.x_speed < -self.max_speed:
102+
self.x_speed = -self.max_speed
103+
else:
104+
self.x_speed *= -1
105+
106+
self.rect.x += self.x_speed
107+
self.rect.y += self.y_speed
108+
109+
return self.game_over
110+
111+
def draw(self):
112+
pygame.draw.circle(window, (0, 0, 255), (self.rect.x +
113+
self.radius, self.rect.y + self.radius), self.radius)
114+
pygame.draw.circle(window, (255, 255, 255), (self.rect.x +
115+
self.radius, self.rect.y + self.radius), self.radius, 1)
116+
117+
def reset(self, x, y):
118+
119+
self.radius = 10
120+
self.x = x - self.radius
121+
self.y = y - 50
122+
self.rect = Rect(self.x, self.y, self.radius * 2, self.radius * 2)
123+
self.x_speed = 4
124+
self.y_speed = -4
125+
self.max_speed = 5
126+
self.game_over = 0
127+
128+
129+
class Block():
130+
'''
131+
This class will help me create Blocks/bricks of the game
132+
'''
133+
134+
def __init__(self):
135+
self.width = Window_width // game_coloumns
136+
self.height = 40
137+
138+
def make_brick(self):
139+
self.bricks = []
140+
single_brick = []
141+
for row in range(game_rows):
142+
143+
brick_row = []
144+
145+
for coloumn in range(game_coloumns):
146+
147+
x_brick = coloumn * self.width
148+
y_brick = row * self.height
149+
rect = pygame.Rect(x_brick, y_brick, self.width, self.height)
150+
# assign power to the bricks based on row
151+
if row < 2:
152+
power = 3
153+
elif row < 4:
154+
power = 2
155+
elif row < 6:
156+
power = 1
157+
158+
single_brick = [rect, power]
159+
160+
brick_row.append(single_brick)
161+
162+
self.bricks.append(brick_row)
163+
164+
def draw_brick(self):
165+
for row in self.bricks:
166+
for brick in row:
167+
168+
if brick[1] == 3:
169+
brick_colour = O_brick
170+
elif brick[1] == 2:
171+
brick_colour = w_brick
172+
elif brick[1] == 1:
173+
brick_colour = g_brick
174+
pygame.draw.rect(window, brick_colour, brick[0])
175+
pygame.draw.rect(window, black, (brick[0]), 1)
176+
177+
178+
class base():
179+
'''
180+
This class is to create the base pad of the game
181+
'''
182+
183+
def __init__(self):
184+
185+
self.height = 20
186+
self.width = int(Window_width / game_coloumns)
187+
self.x = int((Window_width / 2) - (self.width / 2))
188+
self.y = Window_height - (self.height * 2)
189+
self.speed = 8
190+
self.rect = Rect(self.x, self.y, self.width, self.height)
191+
self.direction = 0
192+
193+
def slide(self):
194+
195+
self.direction = 0
196+
key = pygame.key.get_pressed()
197+
if key[pygame.K_LEFT] and self.rect.left > 0:
198+
self.rect.x -= self.speed
199+
self.direction = -1
200+
if key[pygame.K_RIGHT] and self.rect.right < Window_width:
201+
self.rect.x += self.speed
202+
self.direction = 1
203+
204+
def draw(self):
205+
pygame.draw.rect(window, (0, 0, 255), self.rect)
206+
pygame.draw.rect(window, (255, 255, 255), self.rect, 1)
207+
208+
def reset(self):
209+
210+
self.height = 20
211+
self.width = int(Window_width / game_coloumns)
212+
self.x = int((Window_width / 2) - (self.width / 2))
213+
self.y = Window_height - (self.height * 2)
214+
self.speed = 8
215+
self.rect = Rect(self.x, self.y, self.width, self.height)
216+
self.direction = 0
217+
218+
219+
def draw_text(text, font, w_brick, x, y):
220+
'''
221+
Funtion for showing text in gaming window
222+
'''
223+
image = font.render(text, True, w_brick)
224+
window.blit(image, (x, y))
225+
226+
227+
Block = Block()
228+
# Creating Brick
229+
Block.make_brick()
230+
# Defining base pad
231+
user_basepad = base()
232+
ball = Ball(user_basepad.x + (user_basepad.width // 2),
233+
user_basepad.y - user_basepad.height) # Defining ball
234+
235+
game = True
236+
while game:
237+
238+
clock.tick(frame_rate)
239+
window.fill(black) # Gaming window Background
240+
Block.draw_brick() # Drawing bricks
241+
user_basepad.draw() # Drawing user basepad
242+
ball.draw() # Drawing gaming ball
243+
244+
if my_ball:
245+
user_basepad.slide()
246+
game_over = ball.motion()
247+
if game_over != 0:
248+
my_ball = False
249+
250+
251+
if not my_ball:
252+
if game_over == 0:
253+
draw_text('CLICK ANYWHERE TO START', font,
254+
w_brick, 90, Window_height // 2 + 100)
255+
elif game_over == 1:
256+
draw_text('YOU WON!', font, w_brick, 180, Window_height // 2 + 50)
257+
draw_text('CLICK ANYWHERE TO RESTART', font,
258+
w_brick, 90, Window_height // 2 + 100)
259+
elif game_over == -1:
260+
draw_text('GAME OVER!', font, w_brick,
261+
180, Window_height // 2 + 50)
262+
draw_text('CLICK ANYWHERE TO RESTART', font,
263+
w_brick, 90, Window_height // 2 + 100)
264+
265+
for event in pygame.event.get():
266+
if event.type == pygame.QUIT:
267+
game = False
268+
if event.type == pygame.MOUSEBUTTONDOWN and my_ball == False:
269+
my_ball = True
270+
ball.reset(user_basepad.x + (user_basepad.width // 2),
271+
user_basepad.y - user_basepad.height)
272+
user_basepad.reset()
273+
Block.make_brick()
274+
275+
pygame.display.update()
276+
277+
pygame.quit()

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /