diff --git a/avocado.py b/avocado.py index 25ac99d..edb6614 100644 --- a/avocado.py +++ b/avocado.py @@ -7,8 +7,11 @@ class Avocado: def __init__(self, screen, color, size, select, sound=True, filename='img/AvoCado_0.png'): # We randomly decide whether we should instanciate or not + # I'd rather just not return an instance, + # but I don't know how to do that :( if random.randint(0,1) == 0: self.is_falling = False + self.has_been_pinned = False return None print('New avocado is ' + ','.join(str(color))) @@ -31,6 +34,7 @@ class Avocado: self.vx = 10 self.vy = 10 self.is_falling = True + self.has_been_pinned = False def blitme(self): @@ -42,24 +46,24 @@ class Avocado: self.rect.y = random.randint(20, 70) - def collides(self, click): + def isHit(self, click): """ Checks whether this object collides with the given position - in click + of a mouse-click """ mousex, mousey = click if self.rect.left < mousex and self.rect.right > mousex and \ - self.rect.top < mousey and self.rect.bottom > mousey and \ - self.color == self.select: - self.destroy() - return True + self.rect.top < mousey and self.rect.bottom > mousey: + + if self.color == self.select: + self.has_been_pinned = True + return True + else: + return False - def destroy(self): - """destroys this object""" - del(self) def exists(self): - return self.is_falling + return not self.has_been_pinned and self.is_falling def move(self): @@ -80,6 +84,7 @@ class Avocado: print('platch') return True + def mute(self,mute=False): if not sound: return @@ -109,3 +114,6 @@ class Avocado: return self.click = pygame.mixer.Sound("audio/click.wav") return self.click + + def destroy(self): + del(self) diff --git a/game.py b/game.py index a9e9b9a..b82b9b0 100755 --- a/game.py +++ b/game.py @@ -10,6 +10,7 @@ from pygame.locals import * from support.colors import * from interface import hud + def initialize_screen(): displayInfo = pygame.display.Info() zoom = 1.3 @@ -77,8 +78,6 @@ def main(): timeleft -= time_passed / 1000 timeleft = round(timeleft, 2) - - if timeleft <= 0: screen_width, screen_height = size screen.blit(game_over, (screen_width/3, screen_height/2)) @@ -101,6 +100,8 @@ def main(): a = avocado.Avocado(screen, avocolor, avosize, color, noSound) avocados.append(a) + # Remove avocados from the list if they no longer exist + # E.g. have been pinned or fallen down avocados[:] = [ x for x in avocados if x.exists() ] for a in avocados: a.move() @@ -111,9 +112,12 @@ def main(): # Collision detection if event.type == MOUSEBUTTONDOWN: for avo in avocados: - if avo.collides(pygame.mouse.get_pos()): + hit = avo.isHit(pygame.mouse.get_pos()) + if hit: score += 100 - avo.init_pos() + elif hit == False: + score -= 50 + # Had enough of this? if event.type == pygame.QUIT: running = False diff --git a/requirements.txt b/requirements.txt index e69de29..7a557c7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -0,0 +1 @@ +hg+https://bitbucket.org/pygame/pygame