Exemple #1
0
 def run(self):
     startsound.play()
     pygame.mixer.music.load("music/shootingstars.ogg")
     pygame.mixer.music.play(-1)
     self.events = EventGenerator()
     self.events.add_listener(FigureMoveListener(self.player.move))
     self.events.add_listener(FigureMoveListener(self.unstuck_ghosts))
     self.events.add_listener(FigureColorListener(self.player.set_color))
     self.events.add_listener(ExitListener(self.exit_game))
     with draw_timer(self, self.events):
         self.events.event_loop()
Exemple #2
0
 def event_loop(self,
                figure_moves=None,
                exit=True,
                draw_func=None,
                keymap=None,
                delay=20):
     self.events = EventGenerator()
     if figure_moves:
         self.events.add_listener(FigureMoveListener(figure_moves))
     if keymap:
         self.events.add_listener(EventListener(keymap=keymap))
     if exit:
         self.events.add_listener(ExitListener(self.events.exit_signalled))
     with draw_timer(draw_func, self.events, delay=delay):
         self.events.event_loop()
Exemple #3
0
    def run(self):
        self.events = EventGenerator()

        self.events.add_listener(FigureMoveListener(self.snake.set_direction))
        self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(self, self.events):
            self.events.event_loop()
Exemple #4
0
 def run(self):
     self.mode = self.update_ingame
     self.events = EventGenerator()
     self.events.add_listener(FigureMoveListener(self.pac.move))
     self.events.add_listener(ExitListener(self.events.exit_signalled))
     with draw_timer(self, self.events):
         self.events.event_loop()
Exemple #5
0
class Boxes:

    def __init__(self):
        self.screen = Screen(Vector(600, 400), 'data/background.png')
        self.frame = Frame(self.screen, Rect(64, 64, 320, 320))
        tile_factory = TileFactory('data/tiles.conf')
        self.tm = TiledMap(self.frame, tile_factory)
        self.player = Sprite(self.frame, tile_factory.get('b.tail'), Vector(4, 1), speed=2)
        self.tm.set_map(BOXMAP)
        self.draw()
        self.events = None

    def draw(self):
        self.tm.draw()
        self.player.draw()
        pygame.display.update()

    def move(self, direction):
        nearpos = self.player.pos + direction
        farpos = nearpos + direction
        near = self.tm.at(nearpos)
        far = self.tm.at(farpos)
        if near == '#': 
            return
        if near in 'xX' and far in '#xX': 
            return
        else:
            # move possible
            moves = MoveGroup()
            self.player.add_move(direction)
            moves.add(self.player)
            if near in 'xX':
                # crate moved
                floor = near=='x' and '.' or '*'
                insert = far=='*' and 'X' or 'x'
                moves.add(MapMove(self.tm, nearpos, direction, 1, floor_tile=floor, insert_tile=insert))

        wait_for_move(moves, self.screen, self.draw, 0.01)

        self.tm.cache_map()
        self.draw()
        self.check_complete()

    def check_complete(self):
        s = self.tm.get_map()
        if s.count('X') == 4:
            print("\nCongratulations!\n")
            time.sleep(2)
            self.events.exit_signalled()

    def run(self):
        self.events = EventGenerator()
        self.events.add_listener(FigureMoveListener(self.move))
        self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(self, self.events):     
            self.events.event_loop()
Exemple #6
0
class CollectFruit:

    def __init__(self, screen):
        self.screen = screen
        self.frame = Frame(self.screen, Rect(64, 64, 320, 320))
        tile_factory = TileFactory('data/tiles.conf')
        self.tm = TiledMap(self.frame, tile_factory)
        self.player = Sprite(self.frame, tile_factory.get('b.pac_right'), Vector(4, 1), speed=2)
        self.tm.set_map(FRUITMAP)
        self.draw()
        self.events = None
        self.score = 0

    def draw(self):
        self.tm.draw()
        self.player.draw()
        pygame.display.update()

    def move(self, direction):
        nearpos = self.player.pos + direction
        near = self.tm.at(nearpos)
        if near == '#':
            return
        self.player.add_move(direction)
        wait_for_move(self.player, self.screen, self.draw, 0.01)
        self.check_player_square()

    def check_player_square(self):
        field = self.tm.at(self.player.pos)
        if field == '*':
            time.sleep(1)
            self.events.exit_signalled()
        elif field in 'abcdefgh':
            self.score += 100
            self.tm.set_tile(self.player.pos, '.')
            self.tm.cache_map()
            self.draw()

    def run(self):
        self.events = EventGenerator()
        self.events.add_listener(FigureMoveListener(self.move))
        self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(self, self.events):
            self.events.event_loop()
