Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/gambiarra.py
diff options
context:
space:
mode:
Diffstat (limited to 'gambiarra.py')
-rwxr-xr-x[-rw-r--r--]gambiarra.py211
1 files changed, 183 insertions, 28 deletions
diff --git a/gambiarra.py b/gambiarra.py
index 8996dc1..2c23a36 100644..100755
--- a/gambiarra.py
+++ b/gambiarra.py
@@ -2,9 +2,9 @@
# -*- coding: UTF-8 -*-
#
# Copyright (C) 2007 by ULPM: Alexandre Yukio Harano
-# Fábio Cassarotti Parronchi Navarro
-# Gabriel Geraldo França Marcondes
-# Luiz Carlos Irber Júnior
+# Fábio Cassarotti Parronchi Navarro
+# Gabriel Geraldo França Marcondes
+# Luiz Carlos Irber Júnior
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
@@ -21,34 +21,189 @@
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
import sys
-import os.path
-from optparse import OptionParser
+import os
+import gtk
+import pygame
-# add the libs subdir to the path
-basedir = os.path.abspath(os.curdir)
-libdir = os.path.join(basedir, "libs")
+from command import Play, Help, Quit
+from gamemenu import GameMenu
+import levels as Levels
-if not libdir in sys.path:
- sys.path.insert(0, libdir)
+from objects import Esteira, check_collision
-from Gambiarra.gambiarra import Game
+class Game(object):
+ # controle do jogo
+ fps = 30
+ playing = None
+ running = None
+ clock = None
+ level = 0
+ levels = []
+ selected_element = None
+ _showed_help = None
+ count = None
+ play_sounds = None
-def main(play_sounds=True):
- game = Game(play_sounds)
- game.run()
+ # elementos do jogo
+ screen = None
+ menu = None
+ congrats = None
+ congrats_snd = None
+
+ def __init__(self, play_sounds=True, running_sugar=True):
+ self.play_sounds = play_sounds
+ self.running_sugar = running_sugar
+ self.running = True
+ self.playing = False
+ self._showed_help = False
+ self.count = 0
+
+ def load_all(self):
+ pygame.init()
+ if self.play_sounds:
+ pygame.mixer.init()
+ self.screen = pygame.display.get_surface()
+ if self.screen is None:
+ self.screen = pygame.display.set_mode((1200, 900))
+ pygame.display.flip()
+ pygame.display.set_caption("Gambiarra")
+ self.clock = pygame.time.Clock()
+ self.levels = Levels.init_levels()
+ self.menu = GameMenu()
+ self.congrats = pygame.image.load(os.path.join("data","images",
+ "fim_fase.png"))
+ if self.play_sounds:
+ snd_file = os.path.join("data", "snd", "Congrats.wav")
+ self.congrats_snd = pygame.mixer.Sound(snd_file)
+
+ def run(self):
+ self.load_all()
+ self.main_loop()
+
+ def event_handler(self):
+ #GTK events
+ while gtk.events_pending():
+ gtk.main_iteration()
+ for event in pygame.event.get():
+ if event.type == pygame.MOUSEBUTTONDOWN:
+ self.mouse_event( pygame.mouse.get_pos() )
+ elif (event.type == pygame.QUIT) and not self.running_sugar:
+ self.running = False
+
+ 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.static_objs)
+ self.levels[self.level].simulator.objects = objs
+ for obj in self.levels[self.level].simulator.objects:
+ obj.update()
+ else:
+ if self.selected_element:
+ if self.selected_element.editable:
+ self.selected_element.rect.center = pygame.mouse.get_pos()
+
+ def mouse_event(self, mouse_pos):
+ if not self.selected_element:
+ mouse_move = (0, 0)
+ mouse_move = pygame.mouse.get_rel()
+
+ for element in self.levels[self.level].simulator.objects:
+ if element.rect.collidepoint(mouse_pos):
+ self.selected_element = element
+ break
+
+ if not self.selected_element:
+ for element in self.levels[self.level].simulator.static_objs:
+ if element.rect.collidepoint(mouse_pos):
+ 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(mouse_pos):
+ element.remove(self.levels[self.level].objbar.objects)
+ 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(mouse_pos):
+ if isinstance(element, Play):
+ element.image = pygame.transform.flip(element.image,
+ True, False)
+ self.playing = not self.playing
+ if not self.playing:
+ objs = self.levels[self.level].simulator.objects
+ for obj in objs:
+ obj.speed = [0, 0]
+ obj.rect.topleft = obj.initial_pos
+ elif isinstance(element, Help):
+ self.levels[self.level].show_help(self.screen)
+ elif isinstance(element, Quit):
+ sys.exit()
+ break
+
+ else:
+ if self.selected_element.editable and not self.playing:
+ mouse_move = pygame.mouse.get_rel()
+ if mouse_move != (0, 0):
+ self.count -= 1
+ self.selected_element.rect.center = pygame.mouse.get_pos()
+ new_pos = self.selected_element.rect.topleft
+ self.selected_element.initial_pos = new_pos
+ self.selected_element = None
+
+ def show_congratulations(self):
+ if self.play_sounds:
+ pygame.mixer.stop()
+ self.congrats_snd.play()
+
+ self.screen.blit(self.congrats, (600 - self.congrats.get_width()/2,
+ 450 - self.congrats.get_height()/2) )
+ pygame.display.flip()
+
+ while True:
+ #GTK events
+ while gtk.events_pending():
+ gtk.main_iteration()
+ for event in pygame.event.get():
+ if event.type == pygame.MOUSEBUTTONDOWN:
+ return
+
+ def main_loop(self):
+ self.menu.run()
+ while self.running and self.level < len(self.levels):
+ while not self.levels[self.level].goal_reached() and self.running:
+ 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()
+
+ if self.running:
+ self.playing = False
+ self._showed_help = False
+ self.level += 1
+ self.show_congratulations()
+ if (len(self.levels) == self.level) :
+ self.running = False
if __name__ == "__main__":
- parser = OptionParser()
- parser.add_option('-p', '--profile', action='store_true',
- dest='profile', default=False,
- help='run in profiling mode [default: %default]')
- parser.add_option('-s', '--no-sound', action='store_true',
- dest='sound', default=False,
- help='disable sounds [default: %default]')
- options, args = parser.parse_args()
-
- if options.profile:
- import cProfile
- cProfile.run('main()', filename='gambiarra.cprof')
- else:
- main(options.sound)
+ g = Game(running_sugar=False)
+ g.run()
+