-
Notifications
You must be signed in to change notification settings - Fork 0
/
balloon.py
72 lines (63 loc) · 2.96 KB
/
balloon.py
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
__author__ = 'kuba'
import pygame
import utils
from Box2D import *
import random
class Balloon:
def __init__(self, world, coordinates, radius):
self.body = world.CreateDynamicBody()
self.body.position = [utils.calculateBox2DValue(coordinates[0]), utils.calculateBox2DValue(coordinates[1])]
self.body.active = False
self.shape = b2CircleShape()
self.shape.pos = (utils.calculateBox2DValue(0), utils.calculateBox2DValue(0))
self.shape.radius = utils.calculateBox2DValue(radius)
self.has_food_inside = False
self.counter = 0
self.fixtureDef = b2FixtureDef()
self.fixtureDef.shape = self.shape
self.fixtureDef.friction = 0.1
self.fixtureDef.density = 1
self.fixtureDef.restitution = 0.5
self.myFixture = None
def draw(self, screen):
color = pygame.Color(56, 159, 191)
position = self.getPosition()
radius = utils.calculatePygameValue(self.shape.radius)
surface = pygame.Surface((2*radius, 2*radius))
surface.fill((0,255,0))
surface.set_colorkey((0,255,0))
surface.set_alpha(200)
pygame.draw.circle(surface, color, [radius,radius], radius)
screen.blit(surface, [position[0]-radius, position[1]-radius, 2*radius, 2*radius])
if(self.has_food_inside):
half_radius = radius/2
font = pygame.font.Font('gfx/font.ttf', half_radius)
size = font.size(str(self.counter))
text = font.render(str(self.counter), True, [50, 50, 150])
screen.blit(text, [position[0]-size[0]/2, position[1]-size[1]/2])
def getPosition(self):
return [utils.calculatePygameValue(self.body.position[0]), utils.calculatePygameValue(self.body.position[1])]
def getRadius(self):
return utils.calculatePygameValue(self.shape.radius)
def destroyBody(self, world):
self.body.active = False
world.DestroyBody(self.body)
def reloadFixture(self):
self.body.DestroyFixture(self.myFixture)
self.myFixture = self.body.CreateFixture(self.fixtureDef)
def getFoodInside(self, food_machine):
ball_position = self.getPosition()
radius = self.getRadius()
i = 0
while i < len(food_machine.pieces_of_food):
piece_position = [utils.calculatePygameValue(food_machine.pieces_of_food[i].position[0]), utils.calculatePygameValue(food_machine.pieces_of_food[i].position[1])]
if piece_position[0] > 145 and utils.distanceBetweenPoints(ball_position, piece_position) < radius:
self.counter = self.counter + 1
self.has_food_inside = True
food_machine.removePieceAt(i)
else:
i = i + 1
def releaseAshes(self, food_machine):
for i in range(self.counter):
position = [self.body.position[0]+random.random()/80, self.body.position[1]+random.random()/80]
food_machine.createPieceOfFood(position, radius=2)