Exemple #7
0
class SnakeGame:

    def __init__(self, screen):
        self.screen = screen
        self.tile_factory = TileFactory('data/tiles.conf')

        self.level = None
        self.snake = None
        self.status_box = None
        self.events = None
        self.score = 0

        self.create_level()
        self.create_snake()
        self.create_status_box()

        self.update_mode = self.update_ingame
        self.move_delay = MOVE_DELAY
        self.delay = MOVE_DELAY

    def create_snake(self):
        start_pos = Vector(5, 5)
        frame = Frame(self.screen, Rect(10, 10, 640, 512))
        self.snake = SnakeSprite(frame, self.tile_factory, start_pos, self.level)
        self.snake.set_direction(RIGHT)
        
    def create_level(self):
        frame = Frame(self.screen, Rect(10, 10, 640, 512))
        tmap = TiledMap(frame, self.tile_factory)
        self.level = SnakeLevel(LEVEL, tmap)
        self.level.place_random_fruit()

    def create_status_box(self):
        frame = Frame(self.screen, Rect(660, 20, 200, 200))
        self.status_box = DictBox(frame, {'score':0})

    def update_finish_moves(self):
        """finish movements before Game Over"""
        if not self.snake.is_moving():
            pygame.display.update()
            time.sleep(1)
            self.events.exit_signalled()

    def update_ingame(self):
        self.delay -= 1
        if self.delay <=0:
            self.delay = self.move_delay
            self.snake.move_forward()
        if self.snake.eaten and not self.snake.is_moving():
            self.level.remove_fruit(self.snake.head.pos)
            self.level.place_random_fruit()
            self.status_box.data['score'] += 100
            self.snake.eaten = None
        if self.snake.crashed:
            self.update_mode = self.update_finish_moves
            self.score = self.status_box.data['score']

    def update(self):
        self.update_mode()
        self.snake.move()

    def draw(self):
        self.update()
        self.level.draw()
        self.snake.draw()
        self.status_box.draw()
        pygame.display.update()

    def run(self):
        self.events = EventGenerator()

        self.events.add_listener(FigureMoveListener(self.snake.set_direction))
        self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(self, self.events):
            self.events.event_loop()
Exemple #8
0
 def run(self):
     self.events = EventGenerator()
     self.events.add_listener(FigureMoveListener(self.spaceship.set_direction))
     self.events.add_listener(ExitListener(self.events.exit_signalled))
     with draw_timer(self, self.events):
         self.events.event_loop()
Exemple #9
0
class SpaceRaceGame:

    def __init__(self, screen):
        self.screen = screen
        self.tile_factory = TileFactory()

        self.starscape = None
        self.level = None
        self.spaceship = None
        self.status_box = None
        self.events = None
        self.score = 0

        self.create_starscape()
        self.create_level()
        self.create_status_box()

        self.update_mode = self.update_ingame
        self.move_delay = MOVE_DELAY
        self.delay = MOVE_DELAY

    def create_starscape(self):
        frame = Frame(self.screen, Rect(0, 0, 800, 600))
        self.starscape = StarScape(frame)

    def create_level(self):
        frame = Frame(self.screen, Rect(10, 10, 640, 512))
        self.level = SpaceshipLevel(frame, self.tile_factory)
        self.spaceship = SpaceshipSprite(frame, self.tile_factory, Vector(1, 1), self.level)

    def create_status_box(self):
        frame = Frame(self.screen, Rect(660, 20, 200, 50))
        self.status_box = DictBox(frame, {'score': 0})

    def update_finish_moves(self):
        """finish movements before Game Over"""
        if not self.spaceship.is_moving():
            pygame.display.update()
            time.sleep(1)
            self.events.exit_signalled()

    def update_ingame(self):
        self.delay -= 1
        if self.delay <= 0:
            self.delay = self.move_delay
            self.spaceship.move_forward()
        if self.spaceship.crashed:
            self.update_mode = self.update_finish_moves
            self.score = 0
        if self.spaceship.finished:
            self.update_mode = self.update_finish_moves
            self.score = 1000

    def draw(self):
        self.update_mode()
        self.screen.clear()
        self.starscape.draw()
        self.level.draw()
        self.spaceship.draw()
        self.status_box.draw()
        pygame.display.update()
        self.starscape.scroll()

    def run(self):
        self.events = EventGenerator()
        self.events.add_listener(FigureMoveListener(self.spaceship.set_direction))
        self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(self, self.events):
            self.events.event_loop()
