diff options
Diffstat (limited to 'gambiarra.py')
-rwxr-xr-x[-rw-r--r--] | gambiarra.py | 211 |
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() + |