646 lines
25 KiB
Python
646 lines
25 KiB
Python
'''
|
|
|
|
Game: Angry Birds
|
|
File: maps.py
|
|
|
|
Contents: Class MAPS, that puts everything in action!
|
|
|
|
Requirements: Pygame, sys
|
|
Supporting Modules: physics_engine, interface, objects
|
|
|
|
By: Jatin Kumar Mandav
|
|
|
|
Blog: https://www.jatinmandav.wordpress.com
|
|
Twitter: @jatinmandav
|
|
YouTube: https://www.youtube.com/mandav
|
|
|
|
'''
|
|
import pygame
|
|
import sys
|
|
|
|
import physics_engine
|
|
import objects
|
|
import interface
|
|
|
|
pygame.init()
|
|
width = None
|
|
height = None
|
|
display = None
|
|
clock = pygame.time.Clock()
|
|
|
|
ground = 50
|
|
|
|
d_velocity = 2.0
|
|
|
|
def init(screen):
|
|
global width, height, display
|
|
display = screen
|
|
(width, height) = display.get_rect().size
|
|
height -= ground
|
|
interface.init(display)
|
|
|
|
def all_rest(pigs, birds, blocks):
|
|
threshold = 0.15
|
|
for pig in pigs:
|
|
if pig.velocity.magnitude >= threshold:
|
|
return False
|
|
|
|
for bird in birds:
|
|
if bird.velocity.magnitude >= threshold:
|
|
return False
|
|
|
|
for block in blocks:
|
|
if block.velocity.magnitude >= threshold:
|
|
return False
|
|
|
|
return True
|
|
|
|
def close():
|
|
pygame.quit()
|
|
sys.exit()
|
|
|
|
class Maps:
|
|
def __init__(self):
|
|
self.level = 1
|
|
self.max_level = 15
|
|
self.color = {'background': (51, 51, 51)}
|
|
self.score = 0
|
|
|
|
def wait_level(self):
|
|
time = 0
|
|
while time < 3:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
close()
|
|
if event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_q:
|
|
close()
|
|
time += 1
|
|
clock.tick(1)
|
|
|
|
return
|
|
|
|
def check_win(self, pigs, birds):
|
|
if pigs == []:
|
|
print("WON!")
|
|
return True
|
|
if (not pigs == []) and birds == []:
|
|
print("LOST!")
|
|
return False
|
|
|
|
def pause(self):
|
|
pause_text = interface.Label(700, 200, 400, 200, None, self.color['background'])
|
|
pause_text.add_text("GAME PAUSED", 70, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
replay = interface.Button(350, 500, 300, 100, self.draw_map, (244, 208, 63), (247, 220, 111))
|
|
replay.add_text("RESTART", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
resume = interface.Button(750, 500, 300, 100, None, (88, 214, 141), (171, 235, 198))
|
|
resume.add_text("RESUME", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
exit = interface.Button(1150, 500, 300, 100, close, (241, 148, 138), (245, 183, 177))
|
|
exit.add_text("QUIT", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
mandav = interface.Label(width - 270, height + ground - 70, 300, 100, None, self.color['background'])
|
|
mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", ( 113, 125, 126 ))
|
|
|
|
while True:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
close()
|
|
if event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_q:
|
|
close()
|
|
if event.key == pygame.K_p:
|
|
return
|
|
if event.key == pygame.K_ESCAPE:
|
|
return
|
|
|
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
if replay.isActive():
|
|
replay.action()
|
|
if resume.isActive():
|
|
return
|
|
if exit.isActive():
|
|
exit.action()
|
|
|
|
replay.draw()
|
|
resume.draw()
|
|
exit.draw()
|
|
pause_text.draw()
|
|
mandav.draw()
|
|
|
|
pygame.display.update()
|
|
clock.tick(60)
|
|
|
|
def draw_map(self):
|
|
birds = []
|
|
pigs = []
|
|
blocks = []
|
|
walls = []
|
|
self.score = 0
|
|
|
|
if self.level == 1:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 40, 20))
|
|
pigs.append(physics_engine.Pig(1500, height - 40, 20))
|
|
|
|
blocks.append(physics_engine.Block(1300, height - 60, 60))
|
|
|
|
elif self.level == 2:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1000, height - 40, 20))
|
|
pigs.append(physics_engine.Pig(1400, height - 40, 20))
|
|
|
|
blocks.append(physics_engine.Block(1200, height - 60, 60))
|
|
blocks.append(physics_engine.Block(1200, height - 2*35, 60))
|
|
blocks.append(physics_engine.Block(1500, height - 60, 60))
|
|
|
|
elif self.level == 3:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1200, height - 60, 30))
|
|
pigs.append(physics_engine.Pig(1300, height - 60, 30))
|
|
|
|
blocks.append(physics_engine.Block(1000, height - 100, 100))
|
|
blocks.append(physics_engine.Block(1000, height - 2*60, 100))
|
|
blocks.append(physics_engine.Block(1500, height - 100, 100))
|
|
blocks.append(physics_engine.Block(1500, height - 2*60, 100))
|
|
|
|
elif self.level == 4:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1200, 500 - 60, 30))
|
|
pigs.append(physics_engine.Pig(1300, height - 60, 30))
|
|
|
|
walls.append(objects.Slab(1000, 450, 500, 20))
|
|
|
|
blocks.append(physics_engine.Block(1100, height - 100, 100))
|
|
|
|
elif self.level == 5:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1300, 500 - 60, 25))
|
|
pigs.append(physics_engine.Pig(1300, height - 60, 25))
|
|
|
|
walls.append(objects.Slab(500, 400, 100, height - 400))
|
|
walls.append(objects.Slab(1000, 450, 500, 30))
|
|
|
|
blocks.append(physics_engine.Block(1150, 500 - 100, 100))
|
|
blocks.append(physics_engine.Block(1100, height - 100, 100))
|
|
|
|
elif self.level == 6:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1300, 500 - 60, 25))
|
|
pigs.append(physics_engine.Pig(1300, height - 60, 25))
|
|
|
|
walls.append(objects.Slab(1000, 0, 30, 450))
|
|
walls.append(objects.Slab(1000, 450, 500, 30))
|
|
|
|
blocks.append(physics_engine.Block(1150, 500 - 100, 100))
|
|
blocks.append(physics_engine.Block(1100, height - 100, 100))
|
|
|
|
elif self.level == 7:
|
|
for i in range(4):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, 500 - 60, 25))
|
|
pigs.append(physics_engine.Pig(1300, 500 - 60, 25))
|
|
pigs.append(physics_engine.Pig(1200, height - 60, 25))
|
|
|
|
walls.append(objects.Slab(1200, 250, 30, 200))
|
|
walls.append(objects.Slab(1000, 450, 500, 30))
|
|
|
|
elif self.level == 8:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(1200, height - 60, 25))
|
|
|
|
walls.append(objects.Slab(700, 250, 30, height - 250))
|
|
|
|
elif self.level == 9:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(1450, height - 60, 25))
|
|
|
|
|
|
blocks.append(physics_engine.Block(1250, height - 100, 100))
|
|
blocks.append(physics_engine.Block(1250, height - 2*60, 100))
|
|
|
|
walls.append(objects.Slab(700, 400, 30, height - 400))
|
|
|
|
elif self.level == 10:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(1450, height - 60, 25))
|
|
|
|
blocks.append(physics_engine.Block(1250, height - 100, 100))
|
|
blocks.append(physics_engine.Block(1250, height - 2*60, 100))
|
|
blocks.append(physics_engine.Block(900, height - 100, 100))
|
|
|
|
walls.append(objects.Slab(900, 400, 500, 30))
|
|
|
|
elif self.level == 11:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(1450, height - 60, 25))
|
|
|
|
blocks.append(physics_engine.Block(1250, height - 100, 100))
|
|
blocks.append(physics_engine.Block(1250, height - 2*60, 100))
|
|
|
|
walls.append(objects.Slab(900, 400, 500, 30))
|
|
walls.append(objects.Slab(900, 400, 30, height - 400))
|
|
|
|
elif self.level == 12:
|
|
for i in range(3):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(1450, height - 60, 25))
|
|
|
|
walls.append(objects.Slab(900, 400, 500, 30))
|
|
walls.append(objects.Slab(1200, 500, 30, height - 500))
|
|
|
|
elif self.level == 13:
|
|
for i in range(4):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(1200, 400 - 60, 25))
|
|
pigs.append(physics_engine.Pig(1450, height - 60, 25))
|
|
|
|
blocks.append(physics_engine.Block(900, height - 100, 100))
|
|
blocks.append(physics_engine.Block(900, height - 2*60, 100))
|
|
|
|
walls.append(objects.Slab(900, 400, 500, 40))
|
|
walls.append(objects.Slab(1200, 500, 30, height - 500))
|
|
|
|
elif self.level == 14:
|
|
for i in range(4):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(1100, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(1100, 400 - 60, 25))
|
|
pigs.append(physics_engine.Pig(1450, height - 60, 25))
|
|
|
|
blocks.append(physics_engine.Block(900, height - 100, 100))
|
|
|
|
blocks.append(physics_engine.Block(1300, 400 - 100, 100))
|
|
|
|
walls.append(objects.Slab(900, 400, 500, 40))
|
|
walls.append(objects.Slab(900, 0, 30, 400))
|
|
|
|
elif self.level == 15:
|
|
for i in range(5):
|
|
new_bird = physics_engine.Bird(40*i + 5*i, height - 40, 20, None, "BIRD")
|
|
birds.append(new_bird)
|
|
|
|
pigs.append(physics_engine.Pig(900, height - 60, 25))
|
|
pigs.append(physics_engine.Pig(width - 400, 400 - 60, 25))
|
|
pigs.append(physics_engine.Pig(1700, height - 60, 25))
|
|
|
|
|
|
walls.append(objects.Slab(800, 400, 30, height - 400))
|
|
walls.append(objects.Slab(1000, 500, 30, height - 500))
|
|
|
|
walls.append(objects.Slab(width - 500, 400, 500, 40))
|
|
walls.append(objects.Slab(width - 500, 150, 60, 400 - 150))
|
|
|
|
|
|
self.start_level(birds, pigs, blocks, walls)
|
|
|
|
def replay_level(self):
|
|
self.level -= 1
|
|
self.draw_map()
|
|
|
|
def start_again(self):
|
|
self.level = 1
|
|
self.draw_map()
|
|
|
|
def level_cleared(self):
|
|
self.level += 1
|
|
|
|
level_cleared_text = interface.Label(700, 100, 400, 200, None, self.color['background'])
|
|
if self.level <= self.max_level:
|
|
level_cleared_text.add_text("LEVEL " + str(self.level - 1) + " CLEARED!", 80, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
else:
|
|
level_cleared_text.add_text("ALL LEVEL CLEARED!", 80, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
score_text = interface.Label(750, 300, 300, 100, None, self.color['background'])
|
|
score_text.add_text("SCORE: " + str(self.score), 55, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
replay = interface.Button(350, 500, 300, 100, self.replay_level, (244, 208, 63), (247, 220, 111))
|
|
replay.add_text("PLAY AGAIN", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
if self.level <= self.max_level:
|
|
next = interface.Button(750, 500, 300, 100, self.draw_map, (88, 214, 141), (171, 235, 198))
|
|
next.add_text("CONTINUE", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
else:
|
|
next = interface.Button(750, 500, 300, 100, self.start_again, (88, 214, 141), (171, 235, 198))
|
|
next.add_text("START AGAIN", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
exit = interface.Button(1150, 500, 300, 100, close, (241, 148, 138), (245, 183, 177))
|
|
exit.add_text("QUIT", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
mandav = interface.Label(width - 270, height + ground - 70, 300, 100, None, self.color['background'])
|
|
mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", ( 113, 125, 126 ))
|
|
|
|
while True:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
close()
|
|
if event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_q:
|
|
close()
|
|
|
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
if replay.isActive():
|
|
replay.action()
|
|
if next.isActive():
|
|
next.action()
|
|
if exit.isActive():
|
|
exit.action()
|
|
|
|
replay.draw()
|
|
next.draw()
|
|
exit.draw()
|
|
level_cleared_text.draw()
|
|
score_text.draw()
|
|
mandav.draw()
|
|
|
|
pygame.display.update()
|
|
clock.tick(60)
|
|
|
|
def level_failed(self):
|
|
level_failed_text = interface.Label(700, 100, 400, 200, None, self.color['background'])
|
|
level_failed_text.add_text("LEVEL FAILED!", 80, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
score_text = interface.Label(750, 300, 300, 100, None, self.color['background'])
|
|
score_text.add_text("SCORE: " + str(self.score), 55, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
replay = interface.Button(500, 500, 300, 100, self.draw_map, (244, 208, 63), (247, 220, 111))
|
|
replay.add_text("TRY AGAIN", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
exit = interface.Button(1000, 500, 300, 100, close, (241, 148, 138), (245, 183, 177))
|
|
exit.add_text("QUIT", 60, "Fonts/arfmoochikncheez.ttf", self.color['background'])
|
|
|
|
mandav = interface.Label(width - 270, height + ground - 70, 300, 100, None, self.color['background'])
|
|
mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", ( 113, 125, 126 ))
|
|
|
|
while True:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
close()
|
|
if event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_q:
|
|
close()
|
|
|
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
if replay.isActive():
|
|
replay.action()
|
|
if exit.isActive():
|
|
exit.action()
|
|
|
|
replay.draw()
|
|
exit.draw()
|
|
level_failed_text.draw()
|
|
score_text.draw()
|
|
mandav.draw()
|
|
|
|
pygame.display.update()
|
|
clock.tick(60)
|
|
|
|
def start_level(self, birds, pigs, blocks, walls):
|
|
loop = True
|
|
|
|
slingshot = physics_engine.Slingshot(200, height - 200, 30, 200)
|
|
|
|
birds[0].load(slingshot)
|
|
|
|
mouse_click = False
|
|
flag = 1
|
|
|
|
pigs_to_remove = []
|
|
blocks_to_remove = []
|
|
|
|
score_text = interface.Label(50, 10, 100, 50, None, self.color['background'])
|
|
score_text.add_text("SCORE: " + str(self.score), 25, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
birds_remaining = interface.Label(120, 50, 100, 50, None, self.color['background'])
|
|
birds_remaining.add_text("BIRDS REMAINING: " + str(len(birds)), 25, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
pigs_remaining = interface.Label(110, 90, 100, 50, None, self.color['background'])
|
|
pigs_remaining.add_text("PIGS REMAINING: " + str(len(pigs)), 25, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
|
|
mandav = interface.Label(width - 270, height + ground - 70, 300, 100, None, self.color['background'])
|
|
mandav.add_text("MANDAV", 60, "Fonts/arfmoochikncheez.ttf", ( 113, 125, 126 ))
|
|
|
|
while loop:
|
|
for event in pygame.event.get():
|
|
if event.type == pygame.QUIT:
|
|
close()
|
|
if event.type == pygame.KEYDOWN:
|
|
if event.key == pygame.K_q:
|
|
close()
|
|
if event.key == pygame.K_r:
|
|
self.draw_map()
|
|
if event.key == pygame.K_p:
|
|
self.pause()
|
|
if event.key == pygame.K_ESCAPE:
|
|
self.pause()
|
|
|
|
if event.type == pygame.MOUSEBUTTONDOWN:
|
|
if birds[0].mouse_selected():
|
|
mouse_click = True
|
|
if event.type == pygame.MOUSEBUTTONUP:
|
|
mouse_click = False
|
|
if birds[0].mouse_selected():
|
|
flag = 0
|
|
|
|
if (not birds[0].loaded) and all_rest(pigs, birds, blocks):
|
|
print("LOADED!")
|
|
birds.pop(0)
|
|
if self.check_win(pigs, birds) == 1:
|
|
self.score += len(birds)*100
|
|
self.level_cleared()
|
|
elif self.check_win(pigs,birds) == 0:
|
|
self.level_failed()
|
|
|
|
if not birds == []:
|
|
birds[0].load(slingshot)
|
|
flag = 1
|
|
|
|
if mouse_click:
|
|
birds[0].reposition(slingshot, mouse_click)
|
|
|
|
if not flag:
|
|
birds[0].unload()
|
|
|
|
#display.fill(self.color['background'])
|
|
color = self.color['background']
|
|
for i in range(3):
|
|
color = (color[0] + 5, color[1] + 5, color[2] + 5)
|
|
pygame.draw.rect(display, color, (0, i*300, width, 300))
|
|
|
|
pygame.draw.rect(display, (77, 86, 86), (0, height, width, 50))
|
|
|
|
|
|
slingshot.draw(birds[0])
|
|
|
|
for i in range(len(pigs)):
|
|
for j in range(len(blocks)):
|
|
pig_v, block_v = pigs[i].velocity.magnitude, blocks[j].velocity.magnitude
|
|
pigs[i], blocks[j], result_block_pig = physics_engine.collision_handler(pigs[i], blocks[j], "BALL_N_BLOCK")
|
|
pig_v1, block_v1 = pigs[i].velocity.magnitude, blocks[j].velocity.magnitude
|
|
|
|
if result_block_pig:
|
|
if abs(pig_v - pig_v1) > d_velocity:
|
|
blocks_to_remove.append(blocks[j])
|
|
blocks[j].destroy()
|
|
if abs(block_v - block_v1) > d_velocity:
|
|
pigs_to_remove.append(pigs[i])
|
|
pigs[i].dead()
|
|
|
|
for i in range(len(birds)):
|
|
if not (birds[i].loaded or birds[i].velocity.magnitude == 0):
|
|
for j in range(len(blocks)):
|
|
birds_v, block_v = birds[i].velocity.magnitude, blocks[j].velocity.magnitude
|
|
birds[i], blocks[j], result_bird_block = physics_engine.collision_handler(birds[i], blocks[j], "BALL_N_BLOCK")
|
|
birds_v1, block_v1 = birds[i].velocity.magnitude, blocks[j].velocity.magnitude
|
|
|
|
if result_bird_block:
|
|
if abs(birds_v - birds_v1) > d_velocity:
|
|
if not blocks[j] in blocks_to_remove:
|
|
blocks_to_remove.append(blocks[j])
|
|
blocks[j].destroy()
|
|
|
|
for i in range(len(pigs)):
|
|
pigs[i].move()
|
|
for j in range(i+1, len(pigs)):
|
|
pig1_v, pig2_v = pigs[i].velocity.magnitude, pigs[j].velocity.magnitude
|
|
pigs[i], pigs[j], result = physics_engine.collision_handler(pigs[i], pigs[j], "BALL")
|
|
pig1_v1, pig2_v1 = pigs[i].velocity.magnitude, pigs[j].velocity.magnitude
|
|
result = True
|
|
if result:
|
|
if abs(pig1_v - pig1_v1) > d_velocity:
|
|
if not pigs[j] in pigs_to_remove:
|
|
pigs_to_remove.append(pigs[j])
|
|
pigs[j].dead()
|
|
if abs(pig2_v - pig2_v1) > d_velocity:
|
|
if not pigs[i] in pigs_to_remove:
|
|
pigs_to_remove.append(pigs[i])
|
|
pigs[i].dead()
|
|
|
|
for wall in walls:
|
|
pigs[i] = wall.collision_manager(pigs[i])
|
|
|
|
pigs[i].draw()
|
|
|
|
for i in range(len(birds)):
|
|
if (not birds[i].loaded) and birds[i].velocity.magnitude:
|
|
birds[0].move()
|
|
for j in range(len(pigs)):
|
|
bird_v, pig_v = birds[i].velocity.magnitude, pigs[j].velocity.magnitude
|
|
birds[i], pigs[j], result_bird_pig = physics_engine.collision_handler(birds[i], pigs[j], "BALL")
|
|
bird_v1, pig_v1 = birds[i].velocity.magnitude, pigs[j].velocity.magnitude
|
|
result = True
|
|
if result_bird_pig:
|
|
if abs(bird_v - bird_v1) > d_velocity:
|
|
if not pigs[j] in pigs_to_remove:
|
|
pigs_to_remove.append(pigs[j])
|
|
pigs[j].dead()
|
|
|
|
if birds[i].loaded:
|
|
birds[i].project_path()
|
|
|
|
for wall in walls:
|
|
birds[i] = wall.collision_manager(birds[i])
|
|
|
|
birds[i].draw()
|
|
|
|
for i in range(len(blocks)):
|
|
for j in range(i + 1, len(blocks)):
|
|
block1_v, block2_v = blocks[i].velocity.magnitude, blocks[j].velocity.magnitude
|
|
blocks[i], blocks[j], result_block = physics_engine.block_collision_handler(blocks[i], blocks[j])
|
|
block1_v1, block2_v1 = blocks[i].velocity.magnitude, blocks[j].velocity.magnitude
|
|
|
|
if result_block:
|
|
if abs(block1_v - block1_v1) > d_velocity:
|
|
if not blocks[j] in blocks_to_remove:
|
|
blocks_to_remove.append(blocks[j])
|
|
blocks[j].destroy()
|
|
if abs(block2_v - block2_v1) > d_velocity:
|
|
if not blocks[i] in blocks_to_remove:
|
|
blocks_to_remove.append(blocks[i])
|
|
blocks[i].destroy()
|
|
|
|
blocks[i].move()
|
|
|
|
for wall in walls:
|
|
blocks[i] = wall.collision_manager(blocks[i], "BLOCK")
|
|
|
|
blocks[i].draw()
|
|
|
|
for wall in walls:
|
|
wall.draw()
|
|
|
|
score_text.add_text("SCORE: " + str(self.score), 25, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
score_text.draw()
|
|
|
|
birds_remaining.add_text("BIRDS REMAINING: " + str(len(birds)), 25, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
birds_remaining.draw()
|
|
|
|
pigs_remaining.add_text("PIGS REMAINING: " + str(len(pigs)), 25, "Fonts/Comic_Kings.ttf", (236, 240, 241))
|
|
pigs_remaining.draw()
|
|
|
|
mandav.draw()
|
|
|
|
pygame.display.update()
|
|
|
|
if all_rest(pigs, birds, blocks):
|
|
for pig in pigs_to_remove:
|
|
if pig in pigs:
|
|
pigs.remove(pig)
|
|
self.score += 100
|
|
|
|
for block in blocks_to_remove:
|
|
if block in blocks:
|
|
blocks.remove(block)
|
|
self.score += 50
|
|
|
|
pigs_to_remove = []
|
|
blocks_to_remove = []
|
|
|
|
clock.tick(60)
|