Exemple #10
0
class Game:
    def __init__(self, config_filename=None, quit=True, **kwargs):
        self.config = {}  # deprecated!
        if config_filename:
            self.parse_config(config_filename)
        self.screen = Screen()
        self.frame = Frame(self.screen, config.FRAME)
        self.tile_factory = TileFactory()
        self._exit = False
        self._quit = quit  # terminate PyGame when event loop expires

    def get_tile(self, key):
        return self.tile_factory.get(key)

    def get_tile_surface(self, key):
        return self.tile_factory.get_surface(key)

    def parse_config(self, config_filename):
        """
        Adds contents of config file to config dictionary.
        """
        warnings.warn('Game.parse_config has been deprecated!')
        path, fn = os.path.split(config_filename)
        self.path = path + os.sep
        before = set(dir())
        conf = open(config_filename).read()
        exec(conf)
        after = set(dir())
        for name in after - before:
            self.config[name] = eval(name)

    def event_loop(self,
                   figure_moves=None,
                   exit=True,
                   draw_func=None,
                   keymap=None,
                   delay=20):
        self.events = EventGenerator()
        if figure_moves:
            self.events.add_listener(FigureMoveListener(figure_moves))
        if keymap:
            self.events.add_listener(EventListener(keymap=keymap))
        if exit:
            self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(draw_func, self.events, delay=delay):
            self.events.event_loop()

    def exit(self):
        self.events.exit_signalled()
        # if self._quit:
        #    pygame.quit()

    def wait_for_move(self, move=None, draw_func=None, delay=0.01):
        if type(move) is list:
            move = MoveGroup(move)
        while not move.finished:
            move.move()
            if draw_func:
                self.screen.clear()
                draw_func()
            move.draw()
            pygame.display.update()
            time.sleep(delay)
Exemple #11
0
 def run(self):
     self.events = EventGenerator()
     self.events.add_listener(FigureMoveListener(self.frutris_box.store_command))
     self.events.add_listener(ExitListener(self.events.exit_signalled))
     with draw_timer(self, self.events):
         self.events.event_loop()
Exemple #12
0
class FrutrisGame:

    def __init__(self, screen):
        self.level_counter = 1
        play_effect('frutris')
        self.screen = screen
        screen.clear()
        self.frame = Frame(self.screen, Rect(10, 10, 640, 512))
        self.tile_factory = TileFactory('data/tiles.conf')
        self.events = None
        self.frutris_box = FrutrisBox(self.frame, self.tile_factory, LEVEL)
        # frame = Frame(self.screen, Rect(660, 220, 200, 200))
        self.data = {
            'score': 0,
            'level': 1,
        }
        self.status_box = self.create_status_box()

        # Music
        self.music_counter = 50 # periodically check for expiring track
        self.current_music = ('a', 1)
        self.music = MusicPlayer()
        self.music.play_music('/home/krother/projects/frutris/frutris/music/a1.ogg')


    def choose_next_music(self):
        MUSIC = '/home/krother/projects/frutris/frutris/music/{}{}.ogg'
        LETTERS = 'aaaabbbbcccccccc'
        letter, number = self.current_music
        number = 3 - number
        stack_size = self.frutris_box.level.get_stack_size()
        letter = LETTERS[stack_size]
        #if len(self.players) >= 1:
        #    stack_size = self.players[0].get_stack_size()
        self.current_music = (letter, number)
        next_track = MUSIC.format(letter, number)
        print('NEXT TRACK: ', next_track)
        return next_track

    def update_music(self):
        self.music_counter -= 1
        if self.music_counter == 0:
            self.music_counter = 50
            if self.music.check_music_status() == CLOSE_TO_END:
                next_track = self.choose_next_music()
                self.music.next_music(next_track)

    @property
    def score(self):
        return self.data['score']

    def create_status_box(self):
        frame = Frame(self.screen, Rect(660, 20, 200, 200))
        return DictBox(frame, self.data)

    def draw(self):
        self.data['score'] += self.frutris_box.counter.pull_score()
        self.frutris_box.draw()
        self.status_box.draw()
        if self.frutris_box.game_over:
            self.events.exit_signalled()
        self.update_music()

    def run(self):
        self.events = EventGenerator()
        self.events.add_listener(FigureMoveListener(self.frutris_box.store_command))
        self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(self, self.events):
            self.events.event_loop()
