diff options
author | Luiz Irber <luiz.irber@gmail.com> | 2007-11-11 13:59:51 (GMT) |
---|---|---|
committer | Luiz Irber <luiz.irber@gmail.com> | 2007-11-11 13:59:51 (GMT) |
commit | f1d9d6245ef8ab5d19adde2d52c59a625a30792a (patch) | |
tree | 3184a7bb9793f4ebb3755eee9fa7c46cfcfa6371 | |
parent | 158e54c9933f5a244ff27199e4e5786f3add2186 (diff) |
V10, 12 horas
-rw-r--r-- | Gambiarra/gambiarra.py | 112 | ||||
-rw-r--r-- | Gambiarra/levels.py | 51 | ||||
-rw-r--r-- | Gambiarra/objects/animals.py | 1 | ||||
-rw-r--r-- | Gambiarra/objects/balls.py | 1 | ||||
-rw-r--r-- | Gambiarra/objects/things.py | 7 | ||||
-rw-r--r-- | GambiarraActivity.py | 2 | ||||
-rw-r--r-- | MANIFEST | 4 | ||||
-rw-r--r-- | data/images/obj-level1.png | bin | 0 -> 219753 bytes | |||
-rw-r--r-- | data/images/obj-level2.png | bin | 0 -> 215764 bytes | |||
-rwxr-xr-x | data/images/obj-level3.png | bin | 0 -> 217241 bytes | |||
-rwxr-xr-x | data/images/penguin.png | bin | 424 -> 1863 bytes | |||
-rw-r--r--[-rwxr-xr-x] | data/snd/BowlingBall.wav | bin | 75036 -> 75036 bytes | |||
-rw-r--r-- | data/snd/Congrats.wav | bin | 0 -> 1564412 bytes |
13 files changed, 142 insertions, 36 deletions
diff --git a/Gambiarra/gambiarra.py b/Gambiarra/gambiarra.py index b9144bc..9c074e0 100644 --- a/Gambiarra/gambiarra.py +++ b/Gambiarra/gambiarra.py @@ -23,7 +23,10 @@ import pygame from pygame.locals import * import os +import sys +from os.path import abspath import levels as Levels +from objects.animals import * from objects.elastica import Elastica from objects.esteira import Esteira from objects.target import Target @@ -38,6 +41,29 @@ def check_collision(sprite_list, wall_list): obj.add(new_objects) for s in sprite_list: + hitbox = obj.rect.inflate(5,5) + if hitbox.colliderect(s.rect): + if obj.rect.left < s.rect.right: + aux = obj.speed[0] + obj.speed[0]=s.speed[0] + s.speed[0]=aux + obj.rect.left = s.rect.right-1 + if obj.rect.left > s.rect.right : + aux = obj.speed[0] + obj.speed[0]=s.speed[0] + s.speed[0]=aux + obj.rect.right = srect.left-1 + if obj.rect.bottom > s.rect.top: + aux = obj.speed[1] + obj.speed[1]=s.speed[1] + s.speed[1]=aux + obj.rect.bottom = s.rect.top-1 + if obj.rect.top < s.rect.bottom: + aux = obj.speed[1] + obj.speed[1]=s.speed[1] + s.speed[1]=aux + obj.rect.top = s.rect.bottom+1 + #TODO: verifica colisao de objetos dinamicos pass @@ -47,7 +73,10 @@ def check_collision(sprite_list, wall_list): if isinstance(w, DownWall): if obj.rect.bottom > w.rect.top: obj.rect.bottom = w.rect.top - 1 - obj.speed[1] = -0.7*obj.speed[1] + if isinstance(obj,Penguin): + obj.speed[1] = 0 + else: + obj.speed[1] = -0.7*obj.speed[1] #1. a**n + b**n = c**n ? if isinstance(w, UpWall): if obj.rect.top < w.rect.bottom: @@ -68,8 +97,11 @@ def check_collision(sprite_list, wall_list): if (obj.rect.midbottom > w.rect.top and obj.rect.bottom < w.rect.bottom): obj.rect.bottom = w.rect.top - obj.speed[0] += w.sentido*3 - obj.speed[1] = 0 + obj.speed[0] = w.sentido*15 + if isinstance(obj,Penguin): + obj.speed[1] = 0 + else: + obj.speed[1] = -0.7*obj.speed[1] if isinstance(w, Elastica): if (obj.rect.midbottom > w.rect.top and @@ -94,9 +126,14 @@ class Game(object): levels = [] selected_element = None menu = None + congrats = None + congratsSnd = None + _showed_help = None + count = None def __init__(self): pygame.init() + pygame.mixer.init() self.screen = pygame.display.set_mode((1200,900)) #omitindo flags pygame.display.flip() self.run = True @@ -105,6 +142,10 @@ class Game(object): self.clock = pygame.time.Clock() self.levels = Levels.init_levels() self.menu = GameMenu() + self.congrats = pygame.image.load("../data/images/fim_fase.png") + self.congratsSnd = pygame.mixer.Sound(abspath("../data/snd/Congrats.wav")) + self._showed_help = False + self.count = 0 #inicia o loop self.main_loop() @@ -117,6 +158,7 @@ class Game(object): def update_screen(self, fps): #update dos elementos da tela if self.playing: + # executa a simulacao objs = check_collision(self.levels[self.level].simulator.objects, self.levels[self.level].simulator.staticObjs) @@ -126,16 +168,20 @@ class Game(object): if obj.mobility: newpos = obj.rect.move((obj.speed[0],obj.speed[1])) obj.rect = newpos - if obj.speed[0]: - obj.speed[0] *= 0.99 - else: - obj.speed[0] = 20 + obj.speed[0] *= 0.99 obj.speed[1] += obj.gravity + else: + if self.selected_element: + if self.selected_element.editable: + self.selected_element.rect.center = pygame.mouse.get_pos() + def goal_reached(self): reached = False - if self.levels[self.level].goal.rect.collidepoint(self.levels[self.level].toGoal.rect.center): - reached = True + if self.level < len(self.levels): + if self.levels[self.level].goal.rect.collidepoint( + self.levels[self.level].toGoal.rect.center): + reached = True return reached def mouse_event(self, mousePos): @@ -143,7 +189,7 @@ class Game(object): collided = False mouseMove = (0,0) mouseMove = pygame.mouse.get_rel() - + for element in self.levels[self.level].simulator.objects: if element.rect.collidepoint(mousePos): collided = True @@ -155,8 +201,14 @@ class Game(object): if element.rect.collidepoint(mousePos): collided = True self.selected_element = element + + if isinstance(element,Esteira) and element.editable: + self.count += 1 + if self.count == 1: + element.sentido=-element.sentido + self.count = 0 break - + if not self.selected_element: #se nao encontrou no for anterior for element in self.levels[self.level].objbar.objects: if element.rect.collidepoint(mousePos): @@ -165,7 +217,7 @@ class Game(object): self.levels[self.level].simulator.add(element) self.selected_element = element break - + if not self.selected_element: #se nao encontrou no for anterior for element in self.levels[self.level].cmdbar.commands: if element.rect.collidepoint(mousePos): @@ -177,37 +229,57 @@ class Game(object): for element in self.levels[self.level].simulator.objects: element.speed = [0,0] element.rect.topleft = element.initialPosition - elif isinstance(element, Help): - #TODO: como mostrar a ajuda? - pass + self.levels[self.level].show_help(self.screen) elif isinstance(element, Quit): - self.run = False + sys.exit() break + else: - mouseMove = pygame.mouse.get_rel() - if self.selected_element.editable: - self.selected_element.rect = self.selected_element.rect.move(mouseMove) + if self.selected_element.editable and not self.playing: + mouseMove = pygame.mouse.get_rel() + if mouseMove != (0,0): + self.count -= 1 + self.selected_element.rect.center = pygame.mouse.get_pos() + #self.selected_element.rect = self.selected_element.rect.move(mouseMove) self.selected_element.initialPosition = self.selected_element.rect.topleft self.selected_element = None + def show_congratulations(self): + self.congratsSnd.play() + self.screen.blit(self.congrats, (600 - self.congrats.get_width()/2, + 450 - self.congrats.get_height()/2) ) + pygame.display.flip() + while True: + for event in pygame.event.get(): + if event.type == MOUSEBUTTONDOWN: + return def main_loop(self): self.menu.run() while self.run: goal = self.goal_reached() - while not goal: + while (not goal and + self.level < len(self.levels)): self.event_handler() self.clock.tick(self.fps) self.update_screen(self.fps) self.levels[self.level].draw() + if not self._showed_help: + self.levels[self.level].show_help(self.screen) + self._showed_help = True + pygame.display.flip() goal = self.goal_reached() self.playing = False + self._showed_help = False goal = False self.level += 1 + self.show_congratulations() + if (len(self.levels) == self.level) : + self.run = False def main(): game = Game() diff --git a/Gambiarra/levels.py b/Gambiarra/levels.py index 9c6beeb..b1206d2 100644 --- a/Gambiarra/levels.py +++ b/Gambiarra/levels.py @@ -20,6 +20,7 @@ # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import pygame +from pygame.locals import * from objects.balls import * from objects.animals import * from objects.elastica import * @@ -130,18 +131,27 @@ class Level(object): on the screen""" objects = None - def __init__(self, objInPlace, objToAdd, goal, toGoal): + def __init__(self, objInPlace, objToAdd, goal, toGoal, helpImage): self.simulator = SimulationView(objInPlace) self.objbar = ObjectBar(objToAdd) self.cmdbar = CommandBar() self.goal = goal self.toGoal = toGoal + self.helpImage = helpImage def draw(self): self.simulator.draw() self.objbar.draw() self.cmdbar.draw() + def show_help(self, screen): + screen.blit(self.helpImage, (600 - self.helpImage.get_width()/2, + 450 - self.helpImage.get_height()/2) ) + pygame.display.flip() + while True: + for event in pygame.event.get(): + if event.type == MOUSEBUTTONDOWN: + return def init_levels(): #FIXME: fazer de um jeito menos lusitano @@ -152,21 +162,38 @@ def init_levels(): level1ObjToAdd = [ Penguin() ] level1Goal = level1ObjInPlace[-1] level1ToGoal = level1ObjInPlace[0] + level1HelpImage = pygame.image.load("../data/images/obj-level1.png") - level2ObjInPlace = [ Penguin((300,600),editable=False), - Esteira((20,650),editable=False), + level2ObjInPlace = [ Penguin((300,500),editable=False), Target((500,600), editable=False)] - level2ObjToAdd = [ BeachBall(), Penguin(), BowlingBall() ] + level2ObjToAdd = [ Esteira() ] level2Goal = level2ObjInPlace[-1] level2ToGoal = level2ObjInPlace[0] + level2HelpImage = pygame.image.load("../data/images/obj-level2.png") - level3ObjInPlace = [ BowlingBall((200,700),editable=False), Penguin((500, 800),editable=False)] - level3ObjToAdd = [ Penguin(), BeachBall() ] + level3ObjInPlace = [ BowlingBall((20,20), editable=False), + Esteira((10, 300),editable=False), + Target((1100, 20), editable=False)] + level3ObjToAdd = [ Elastica(), Elastica()] level3Goal = level3ObjInPlace[-1] level3ToGoal = level3ObjInPlace[0] - - level1 = Level( level1ObjInPlace, level1ObjToAdd, level1Goal, level1ToGoal) - level2 = Level( level2ObjInPlace, level2ObjToAdd, level2Goal, level2ToGoal) - level3 = Level( level3ObjInPlace, level3ObjToAdd, level3Goal, level3ToGoal) - - return [level1, level2, level3]
\ No newline at end of file + level3HelpImage = pygame.image.load("../data/images/obj-level3.png") + + level4ObjInPlace = [ BowlingBall((20,20), editable=False), + SoccerBall((800, 300),editable=False), + Target((1100, 20), editable=False)] + level4ObjToAdd = [ Esteira(), Esteira()] + level4Goal = level4ObjInPlace[-1] + level4ToGoal = level4ObjInPlace[0] + level4HelpImage = pygame.image.load("../data/images/obj-level3.png") + + level1 = Level( level1ObjInPlace, level1ObjToAdd, level1Goal, + level1ToGoal, level1HelpImage) + level2 = Level( level2ObjInPlace, level2ObjToAdd, level2Goal, + level2ToGoal, level2HelpImage) + level3 = Level( level3ObjInPlace, level3ObjToAdd, level3Goal, + level3ToGoal, level3HelpImage) + level4 = Level( level4ObjInPlace, level4ObjToAdd, level4Goal, + level4ToGoal, level4HelpImage) + + return [level1, level2, level3, level4]
\ No newline at end of file diff --git a/Gambiarra/objects/animals.py b/Gambiarra/objects/animals.py index 1399731..148171a 100644 --- a/Gambiarra/objects/animals.py +++ b/Gambiarra/objects/animals.py @@ -31,3 +31,4 @@ class Penguin(Thing): pygame.image.load(abspath("../data/images/penguin.png")), editable, initialPosition, elasticity = 100, mobility = True, gravity = 1) + self.speed=[5,0] diff --git a/Gambiarra/objects/balls.py b/Gambiarra/objects/balls.py index 58021e6..1e40f92 100644 --- a/Gambiarra/objects/balls.py +++ b/Gambiarra/objects/balls.py @@ -31,6 +31,7 @@ class BowlingBall(Thing): pygame.image.load(abspath("../data/images/bolaBoliche.png")), editable, initialPosition, elasticity = 100, mobility = True, gravity = 10) + self.snd = pygame.mixer.Sound(abspath("../data/snd/BowlingBall.wav")) class BeachBall(Thing): def __init__(self, initialPosition=None, editable=True): diff --git a/Gambiarra/objects/things.py b/Gambiarra/objects/things.py index da440d0..b1d1e37 100644 --- a/Gambiarra/objects/things.py +++ b/Gambiarra/objects/things.py @@ -29,6 +29,7 @@ class Thing(pygame.sprite.Sprite): editable = None speed = None gravity = None + snd = None elasticity = None # * 1%, from 0 up to 100 def __init__(self, image, editable, initialPosition=None, @@ -50,6 +51,6 @@ class Thing(pygame.sprite.Sprite): # temos a imagem na variavel <img> e # o 'zero' (ponto onde deve ser desenhado <pos> screen.blit(self.image, (pos[0],pos[1])) - - def collision(self): - pass
\ No newline at end of file + + def play(self): + snd.play() diff --git a/GambiarraActivity.py b/GambiarraActivity.py index f9a9c84..038f559 100644 --- a/GambiarraActivity.py +++ b/GambiarraActivity.py @@ -24,7 +24,7 @@ import olpcgames import logging class GambiarraActivity(olpcgames.PyGameActivity): - + print "iniciou atividade" game_name = 'Gambiarra.gambiarra:main' game_title = "Gambiarra" game_size = (1200, 900) @@ -19,6 +19,9 @@ data/images/leftwall.png data/images/next.png data/images/nivel_hover.png data/images/nivel_normal.png +data/images/obj-level1.png +data/images/obj-level2.png +data/images/obj-level3.png data/images/penguin.png data/images/pen.png data/images/playButton.png @@ -31,6 +34,7 @@ data/images/target.png data/images/upwall.png data/snd/BowlingBall.wav +data/snd/Congrats.wav Gambiarra/__init__.py Gambiarra/gambiarra.py diff --git a/data/images/obj-level1.png b/data/images/obj-level1.png Binary files differnew file mode 100644 index 0000000..7156fbe --- /dev/null +++ b/data/images/obj-level1.png diff --git a/data/images/obj-level2.png b/data/images/obj-level2.png Binary files differnew file mode 100644 index 0000000..d0fb6e2 --- /dev/null +++ b/data/images/obj-level2.png diff --git a/data/images/obj-level3.png b/data/images/obj-level3.png Binary files differnew file mode 100755 index 0000000..8c83ead --- /dev/null +++ b/data/images/obj-level3.png diff --git a/data/images/penguin.png b/data/images/penguin.png Binary files differindex 0b585f8..b528bf5 100755 --- a/data/images/penguin.png +++ b/data/images/penguin.png diff --git a/data/snd/BowlingBall.wav b/data/snd/BowlingBall.wav Binary files differindex 9e45def..2bb3c41 100755..100644 --- a/data/snd/BowlingBall.wav +++ b/data/snd/BowlingBall.wav diff --git a/data/snd/Congrats.wav b/data/snd/Congrats.wav Binary files differnew file mode 100644 index 0000000..114f7ff --- /dev/null +++ b/data/snd/Congrats.wav |