Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLuiz 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)
commitf1d9d6245ef8ab5d19adde2d52c59a625a30792a (patch)
tree3184a7bb9793f4ebb3755eee9fa7c46cfcfa6371
parent158e54c9933f5a244ff27199e4e5786f3add2186 (diff)
V10, 12 horas
-rw-r--r--Gambiarra/gambiarra.py112
-rw-r--r--Gambiarra/levels.py51
-rw-r--r--Gambiarra/objects/animals.py1
-rw-r--r--Gambiarra/objects/balls.py1
-rw-r--r--Gambiarra/objects/things.py7
-rw-r--r--GambiarraActivity.py2
-rw-r--r--MANIFEST4
-rw-r--r--data/images/obj-level1.pngbin0 -> 219753 bytes
-rw-r--r--data/images/obj-level2.pngbin0 -> 215764 bytes
-rwxr-xr-xdata/images/obj-level3.pngbin0 -> 217241 bytes
-rwxr-xr-xdata/images/penguin.pngbin424 -> 1863 bytes
-rw-r--r--[-rwxr-xr-x]data/snd/BowlingBall.wavbin75036 -> 75036 bytes
-rw-r--r--data/snd/Congrats.wavbin0 -> 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)
diff --git a/MANIFEST b/MANIFEST
index 7e69a94..98cf82e 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -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
new file mode 100644
index 0000000..7156fbe
--- /dev/null
+++ b/data/images/obj-level1.png
Binary files differ
diff --git a/data/images/obj-level2.png b/data/images/obj-level2.png
new file mode 100644
index 0000000..d0fb6e2
--- /dev/null
+++ b/data/images/obj-level2.png
Binary files differ
diff --git a/data/images/obj-level3.png b/data/images/obj-level3.png
new file mode 100755
index 0000000..8c83ead
--- /dev/null
+++ b/data/images/obj-level3.png
Binary files differ
diff --git a/data/images/penguin.png b/data/images/penguin.png
index 0b585f8..b528bf5 100755
--- a/data/images/penguin.png
+++ b/data/images/penguin.png
Binary files differ
diff --git a/data/snd/BowlingBall.wav b/data/snd/BowlingBall.wav
index 9e45def..2bb3c41 100755..100644
--- a/data/snd/BowlingBall.wav
+++ b/data/snd/BowlingBall.wav
Binary files differ
diff --git a/data/snd/Congrats.wav b/data/snd/Congrats.wav
new file mode 100644
index 0000000..114f7ff
--- /dev/null
+++ b/data/snd/Congrats.wav
Binary files differ