Exemple #13
0
class Colors:
    def __init__(self, screen):
        self.screen = screen
        self.frame = Frame(self.screen, Rect(20, 20, 800, 700))
        self.tile_factory = TileFactory('data/colortiles.conf')
        self.current_level = 2
        self.level_loader = levels
        self.score = 0

        self.level = None
        self.player = None
        self.events = None
        self.ghosts = []
        self.update_mode = None
        self.status_box = None
        self.image_box = None

        self.create_level()
        self.create_player()
        self.create_ghosts()
        self.create_status_box()

        self.collided = False
        self.mode = None
        self.update_mode = self.update_ingame

    def create_level(self):
        self.otherFrame = Frame(self.screen, Rect(0, 0, 800, 700))
        self.image_box = ImageBox(self.otherFrame, "data/background.bmp")
        self.image_box.draw()
        tmap = TiledMap(self.frame, self.tile_factory)
        self.level = ColorsLevel(
            self.level_loader.getlevel(self.current_level), tmap,
            self.level_loader.getGhostSpeed(self.current_level))

    def draw(self):
        self.update_mode()
        self.level.draw()
        self.player.update()
        self.player.draw()
        for g in self.ghosts:
            g.update()
            g.draw()
        self.status_box.draw()
        pygame.display.update()
        self.check_collision(self.player.sprite.pos)
        time.sleep(0.005)

    def create_player(self):
        self.player = Player(
            self.frame, self.tile_factory,
            self.level_loader.getplayerpos(self.current_level), self.level)
        self.player.set_direction(DOWN)

    def run(self):
        startsound.play()
        pygame.mixer.music.load("music/shootingstars.ogg")
        pygame.mixer.music.play(-1)
        self.events = EventGenerator()
        self.events.add_listener(FigureMoveListener(self.player.move))
        self.events.add_listener(FigureMoveListener(self.unstuck_ghosts))
        self.events.add_listener(FigureColorListener(self.player.set_color))
        self.events.add_listener(ExitListener(self.exit_game))
        with draw_timer(self, self.events):
            self.events.event_loop()

    def create_ghosts(self):
        self.ghosts = []
        for pos in self.level_loader.getghostpos(self.current_level):
            self.ghosts.append(
                Ghost(self.frame, self.tile_factory, pos, self.level))

    def unstuck_ghosts(self, pos):
        for g in self.ghosts:
            g.unstuck()

    def check_collision(self, pos):
        if self.player.collision(self.ghosts):
            self.update_mode = self.update_die
            self.player.die()
            self.collided = True
        else:
            field = self.level.at(pos)
            if field in '123456':
                time.sleep(1)
                self.update_mode = self.update_level_complete
            elif field == 's':
                self.level.remove_soul(pos)
                self.score += 100

    def update_die(self):
        """finish movements"""
        if self.player.sprite.finished:
            time.sleep(1)
            self.player.lives = self.player.lives - 1
            if self.player.lives == 0:
                deadsound.play()
                self.complete_level(1)
                self.events.exit_signalled()
                self.player.lives = 4
                self.run()
            else:
                self.status_box.data['lives'] = self.player.lives
                self.score -= 50
                self.reset_level()
                self.events.empty_event_queue()
                self.update_mode = self.update_ingame

    def update_level_complete(self):
        """finish movement"""
        if self.player.sprite.finished:
            time.sleep(1)
            self.complete_level(self.current_level)

    def reset_level(self):
        self.player.sprite.pos = self.level_loader.getplayerpos(
            self.current_level)
        self.create_ghosts()

    def update_ingame(self):
        self.check_collision(self.player.sprite.pos)

    def create_status_box(self):
        frame = Frame(self.screen, Rect(700, 20, 200, 50))
        data = {
            'lives': 3,
            'level': self.current_level - 1,
        }
        self.status_box = DictBox(frame, data)

    def complete_level(self, current_level):
        self.current_level = current_level + 1
        if self.current_level > 7:
            pygame.quit()
            exit()
        self.frame = Frame(self.screen, Rect(32, 32, 720, 720))
        self.tile_factory = TileFactory('data/colortiles.conf')
        self.level_loader = levels

        self.level = None
        self.player = None
        self.events = None
        self.ghosts = []
        self.update_mode = None
        self.status_box = None

        self.create_level()
        self.create_player()
        self.create_ghosts()
        self.create_status_box()

        self.collided = False
        self.mode = None
        self.update_mode = self.update_ingame
        self.run()

    def exit_game(self):
        pygame.quit()
        exit()
Exemple #14
0
class PacGame:

    def __init__(self, screen):
        self.screen = screen
        self.frame = Frame(self.screen, Rect(10, 10, 640, 512))
        self.tile_factory = TileFactory('data/tiles.conf')

        self.level = None
        self.pac = None
        self.ghosts = []
        self.status_box = None
        self.events = None

        self.create_level()
        self.create_pac()
        self.create_ghosts()
        self.create_status_box()
        frame = Frame(self.screen, Rect(660, 220, 200, 200))
        self.lives = BarDisplay(frame, self.tile_factory, 3, 'p')

        self.collided = False
        self.mode = None
        self.update_mode = self.update_ingame

    def create_level(self):
        tmap = TiledMap(self.frame, self.tile_factory)
        self.level = PacLevel(LEVEL, tmap)

    def create_pac(self):
        start_pos = Vector(5, 5)
        self.pac = Pac(self.frame, self.tile_factory, PAC_START, self.level)
        self.pac.set_direction(RIGHT)

    def create_ghosts(self):
        self.ghosts = []
        for pos in GHOST_POSITIONS:
            self.ghosts.append(Ghost(self.frame, self.tile_factory, pos, self.level))

    def reset_level(self):
        self.pac.sprite.pos = PAC_START
        self.create_ghosts()

    def create_status_box(self):
        frame = Frame(self.screen, Rect(660, 20, 200, 200))
        data = {
            'score': 0,
            'level':1,
            }
        self.status_box = DictBox(frame, data)

    def check_collision(self):
        if self.pac.collision(self.ghosts):
            self.update_mode = self.update_die
            self.pac.die()
            self.collided = True

    def update_die(self):
        """finish movements"""
        if self.pac.sprite.finished:
            time.sleep(1)
            self.lives.decrease()
            if self.lives.value == 0:
                self.events.exit_signalled()
            else:
                self.reset_level()
                self.events.empty_event_queue()
                self.update_mode = self.update_ingame

    def update_level_complete(self):
        """finish movement"""
        if self.pac.sprite.finished:
            time.sleep(1)
            self.events.exit_signalled()

    def update_ingame(self):
        self.check_collision()
        if self.pac.eaten:
            self.status_box.data['score'] = self.pac.score
            self.pac.eaten = None
            self.score = self.pac.score
        if self.level.dots_left == 0:
            self.update_mode = self.update_level_complete

    def draw(self):
        self.update_mode()
        self.level.draw()
        self.pac.update()
        self.pac.draw()
        for g in self.ghosts:
            g.update()
            g.draw()
        self.status_box.draw()
        pygame.display.update()
        self.check_collision()
        time.sleep(0.005)

    def run(self):
        self.mode = self.update_ingame
        self.events = EventGenerator()
        self.events.add_listener(FigureMoveListener(self.pac.move))
        self.events.add_listener(ExitListener(self.events.exit_signalled))
        with draw_timer(self, self.events):
            self.events.event_loop()