Esempio n. 1
0
class CursorScreen(Screen):
    """A Screen with custom cursors"""
    def setup(self):
        self._cursor_group = RenderUpdates()
        self._loaded_cursor = None
        self.set_cursor(None)

    def on_enter(self):
        super(CursorScreen, self).on_enter()
        pygame.mouse.set_visible(0)

    def on_exit(self):
        super(CursorScreen, self).on_exit()
        pygame.mouse.set_visible(1)

    def draw(self, surface):
        super(CursorScreen, self).draw(surface)
        self.set_cursor(self.game.tool)
        self._loaded_cursor.set_highlight(self.cursor_highlight())
        self._cursor_group.update()
        self._cursor_group.draw(surface)

    def set_cursor(self, item):
        if item is None or item.CURSOR is None:
            cursor = HAND
        else:
            cursor = item.CURSOR
        if cursor != self._loaded_cursor:
            self._loaded_cursor = cursor
            self._loaded_cursor.load(self.gd.resource)
            self._cursor_group.empty()
            self._cursor_group.add(self._loaded_cursor)

    def cursor_highlight(self):
        return self.container.mouseover_widget.highlight_cursor
Esempio n. 2
0
    def draw_start_text(self):
        """
        description:
            - Creates and draws the Text object when being in pause mode
        :return: nothing
        """
        dbi = DatabaseInteract()
        sets = dbi.get_settings()

        key_left = sets[1]
        key_right = sets[3]
        key_shoot = sets[8]

        heading1 = TextElement(
            center_position=(400, 400),
            font_size=18,
            bg_rgb=BLUE,
            text_rgb=WHITE,
            text=f"Startwinkel mit '{key_left}' und '{key_right}' auswählen",
            )
        heading2 = TextElement(
            center_position=(400, 450),
            font_size=18,
            bg_rgb=BLUE,
            text_rgb=WHITE,
            text=f"Mit '{key_shoot}' Ball abschiessen, zum Beenden 'ESC' drücken ",
            )
        elems = RenderUpdates(heading1,heading2)
        elems.draw(self.screen)
def init(numplayers = 2):
    screen = pygame.display.get_surface()
    em = EventManager()
    bg = load.image("select-bg.png")
    move_snd = load.sound("select-move.wav")
    confirm_snd = load.sound("select-confirm.wav")
    confirm_snd.set_volume(0.4)

    sprites = RenderUpdates()
    portraits = [PortraitDisplay([20, 20]), PortraitDisplay([20, 320])]
    names = [NameDisplay([20, 220]), NameDisplay([20, 520])]
    drops = [DropDisplay([240, 20]), DropDisplay([240, 320])]
    stats = [StatDisplay([240, 150]), StatDisplay([240, 450])]
    descs = [DescDisplay([430, 20]), DescDisplay([430, 320])]
    char_sprites = zip(portraits, names, drops, stats, descs)

    idx = [0, 0]
    confirmed = [False, False]
    for i, sprs in enumerate(char_sprites):
        if i < numplayers:
            for spr in sprs: spr.set_char(Character.available[i])
            sprites.add(sprs)
            idx[i] = i

    init_bg = bg.convert()
    sprites.update(pygame.time.get_ticks())
    sprites.draw(init_bg)
    wipes.wipe_in(init_bg)
    init_bg = None # Let us GC it
    pygame.display.update()
    sprites.clear(screen, bg)

    while False in [(c.confirmed or i >= numplayers)
                    for i, c in enumerate(portraits)]:
        for ev in em.wait():
            if ev.type == PLAYER:
                if ev.key == LEFT:
                    i = (idx[ev.player] - 1) % len(Character.available)
                    idx[ev.player] = i
                elif ev.key == RIGHT:
                    i = (idx[ev.player] + 1) % len(Character.available)
                    idx[ev.player] = i
                elif ev.key in [ROT_CC, ROT_CW, CONFIRM]:
                    confirm_snd.play()
                    portraits[ev.player].confirmed = True

                if ev.key in [LEFT, RIGHT]:
                    move_snd.play()
                    for spr in char_sprites[ev.player]:
                        spr.set_char(Character.available[idx[ev.player]])
                    portraits[ev.player].confirmed = False

            elif ev.type == QUIT:
                return None, None

        sprites.update(pygame.time.get_ticks())
        pygame.display.update(sprites.draw(screen))
        sprites.clear(screen, bg)

    return [Character.available[i] for i in idx]
    def __init__(self, items):
        platforms = [Platform([400 + 260 * i, 390], s[0], i)
                     for i, s in enumerate(items)]
        credits = Credits()
        self._score = TopScores()
        sprites = RenderUpdates([credits, self._score])
        sprites.add(platforms)

        pos = 0
        em = EventManager()
        em.clear()
        screen = pygame.display.get_surface()

        em.get()
        quit = False

        screen.blit(Menu.bg, [0, 0])
        sprites.draw(screen)
        pygame.display.update()
        
        while not quit:
            for ev in em.get():
                if ev.type == PLAYER:
                    if ev.key == LEFT:
                        if pos != 0:
                            pos -= 1
                            for p in platforms: p.left()
                    elif ev.key == RIGHT:
                        if pos != len(items) - 1:
                            pos += 1
                            for p in platforms: p.right()
                    else:
                        try:
                            r = items[pos][1][ev.key](self, platforms[pos],
                                                      pos, ev.key)
                            if r:
                                # If the callback returns true, then we
                                # need to redraw the whole screen and
                                # reread our scores. (If it returns false,
                                # it probably means it just modified some
                                # cart text).
                                self._score.read_scores()
                                screen.blit(Menu.bg, [0, 0])
                                pygame.display.update()
                        except KeyError: pass

                elif ev.type == QUIT: quit = True

            sprites.update(pygame.time.get_ticks())
            pygame.display.update(sprites.draw(screen))
            sprites.clear(screen, Menu.bg)
            pygame.time.clock.tick(60)
Esempio n. 5
0
def main():
    colided_list = []
    level, screen, clock, fps, rect_list = set_config()
    group = RenderUpdates()
    heroine = Hero(100, 30, group)

    keys = {
        K_LEFT: False,
        K_RIGHT: False,
        K_UP: False,
        K_DOWN: False,
        K_RETURN: False,
        27: False,
        K_a: False
    }  # obs 27 = 'esc'

    pygame.display.flip()

    while True:
        clock.tick(fps)
        for event in pygame.event.get([KEYUP, KEYDOWN]):
            value = (event.type == KEYDOWN)
            if event.key in keys:
                keys[event.key] = value

        idx = heroine.rect.collidelist(rect_list)
        if idx != -1 and rect_list[idx] not in colided_list:
            colided_list.append(rect_list[idx])
            print rect_list[idx]
            if rect_list[
                    idx].x <= heroine.rect.x and heroine.rect.x <= rect_list[
                        idx].width:
                heroine.fsm.set_state("stand_still")
                heroine.cannot_move_to = None
                #import pdb; pdb.set_trace()
            else:
                heroine.cannot_move_to = heroine.fsm.side
        if idx == -1:
            heroine.fsm.set_state("fall")

        if keys[27]:  # tecla ESC
            pygame.quit()
            sys.exit()
        elif keys[K_LEFT] and heroine.cannot_move_to != "left":
            heroine.fsm.set_state("move")
            heroine.fsm.update("left")
        elif keys[K_RIGHT] and heroine.cannot_move_to != "right":
            heroine.fsm.set_state("move")
            heroine.fsm.update("right")
        elif keys[K_UP]:
            heroine.fsm.set_state("jump")
        elif keys[K_DOWN]:
            heroine.fsm.set_state("get_down")
        elif keys[K_a]:
            heroine.fsm.set_state("attack")
        heroine.fsm.auto_update()
        utils.clear_screen(level, screen)
        pygame.display.update(group.draw(screen))
Esempio n. 6
0
def main():
    fundo, tela, clock = config()
    musica = pygame.mixer.Sound("BGM/Firelink Shrine.wav")
    grupo = RenderUpdates()
    personagem = Hero(20, 290, "dante", grupo)
    pygame.font.init()
    frase = Text(40, 'Quem eh voce e oque faz aqui?', 'carolingia.ttf')

    lx = [b for b in range(-4, 76)]
    l1 = [-10]
    l2 = [6]

    parede = [x for x in range(-10, 16)]

    iniciarConversa = [43, 0]

    teclas = {
        K_LEFT: False,
        K_RIGHT: False,
        K_UP: False,
        K_DOWN: False,
        K_RETURN: False,
        27: False
    }  # obs 27 = tecla 'esc'

    musica.play()
    fundo = fundo.convert()
    pygame.display.flip()
    while True:
        clock.tick(FPS)

        for e in pygame.event.get([KEYUP, KEYDOWN]):
            valor = (e.type == KEYDOWN)
            if e.key in teclas.keys():
                teclas[e.key] = valor

        if teclas[27]:  # tecla ESC
            pygame.quit()
            sys.exit()

        if teclas[K_LEFT]:
            personagem.move("LEFT")
        if teclas[K_RIGHT]:
            personagem.move("RIGHT")
        if teclas[K_UP]:
            personagem.move("UP")
        if teclas[K_DOWN]:
            personagem.move("DOWN")

        if personagem.px == iniciarConversa[
                0] and personagem.py == iniciarConversa[1]:
            tela.blit(frase.frases, (200, 500))
            pygame.display.flip()

        #print(personagem.px, personagem.py)

        grupo.clear(tela, fundo)
        pygame.display.update(grupo.draw(tela))
Esempio n. 7
0
 def draw_spcl_txt(self):
     """
     description:
         - Write the type of the special that just dropped to the top of the screen.
     :return: nothing
     """
     if self.spcl_text is not None:
         info = TextElement(
             center_position=(590, 10),
             font_size=16,
             bg_rgb=BLUE,
             text_rgb=WHITE,
             text=f"Spezial: {self.spcl_text.text} aufgetaucht",
             )
         elems = RenderUpdates(info)
         elems.draw(self.screen)
         if self.spcl_text.tick():
             self.spcl_text = None
Esempio n. 8
0
 def draw(self):
     """
         draw all sprites onto the surface
     """
     render = []
     levels = self.levels.keys()
     levels.sort()
     for lvl in levels:
         level = self.levels[lvl]
         render += RenderUpdates.draw(level, self.screen)
     return render
Esempio n. 9
0
def main():
    fundo, tela, clock = config()
    musica = pygame.mixer.Sound("BGM/Firelink Shrine.wav")
    grupo = RenderUpdates()
    personagem = Hero(20, 290, "dante", grupo)
    pygame.font.init()
    frase = Text(40, 'Quem eh voce e oque faz aqui?', 'carolingia.ttf')

    lx = [b for b in range(-4, 76)]
    l1 = [-10]
    l2 = [6]

    parede = [x for x in range(-10, 16)]

    iniciarConversa = [43, 0]

    teclas = {K_LEFT: False, K_RIGHT: False, K_UP: False, K_DOWN: False,
              K_RETURN: False, 27: False}  # obs 27 = tecla 'esc'

    musica.play()
    fundo = fundo.convert()
    pygame.display.flip()
    while True:
        clock.tick(FPS)

        for e in pygame.event.get([KEYUP, KEYDOWN]):
            valor = (e.type == KEYDOWN)
            if e.key in teclas.keys():
                teclas[e.key] = valor

        if teclas[27]:  # tecla ESC
            pygame.quit()
            sys.exit()

        if teclas[K_LEFT]:
            personagem.move("LEFT")
        if teclas[K_RIGHT]:
            personagem.move("RIGHT")
        if teclas[K_UP]:
            personagem.move("UP")
        if teclas[K_DOWN]:
            personagem.move("DOWN")

        if personagem.px == iniciarConversa[0] and personagem.py == iniciarConversa[1]:
            tela.blit(frase.frases, (200, 500))
            pygame.display.flip()

        #print(personagem.px, personagem.py)

        grupo.clear(tela, fundo)
        pygame.display.update(grupo.draw(tela))
Esempio n. 10
0
def main():
    # Get filename
    try:
        image_file = sys.argv[1]
        framerate = sys.argv[2]
    except:
        image_file = raw_input("Enter name of image file: ")
        framerate = raw_input("Enter framerate: ")

    timedelay = (1.0)/(float(framerate))
    # Initialize display
    try:
        screen = pygame.display.set_mode((600,600),
                                    HWSURFACE|DOUBLEBUF)
    except:
        screen = pygame.display.set_mode((600,600))

    background = pygame.image.load(BACKGROUND).convert()
    screen.blit(background, (0,0,400,400))

    temp_img = pygame.image.load(image_file)
    anim_size = (temp_img.get_height(), temp_img.get_height())
    surf = pygame.surface.Surface(anim_size)
    anim = Animation(surf, (0,0,temp_img.get_height(),temp_img.get_height()),
                     image_file)
    sprites = SpriteGroup()
    sprites.add(anim)

    # Display animation
    pygame.display.flip()

    while 1:
        cur_time = t.time()
        sprites.clear(screen, background)
        sprites.update()
        dirty = sprites.draw(screen)
        pygame.display.update(dirty)

        for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    sys.exit()

        t.sleep(t.time() - cur_time + timedelay)
Esempio n. 11
0
def main():
    # Get filename
    try:
        image_file = sys.argv[1]
        framerate = sys.argv[2]
    except:
        image_file = raw_input("Enter name of image file: ")
        framerate = raw_input("Enter framerate: ")

    timedelay = (1.0) / (float(framerate))
    # Initialize display
    try:
        screen = pygame.display.set_mode((600, 600), HWSURFACE | DOUBLEBUF)
    except:
        screen = pygame.display.set_mode((600, 600))

    background = pygame.image.load(BACKGROUND).convert()
    screen.blit(background, (0, 0, 400, 400))

    temp_img = pygame.image.load(image_file)
    anim_size = (temp_img.get_height(), temp_img.get_height())
    surf = pygame.surface.Surface(anim_size)
    anim = Animation(surf,
                     (0, 0, temp_img.get_height(), temp_img.get_height()),
                     image_file)
    sprites = SpriteGroup()
    sprites.add(anim)

    # Display animation
    pygame.display.flip()

    while 1:
        cur_time = t.time()
        sprites.clear(screen, background)
        sprites.update()
        dirty = sprites.draw(screen)
        pygame.display.update(dirty)

        for event in pygame.event.get():
            if event.type == KEYDOWN:
                if event.key == K_ESCAPE:
                    sys.exit()

        t.sleep(t.time() - cur_time + timedelay)
Esempio n. 12
0
def main():
    level, screen, clock, fps = set_config()
    group = RenderUpdates()
    heroine = Hero(20, 140, "elisa", group)

    keys = {
        K_LEFT: False,
        K_RIGHT: False,
        K_UP: False,
        K_DOWN: False,
        K_RETURN: False,
        27: False,
        K_a: False
    }  # obs 27 = 'esc'

    pygame.display.flip()
    while True:
        clock.tick(fps)

        for e in pygame.event.get([KEYUP, KEYDOWN]):
            valor = (e.type == KEYDOWN)
            if e.key in keys.keys():
                keys[e.key] = valor

        if keys[27]:  # tecla ESC
            pygame.quit()
            sys.exit()
        if heroine.attacking:
            heroine.animate_attack()
        elif keys[K_LEFT]:
            heroine.move("left")
        elif keys[K_RIGHT]:
            heroine.move("right")
        elif keys[K_UP]:
            heroine.jump()
        elif keys[K_DOWN]:
            heroine.get_down()
        elif keys[K_a]:
            heroine.attack()
        #heroine.is_jumping(gravity)

        utils.clear_screen(level, screen)
        pygame.display.update(group.draw(screen))
Esempio n. 13
0
class Game:
    def __init__(self, title='Checkers', log_level=log.INFO, show_fps=False):
        log.basicConfig(level=log_level)
        self.show_fps = show_fps
        self.window_title = title
        self.game = Board(BOARD_DIM)
        # Initialize Game Groups
        self.brown_spaces = RenderUpdates()
        self.pieces = RenderUpdates()
        self.piece_selected = GroupSingle()
        self.space_selected = GroupSingle()
        self.current_piece_position = ORIGIN
        self.screen = None
        self.fps_clock = None
        self.font = None
        self.font_rect = None
        self.background = None
        self.background_rect = None
        self.fps_text = None
        self.fps_rect = None
        self.winner_text = None
        self.winner_rect = None

    def _board_setup(self, **kwargs):
        """ initialize board state """
        brown_spaces = kwargs.get('brown_spaces')
        for col, row in self.game.usable_positions():
            loc = TILE_WIDTH * col + (BORDER_WIDTH /
                                      2), TILE_WIDTH * row + (BORDER_WIDTH / 2)
            brown_spaces.add(SquareSprite(loc, "brown", row, col))

    def _screen_init(self):
        """ Initialise screen """
        pygame.init()
        self.screen = pygame.display.set_mode(SCREEN_RES)
        pygame.display.set_caption(self.window_title)
        return self.screen

    def _get_background(self):
        result = pygame.Surface(self.screen.get_size())
        (bg_img, bg_rect) = ImageLoader.load_img('marble-board.jpg')
        result.blit(bg_img, bg_rect)
        return result.convert(), bg_rect

    def _get_fps_text(self):
        fps_text = self.font.render("%4.1f fps" % self.fps_clock.get_fps(),
                                    True, WHITE)
        rect = fps_text.get_rect()
        rect.right, rect.bottom = self.background_rect.right, self.background_rect.bottom
        return fps_text, rect

    def _draw_fps(self):
        if self.show_fps:
            self.fps_text, self.fps_rect = self._get_fps_text()
            self.screen.blit(self.fps_text, self.fps_rect)

    def _clear_fps(self):
        if self.show_fps:
            self.screen.blit(self.background,
                             self.fps_rect,
                             area=self.fps_rect)

    def _clear_items(self):
        self._clear_winner()
        self._clear_fps()
        self.piece_selected.clear(self.screen, self.background)
        self.pieces.clear(self.screen, self.background)

    def _draw_winner(self):
        winner = self.game.winner()
        if winner:
            self.winner_text = self.font.render("%s wins!" % winner.title(),
                                                True, WHITE)
            winner_rect = self.winner_text.get_rect()
            winner_rect.centerx = self.background.get_rect().centerx
            winner_rect.top = 100
            self.winner_rect = winner_rect
            self.screen.blit(self.winner_text, winner_rect)

    def _clear_winner(self):
        winner = self.game.winner()
        if winner:
            self.screen.blit(self.background,
                             self.winner_rect,
                             area=self.winner_rect)

    def _quit(self):
        log.debug('quitting')
        sys.exit()

    def _select_piece(self, event):
        # select the piece by seeing if the piece collides with cursor
        self.piece_selected.add(piece for piece in self.pieces
                                if piece.rect.collidepoint(event.pos))
        # Capture piece's original position (at center) to determine move on drop
        if len(self.piece_selected) > 0:
            # Assumed: starting a move
            pygame.event.set_grab(True)
            self.pieces.remove(self.piece_selected)
            self.current_piece_position = (
                self.piece_selected.sprite.rect.centerx,
                self.piece_selected.sprite.rect.centery)
            log.debug('grabbing input, picked up piece at %s',
                      self.current_piece_position)

    def _drag_piece(self):
        #  Until button is let go, move the piece with the mouse position
        self.piece_selected.update(pygame.mouse.get_pos())
        log.debug('updated piece to %s', pygame.mouse.get_pos())

    def _drop_piece(self, event):
        if pygame.event.get_grab():
            pygame.event.set_grab(False)
            log.debug('releasing input')

            # center the piece on the valid space; if it is not touching a space, return it to its original position
            self.space_selected.add(space for space in self.brown_spaces
                                    if space.rect.collidepoint(event.pos))

            if self.piece_selected and self.space_selected:
                log.debug('dropped a piece')
                piece, space = self.piece_selected.sprite, self.space_selected.sprite
                try:
                    captured = self.game.move(piece.location,
                                              (space.col, space.row))
                    if captured:
                        self.pieces.remove(captured)
                except InvalidMoveException as ce:
                    log.debug(ce)
                log.debug("%s", str(self.game))

            self.piece_selected.sprite.update_from_board()

            # Add piece back to stationary set
            self.pieces.add(self.piece_selected)

            # clean up for the next selected piece
            self.piece_selected.empty()
            self.space_selected.empty()

    def _draw_items(self):
        self.pieces.draw(self.screen)
        self.piece_selected.draw(self.screen)
        self._draw_winner()
        self._draw_fps()

    def run(self):

        log.debug('starting game')

        log.debug('initializing screen')
        self.screen = self._screen_init()

        log.debug('getting font')
        self.font = pygame.font.Font(None, 36)

        log.debug('loading background')
        self.background, self.background_rect = self._get_background()

        log.debug('building initial game board')
        self._board_setup(brown_spaces=self.brown_spaces)

        log.debug('initializing game pieces')
        for player, x, y in self.game.start_positions():
            new_piece = PieceSprite(player)
            self.game.add_piece(new_piece, (x, y))
            new_piece.update_from_board()
            self.pieces.add(new_piece)

        log.debug('drawing initial content to screen')
        self.screen.blit(self.background, ORIGIN)
        pygame.display.flip()

        self.piece_selected = GroupSingle()
        self.space_selected = GroupSingle()
        self.current_piece_position = ORIGIN

        self.fps_clock = Clock()

        self._draw_fps()

        # Event loop
        while True:

            self._clear_items()

            for event in pygame.event.get():

                if event.type == QUIT:
                    self._quit()

                if event.type == MOUSEBUTTONDOWN:  # select a piece
                    log.debug('mouse pressed')
                    self._select_piece(event)

                if event.type == MOUSEBUTTONUP:  # let go of a piece
                    log.debug('mouse released')
                    self._drop_piece(event)

                if pygame.event.get_grab():  # drag selected piece around
                    log.debug('dragging')
                    self._drag_piece()

            self._draw_items()

            self.fps_clock.tick(60)  # Waits to maintain 60 fps

            # TODO: Use display.update instead
            pygame.display.flip()
Esempio n. 14
0
    if teclas[27]:  # tecla ESC
        pygame.quit()
        sys.exit()
    if  colisaoParedeLateral.estaDentro(personagem.py, personagem.px):
        MPD()
        MPB()
        MPC()
    elif personagem.px in lx:
        if personagem.py in l1:
            MPB()
            MPD()
            MPE()
        elif personagem.py in l2:
            MPC()
            MPD()
            MPE()
        else:
            MPE()
            MPD()
            MPC()
            MPB()

    if personagem.px == iniciarConversa[0] and personagem.py == iniciarConversa[1]:
        tela.blit(frase.frases, (200, 500))
        pygame.display.flip()

    #print(personagem.px, personagem.py)

    grupo.clear(tela, fundo)
    pygame.display.update(grupo.draw(tela))
Esempio n. 15
0
def dance(screen, song, players, prevscr, ready_go, game):
    songFailed = False

    # text group, e.g. judgings and combos
    tgroup = RenderUpdates()
    # lyric display group
    lgroup = RenderUpdates()

    background = pygame.Surface([640, 480])

    if song.movie != None:
        backmovie = BGMovie(song.movie)
    else:
        backmovie = None

    background.fill(colors.BLACK)
    screen.fill(colors.BLACK)

    if ready_go:
        ready_go_time = min(100, *[plr.ready for plr in players])
        tgroup.add(ReadyGoSprite(ready_go_time))

    if mainconfig['showbackground'] > 0:
        if backmovie is None:
            bgkludge = pygame.image.load(song.background).convert()
            bgkrect = bgkludge.get_rect()
            if (bgkrect.size[0] == 320) and (bgkrect.size[1] == 240):
                bgkludge = pygame.transform.scale2x(bgkludge)
            else:
                bgkludge = pygame.transform.scale(bgkludge, [640, 480])
            bgkludge.set_alpha(mainconfig['bgbrightness'], RLEACCEL)

            q = mainconfig['bgbrightness'] / 256.0
            # FIXME
            for i in range(0, 101, 5):
                p = i / 100.0
                prevscr.set_alpha(256 * (1 - p) * q, RLEACCEL)
                screen.fill(colors.BLACK)
                screen.blit(prevscr, [0, 0])
                screen.blit(bgkludge, [0, 0])
                pygame.display.update()
                pygame.time.delay(1)

            background.blit(bgkludge, [0, 0])
        else:
            pygame.display.update()
    else:
        pygame.display.update()

    if mainconfig["strobe"]: tgroup.add(Blinky(song.bpm))

    if mainconfig["fpsdisplay"]:
        fpstext = FPSDisp()
        timewatch = TimeDisp()
        tgroup.add([fpstext, timewatch])
    else:
        fpstext = None

    if mainconfig['showlyrics']:
        lgroup.add(song.lyricdisplay.channels())

    fontfn, basesize = FontTheme.Dance_title_artist
    songtext = fontfx.zztext(song.title, 480, 12, basesize, fontfn)
    grptext = fontfx.zztext(song.artist, 160, 12, basesize, fontfn)

    songtext.zin()
    grptext.zin()

    tgroup.add([songtext, grptext])

    song.init()

    if song.crapout != 0:
        error.ErrorMessage(
            screen,
            _("The audio file for this song ") + song.filename +
            _(" could not be found."))
        return False  # The player didn't fail.

    if mainconfig['assist']: music.set_volume(0.6)
    else: music.set_volume(1.0)

    song.play()
    for plr in players:
        plr.start_song()

    autofail = mainconfig['autofail']

    screenshot = False
    ui.ui.clear()

    while True:
        if autofail:
            songFailed = True
            for plr in players:
                if not plr.lifebar.gameover:
                    songFailed = False
                    break
            if songFailed:
                song.kill()

        for plr in players:
            plr.get_next_events(song)

        if song.is_over(): break
        else: curtime = music.get_pos() / 1000.0

        key = []

        ev = ui.ui.poll_dance()

        while ev[1] != ui.PASS:
            if ev[1] == ui.CANCEL:
                for p in players:
                    p.escaped = True
                return False
            elif ev[1] == ui.SCREENSHOT:
                screenshot = True
            elif ev[1] == ui.LEFT:
                key.append((ev[0], 'l'))
            elif ev[1] == ui.DOWNLEFT:
                key.append((ev[0], 'w'))
            elif ev[1] == ui.UPLEFT:
                key.append((ev[0], 'k'))
            elif ev[1] == ui.RIGHT:
                key.append((ev[0], 'r'))
            elif ev[1] == ui.UPRIGHT:
                key.append((ev[0], 'z'))
            elif ev[1] == ui.DOWNRIGHT:
                key.append((ev[0], 'g'))
            elif ev[1] == ui.UP:
                key.append((ev[0], 'u'))
            elif ev[1] == ui.DOWN:
                key.append((ev[0], 'd'))
            elif ev[1] == ui.CENTER:
                key.append((ev[0], 'c'))
            elif ev[1] == -ui.LEFT:
                key.append((ev[0], '-l'))
            elif ev[1] == -ui.DOWNLEFT:
                key.append((ev[0], '-w'))
            elif ev[1] == -ui.UPLEFT:
                key.append((ev[0], '-k'))
            elif ev[1] == -ui.RIGHT:
                key.append((ev[0], '-r'))
            elif ev[1] == -ui.UPRIGHT:
                key.append((ev[0], '-z'))
            elif ev[1] == -ui.DOWNRIGHT:
                key.append((ev[0], '-g'))
            elif ev[1] == -ui.UP:
                key.append((ev[0], '-u'))
            elif ev[1] == -ui.DOWN:
                key.append((ev[0], '-d'))
            elif ev[1] == -ui.CENTER:
                key.append((ev[0], '-c'))

            ev = ui.ui.poll_dance()

        for ev in key:
            if game.double: pid = ev[0] / 2
            else: pid = ev[0]

            if pid >= 0 and pid < len(players):
                if ev[1][0] != '-':
                    players[pid].handle_keydown(ev, curtime)
                else:
                    players[pid].handle_keyup((ev[0], ev[1][1:]), curtime)

        rectlist = []

        if backmovie:
            backmovie.update(curtime)
            if backmovie.changed or (fpstext.fps() > 30):
                backmovie.resetchange()
                screen.blit(backmovie.image, [0, 0])

        for plr in players:
            rectlist.extend(plr.game_loop(curtime, screen))

        lgroup.update(curtime)
        tgroup.update(curtime)
        rectlist.extend(tgroup.draw(screen))
        rectlist.extend(lgroup.draw(screen))

        if backmovie is None: pygame.display.update(rectlist)
        else: pygame.display.update()

        if screenshot:
            fn = os.path.join(rc_path, "screenshot.bmp")
            print(_("Saving a screenshot to"), fn)
            pygame.image.save(screen, fn)
            screenshot = False

        if backmovie is None:
            lgroup.clear(screen, background)
            tgroup.clear(screen, background)
            for plr in players:
                plr.clear_sprites(screen, background)

        if ((curtime > players[0].length - 1) and (songtext.zdir == 0)
                and (songtext.zoom > 0)):
            songtext.zout()
            grptext.zout()

    if fpstext: print(_("Average FPS for this song was %d.") % fpstext.fps())
    return songFailed
Esempio n. 16
0
    def pickColors(self, playerList):
        background = pygame.surface.Surface(RESOLUTION)

        # Create swatches
        SwatchesGroup = SpriteGroup()
        swatches = [
            Swatch((0, 0, 0)),
            Swatch((127, 0, 0)),
            Swatch((255, 0, 0)),
            Swatch((0, 127, 0)),
            Swatch((0, 255, 0)),
            Swatch((0, 0, 127)),
            Swatch((0, 0, 255)),
            Swatch((127, 127, 0)),
            Swatch((0, 127, 127)),
            Swatch((127, 0, 127)),
            Swatch((0, 255, 255)),
            Swatch((255, 0, 255)),
            Swatch((255, 255, 0)),
            Swatch((255, 255, 255))
        ]

        l = 0
        for swatch in swatches:
            swatch.setName = str(swatch.color[0]) + "/" + str(swatch.color[1])\
                             + "/" + str(swatch.color[2])
            swatch.rect = Rect((l % COLUMNS) * 40 + 10,
                               (l / COLUMNS) * 40 + 10, 30, 30)
            SwatchesGroup.add(swatch)
            l += 1

        # Create text box to enter players' names
        inputRect = Rect((400, 75, 100, 30))
        theInput = TextInput(playerList[0].playerName, inputRect, 30)
        SwatchesGroup.add(theInput)

        if not self.default:
            # Create Bomberman pic
            BMRect = Rect((510, 190), (100, 100))
            BMSurf = pygame.surface.Surface((100, 100))
            BMPic = Widget(BMSurf, BMRect)
            SwatchesGroup.add(BMPic)

            # Create some text to prompt players to pick color
            text = TextBar("Choose color. ", (400, 20, 100, 30), 25)
            text2 = TextBar("Backspace and type Player Name. Press Enter. ",\
                            (400, 40, 100, 30), 25)
            SwatchesGroup.add(text)
            SwatchesGroup.add(text2)

            background = pygame.image.load('images/bgd_grass.jpg').convert()
            screen.blit(background, ((0, 0), RESOLUTION))
            theSelector = Select()
            cursor = SpriteGroup()
            theSelector.rect = Rect(10, 10, 30, 30)
            cursor.add(theSelector)

            SwatchesGroup.draw(screen)
            pygame.display.flip()

        # Use default colors
        if self.default:
            for player in playerList:
                newpath = "images/player" + str(player.name)
                try:
                    d.mkpath(newpath)
                    self.createStrips(player.color, player.name)
                except:
                    print "Could not create strips"
                    return

        # Else, let players select their colors
        else:
            for player in playerList:
                newpath = "images/player" + str(player.name)
                try:
                    d.mkpath(newpath)
                    self.createStrips(player.color, player.name)
                except:
                    print "Could not create strips"
                    return

                optionsChosen = False
                theInput.setText(player.playerName)
                while (not optionsChosen):
                    for event in pygame.event.get():
                        if event.type == QUIT:
                            sys.exit()
                        if event.type == KEYDOWN:
                            if event.key == K_ESCAPE:
                                sys.exit()
                            elif event.key == K_RIGHT:
                                theSelector.setX(40)
                            elif event.key == K_LEFT:
                                theSelector.setX(-40)
                            elif event.key == K_UP:
                                theSelector.setY(-40)
                            elif event.key == K_DOWN:
                                theSelector.setY(40)
                            elif event.key == K_BACKSPACE:
                                theInput.deleteChar()
                            elif (event.key >= K_0 and event.key <= K_z)\
                                  or event.key == K_SPACE:
                                theInput.appendChar(event.key)
                            elif event.key == K_RETURN:  #return key
                                d.mkpath(newpath)
                                self.createStrips(\
                                    swatches[theSelector.index].color, \
                                    player.name)
                                player.playerName = theInput.getText()
                                player.setColor(\
                                    swatches[theSelector.index].color)
                                optionsChosen = True

                    self.switchColor(BMPic, swatches, theSelector.index)
                    SwatchesGroup.clear(screen, background)
                    cursor.clear(screen, background)
                    cursor.update()
                    SwatchesGroup.update()
                    dirty = SwatchesGroup.draw(screen) + cursor.draw(screen)
                    pygame.display.update(dirty)
Esempio n. 17
0
class UIPanel:
    def __init__(self, bgImage, boundRect):
        self.isDone = 0
        self.isDirty = 1
        self.bgImage = bgImage
        self.boundRect = boundRect
        #print self.boundRect

        self.needsReBlit = True
        self.UIGroup = RenderUpdates()

        self.infoObj = None

        yPad = 4

        #labels
        self.todLabel = LabelSprite("00:00")
        self.todLabel.rect.midbottom = self.boundRect.midbottom
        self.todLabel.rect.move_ip(-160, -90)
        self.UIGroup.add(self.todLabel)

        self.infoLabel = LabelSprite(" - ")
        self.infoLabel.rect.x = self.todLabel.rect.x
        self.infoLabel.rect.y = self.todLabel.rect.y + ascent + yPad
        self.UIGroup.add(self.infoLabel)

        self.fpsLabel = LabelSprite("FPS: 0")
        self.fpsLabel.rect.x = self.infoLabel.rect.x
        self.fpsLabel.rect.y = self.infoLabel.rect.y + ascent + yPad
        self.UIGroup.add(self.fpsLabel)

        #buttons
        self.pauseButton = ToggleButtonSprite("pause")
        self.pauseButton.onClickCallback = self.Pause
        self.pauseButton.rect.topleft = self.boundRect.topleft
        self.pauseButton.rect.move_ip(0, 10)
        self.UIGroup.add(self.pauseButton)

        self.rTogButton = ToggleButtonSprite("red")
        self.rTogButton.onClickCallback = self.ShowRed
        self.rTogButton.rect.x = self.boundRect.x
        self.rTogButton.rect.y = self.pauseButton.rect.bottom + yPad
        self.UIGroup.add(self.rTogButton)

        self.gTogButton = ToggleButtonSprite("green")
        self.gTogButton.onClickCallback = self.ShowGreen
        self.gTogButton.rect.x = self.boundRect.x
        self.gTogButton.rect.y = self.rTogButton.rect.bottom + yPad
        self.UIGroup.add(self.gTogButton)

        self.servButton = ToggleButtonSprite("server")
        self.servButton.onClickCallback = self.ShowServer
        self.servButton.rect.x = self.boundRect.x
        self.servButton.rect.y = self.gTogButton.rect.bottom + yPad
        self.UIGroup.add(self.servButton)

        self.device = DeviceSprite()
        self.device.rect.bottomright = self.boundRect.bottomright
        self.device.rect.move_ip(-170, -80)
        self.UIGroup.add(self.device)

        events.AddListener(self)
        events.AddEvent("Pause")
        events.AddEvent("ShowRed")
        events.AddEvent("ShowGreen")
        events.AddEvent("ShowServer")

    #---------------------------------------------------------------------
    def On_FPSChange(self, newfps):
        self.isDirty = 1
        self.fpsLabel.SetText("FPS: " + str(newfps))

    #---------------------------------------------------------------------
    def On_MouseClick(self, pos):
        self.isDirty = 1
        self.device.OnMouseClick(pos)
        self.pauseButton.OnMouseClick(pos)
        self.gTogButton.OnMouseClick(pos)
        self.rTogButton.OnMouseClick(pos)
        self.servButton.OnMouseClick(pos)

    #---------------------------------------------------------------------
    def On_MouseMove(self, event):
        self.isDirty = 1
        self.pauseButton.OnMouseMove(event.pos)
        self.rTogButton.OnMouseMove(event.pos)
        self.gTogButton.OnMouseMove(event.pos)
        self.servButton.OnMouseMove(event.pos)

        if self.infoLabel.rect.collidepoint(event.pos):
            self.isDirty = 1
            self.infoObj = PopCounter()
            self.infoLabel.SetText( "Population: " + \
                              str(len(allobjects.allVisitors)) )

    #---------------------------------------------------------------------
    def On_SelectVisitor(self, visitor):
        self.isDirty = 1
        self.infoObj = visitor
        self.device.SetVisitor(visitor)

    #---------------------------------------------------------------------
    def On_HighlightRide(self, ride):
        self.isDirty = 1
        self.infoObj = ride

    #---------------------------------------------------------------------
    def On_UnHighlightRide(self):
        self.isDirty = 1

    #---------------------------------------------------------------------
    def On_HighlightLineup(self, lineup):
        self.isDirty = 1
        self.infoObj = lineup

    #---------------------------------------------------------------------
    def On_UnHighlightLineup(self):
        return

    #---------------------------------------------------------------------
    def Click(self, pos):
        pass

    #---------------------------------------------------------------------
    def MouseOver(self, event):
        pass

    #---------------------------------------------------------------------
    def Pause(self):
        events.Fire("Pause")

    #---------------------------------------------------------------------
    def ShowRed(self):
        events.Fire("ShowRed")

    #---------------------------------------------------------------------
    def ShowGreen(self):
        events.Fire("ShowGreen")

    #---------------------------------------------------------------------
    def ShowServer(self):
        events.Fire("ShowServer")

    #---------------------------------------------------------------------
    def UpdateTimeOfDay(self):
        self.todLabel.SetText(formatTime(allobjects.timeOfDay))

    #---------------------------------------------------------------------
    def BGWipe(self, screen, clearArea):
        srcArea = Rect(clearArea)
        srcArea.move_ip((-self.boundRect.x, -self.boundRect.y))
        screen.blit(self.bgImage, clearArea, srcArea)

    #---------------------------------------------------------------------
    def DoGraphics(self, screen, display, timeChange):
        if self.needsReBlit:
            print 'blitting on screen', self.bgImage, self.boundRect
            screen.blit(self.bgImage, self.boundRect)
            display.flip()
            self.needsReBlit = False

        if self.infoObj:
            self.infoLabel.SetText(self.infoObj.GetInfo())

        self.UpdateTimeOfDay()

        if not self.isDirty:
            return

        allobjects.server.Tick()

        self.UIGroup.clear(screen, self.BGWipe)

        self.UIGroup.update()

        changedRects = self.UIGroup.draw(screen)
        display.update(changedRects)
        self.isDirty = 0
Esempio n. 18
0
def dance(screen, song, players, prevscr, ready_go, game):
  songFailed = False

  # text group, e.g. judgings and combos
  tgroup =  RenderUpdates()
  # lyric display group
  lgroup = RenderUpdates()

  background = pygame.Surface([640, 480])

  if song.movie != None:
    backmovie = BGMovie(song.movie)
  else:
    backmovie = None
    
  background.fill(colors.BLACK)
  screen.fill(colors.BLACK)

  if ready_go:
    ready_go_time = min(100, *[plr.ready for plr in players])
    tgroup.add(ReadyGoSprite(ready_go_time))
  
  if mainconfig['showbackground'] > 0:
    if backmovie is None:
      bgkludge = pygame.image.load(song.background).convert()
      bgkrect = bgkludge.get_rect()
      if (bgkrect.size[0] == 320) and (bgkrect.size[1] == 240):
        bgkludge = pygame.transform.scale2x(bgkludge)
      else:
        bgkludge = pygame.transform.scale(bgkludge, [640, 480])
      bgkludge.set_alpha(mainconfig['bgbrightness'], RLEACCEL)
      
      q = mainconfig['bgbrightness'] / 256.0
      # FIXME
      for i in range(0, 101, 5):
        p = i / 100.0
        prevscr.set_alpha(256 * (1 - p) * q, RLEACCEL)
        screen.fill(colors.BLACK)
        screen.blit(prevscr, [0, 0])
        screen.blit(bgkludge, [0, 0])
        pygame.display.update()
        pygame.time.delay(1)

      background.blit(bgkludge, [0, 0])
    else:
      pygame.display.update()
  else:
    pygame.display.update()

  if mainconfig["strobe"]: tgroup.add(Blinky(song.bpm))

  if mainconfig["fpsdisplay"]:
    fpstext = FPSDisp()
    timewatch = TimeDisp()
    tgroup.add([fpstext, timewatch])
  else: fpstext = None

  if mainconfig['showlyrics']:
    lgroup.add(song.lyricdisplay.channels())

  fontfn, basesize = FontTheme.Dance_title_artist
  songtext = fontfx.zztext(song.title, 480, 12, basesize, fontfn)
  grptext = fontfx.zztext(song.artist, 160, 12, basesize, fontfn)

  songtext.zin()
  grptext.zin()

  tgroup.add([songtext, grptext])

  song.init()

  if song.crapout != 0:
    error.ErrorMessage(screen, _("The audio file for this song ") +
                       song.filename + _(" could not be found."))
    return False # The player didn't fail.

  if mainconfig['assist']: music.set_volume(0.6)
  else: music.set_volume(1.0)

  song.play()
  for plr in players: plr.start_song()

  autofail = mainconfig['autofail']

  screenshot = False
  pad.empty()

  while True:
    if autofail:
      songFailed = True
      for plr in players:
        if not plr.lifebar.gameover:
          songFailed = False
          break
      if songFailed:
        song.kill()

    for plr in players: plr.get_next_events(song)

    if song.is_over(): break
    else: curtime = music.get_pos()/1000.0

    key = []

    ev = pad.poll()

    for i in range(len(players)):
      if (pad.states[(i, pad.START)] and pad.states[(i, pad.SELECT)]):
        ev = (0, pad.QUIT)
        break
      else:
        pass

    while ev[1] != pad.PASS:
      if ev[1] == pad.QUIT:
        for p in players: p.escaped = True
        break
      elif ev[1] == pad.SCREENSHOT:
        screenshot = True
      elif ev[1] == pad.LEFT: key.append((ev[0], 'l'))
      elif ev[1] == pad.DOWNLEFT: key.append((ev[0], 'w'))
      elif ev[1] == pad.UPLEFT: key.append((ev[0], 'k'))
      elif ev[1] == pad.RIGHT: key.append((ev[0], 'r'))
      elif ev[1] == pad.UPRIGHT: key.append((ev[0], 'z'))
      elif ev[1] == pad.DOWNRIGHT: key.append((ev[0], 'g'))
      elif ev[1] == pad.UP: key.append((ev[0], 'u'))
      elif ev[1] == pad.DOWN: key.append((ev[0], 'd'))
      elif ev[1] == pad.CENTER: key.append((ev[0], 'c'))

      ev = pad.poll()

    if ev[1] == pad.QUIT: return False
  
    for ev in key:
      if game.double: pid = ev[0] / 2
      else: pid = ev[0]
      
      if pid < len(players): players[pid].handle_key(ev, curtime)

    rectlist = []

    if backmovie:
      backmovie.update(curtime)
      if backmovie.changed or (fpstext.fps() > 30):
        backmovie.resetchange()
        screen.blit(backmovie.image, [0, 0])

    for plr in players: rectlist.extend(plr.game_loop(curtime, screen))

    lgroup.update(curtime)
    tgroup.update(curtime)
    rectlist.extend(tgroup.draw(screen))
    rectlist.extend(lgroup.draw(screen))

    if backmovie is None: pygame.display.update(rectlist)
    else: pygame.display.update()

    if screenshot:
      fn = os.path.join(rc_path, "screenshot.bmp")
      print _("Saving a screenshot to"), fn
      pygame.image.save(screen, fn)
      screenshot = False

    if backmovie is None:
      lgroup.clear(screen, background)
      tgroup.clear(screen, background)
      for plr in players: plr.clear_sprites(screen, background)

    if ((curtime > players[0].length - 1) and
        (songtext.zdir == 0) and (songtext.zoom > 0)):
      songtext.zout()
      grptext.zout()

  if fpstext: print _("Average FPS for this song was %d.") % fpstext.fps()
  return songFailed
Esempio n. 19
0
def main():
	"""this function is called when the program starts.
	   it initializes everything it needs, then runs in
	   a loop until the function returns."""
#Initialize Everything
	global screen
	screen = None
	pygame.init()
	screen = pygame.display.set_mode(RESOLUTION)
	pygame.display.set_caption('Example Poutine Window')

#Create The Backgound
	bg = pygame.Surface( RESOLUTION )
	bg.fill( BGCOLOR )

#Display The Background
	screen.blit(bg, (0, 0))
	pygame.display.flip()

#Prepare Game Objects
	clock = pygame.time.Clock()

	label = LabelSprite( 'foo' )
	label.rect.move_ip( 100, 100 )
	#this will be the callback function of the button
	def buttonWasClicked():
		print "button clicked"
	button = ButtonSprite( 'bar', None, buttonWasClicked )
	button.rect.move_ip( 100, 300 )

	tEntry = TextEntrySprite('textentry')
	tEntry.rect.move_ip( 100, 400 )

	allWidgets = RenderUpdates()
	allWidgets.add( label )
	allWidgets.add( button )
	allWidgets.add( tEntry )



#Main Loop
	while 1:
		timeChange = clock.tick(40)

	#Handle Input Events
		oldEvents = []
		remainingEvents = pygame.event.get()
		for event in remainingEvents:
			oldEvents.append( remainingEvents.pop(0) )
			if event.type == QUIT:
				return
			elif event.type == KEYDOWN and event.key == K_ESCAPE:
				return

			elif event.type == KEYDOWN:
				key = event.unicode.encode("ascii")
				if key and key in string.printable:
					for s in  allWidgets.sprites():
						if hasattr( s, "OnKeyPressed" ):
							s.OnKeyPressed( key )
				else:
					key = event.key
					for s in  allWidgets.sprites():
						if hasattr( s, "OnMetaPressed"):
							s.OnMetaPressed( key )
			elif event.type == MOUSEMOTION:
				for sprite in  allWidgets.sprites():
					if hasattr( sprite, "OnMouseMove" ):
						sprite.OnMouseMove( event.pos )
			elif event.type == MOUSEBUTTONDOWN:
				for sprite in  allWidgets.sprites():
					if hasattr( sprite, "OnMouseClick" ):
						sprite.OnMouseClick( event.pos )

	#Draw Everything
		allWidgets.clear( screen, bg )
		allWidgets.update( )
		changedRects =  allWidgets.draw(screen)
		pygame.display.update( changedRects )


#Game Over
	pygame.quit()
Esempio n. 20
0
class ParkPanel:
	def __init__(self,bgImage, pos):
		self.isDone = 0
		self.boundRect = bgImage.get_rect()

		self.deviceGroup = RenderUpdates()
		self.rideGroup = RenderUpdates()
		self.carGroup = RenderUpdates()
		self.lineupGroup = RenderUpdates()
		self.highlightGroup = RenderUpdates()
		self.redVisitorGroup = RenderUpdates()
		self.greenVisitorGroup = RenderUpdates()
		self.parkGeography = parkGenerationFunction()
		allobjects.timeOfDay = simulation.startTime

		self.bgImage = bgImage

		for r in self.parkGeography.rides:
			self.rideGroup.add( r )
			self.carGroup.add( r.idleCars )

		for l in self.parkGeography.lineups:
			self.lineupGroup.add( l )
			

		totalVisitors = simulation.InitialNumVisitors(0)
		numGreen = int(totalVisitors*simulation.deviceAcceptanceRate)
		numRed = totalVisitors - numGreen
		for i in xrange( numGreen ):
			device = allobjects.server.NewDevice()
			if device:
				self.deviceGroup.add( device )
				newGuy = GuidedVisitor( device )
			else:
				newGuy = UnGuidedVisitor()
			self.AddVisitor( newGuy )
		for i in xrange( numRed ):
			newGuy = UnGuidedVisitor()
			self.AddVisitor( newGuy )

		events.AddListener( self )
		events.AddEvent( "SelectVisitor" )
		events.AddEvent( "UnSelectVisitor" )
		events.AddEvent( "HighlightRide" )
		events.AddEvent( "UnHighlightRide" )
		events.AddEvent( "HighlightLineup" )
		events.AddEvent( "UnHighlightLineup" )
		self.paused = False
		self.showRed = True
		self.justToggledShowRed = False
		self.showServer = True
		self.justToggledShowServer = False
		self.showGreen = True
		self.justToggledShowGreen = False

		self.redCircle = Surface( (17,17),SRCALPHA,32 )
		pygame.draw.circle( self.redCircle, (255,0,0), (8,8), 8, 1  )
		self.greenCircle = Surface( (17,17),SRCALPHA,32 )
		pygame.draw.circle( self.greenCircle, (0,255,0), (8,8), 8, 1 )

		self.highlight = Sprite()
		self.highlight.image = self.greenCircle
		self.highlight.rect = self.greenCircle.get_rect()

		self.selection = Sprite()
		self.selection.image = self.greenCircle
		self.selection.rect = self.greenCircle.get_rect()

		self.highlightVisitor = None
		self.selectedVisitor = None

	#---------------------------------------------------------------------
	def On_Pause(self):
		log.info( 'parkpanel pause' )
		self.paused = not self.paused

	#---------------------------------------------------------------------
	def On_ShowRed(self):
		self.showRed = not self.showRed
		self.justToggledShowRed = True

	#---------------------------------------------------------------------
	def On_ShowGreen(self):
		self.showGreen = not self.showGreen
		self.justToggledShowGreen = True

	#---------------------------------------------------------------------
	def On_ShowServer(self):
		self.showServer = not self.showServer
		self.justToggledShowServer = True

	#---------------------------------------------------------------------
	def On_MouseClick(self,pos):
		if not self.boundRect.collidepoint( pos ):
			return
		if self.selectedVisitor:
			events.Fire( "UnSelectVisitor", self.selectedVisitor )
			self.selectedVisitor = None
			self.highlightGroup.remove( self.selection )

		self.selectedVisitor = self.FindVisitorNear(pos)

		if not self.selectedVisitor:
			return

		self.highlightGroup.add( self.selection )

		if hasattr( self.selectedVisitor, 'device' ):
			self.selection.image = self.greenCircle
		else:
			self.selection.image = self.redCircle

		events.Fire( "SelectVisitor", self.selectedVisitor )

	#---------------------------------------------------------------------
	def UpdateHighlightGroup(self):
		if self.selectedVisitor:
			self.selection.rect.center = self.selectedVisitor.rect.center
		self.highlightGroup.update()

	#---------------------------------------------------------------------
	def On_MouseMove(self,event):
		pos = event.pos
		if not self.boundRect.collidepoint( pos ):
			return

		self.highlightVisitor = self.FindVisitorNear(pos)
		self.HighlightRideNear(pos)
		self.HighlightLineupNear(pos)

		if not self.highlightVisitor:
			self.highlightGroup.remove( self.highlight )
			return

		if hasattr( self.highlightVisitor, 'device' ):
			self.highlight.image = self.greenCircle
		else:
			self.highlight.image = self.redCircle

		self.highlight.rect.center = self.highlightVisitor.rect.center
		self.highlightGroup.add( self.highlight )

	#---------------------------------------------------------------------
	def AddVisitor(self, visitor, pos=None):
		if hasattr( visitor, "device" ):
			self.greenVisitorGroup.add( visitor )
		else:
			self.redVisitorGroup.add( visitor )
		self.parkGeography.PlaceVisitor( visitor, pos )
		allobjects.allVisitors.add( visitor )

	#---------------------------------------------------------------------
	def DoVisitorEntries( self ):
		if len( allobjects.allVisitors ) >= simulation.capacity:
			return

		totalVisitors = simulation.getEntryRate( allobjects.timeOfDay )
		#print "entering ", totalVisitors
		numGreen = int(totalVisitors*simulation.deviceAcceptanceRate)
		if not allobjects.thousandCounter%2:
			numGreen += 1
		numRed = totalVisitors - numGreen
		pos = self.parkGeography.GetEntryPoint()
		for i in xrange( numGreen ):
			device = allobjects.server.NewDevice()
			if device:
				self.deviceGroup.add( device )
				newGuy = GuidedVisitor( device )
			else:
				newGuy = UnGuidedVisitor()
			self.AddVisitor( newGuy, pos )
		for i in xrange( numRed ):
			newGuy = UnGuidedVisitor()
			self.AddVisitor( newGuy, pos )

	#---------------------------------------------------------------------
	def DoVisitorExits( self ):
		if not allobjects.allVisitors:
			return
		totalVisitors = simulation.getExitRate( allobjects.timeOfDay )
		for i in xrange( totalVisitors ):
			allobjects.allVisitors.sprites()[i].LeaveThePark()

	#---------------------------------------------------------------------
	def RemoveVisitor(self, visitor):
		visitor.kill()

	#---------------------------------------------------------------------
	def FindVisitorNear(self,pos,radius=4):
		for v in self.greenVisitorGroup.sprites():
			if abs( v.rect.centerx - pos[0] ) < radius \
			  and abs( v.rect.centery - pos[1] ) < radius:
				return v
		for v in self.redVisitorGroup.sprites():
			if abs( v.rect.centerx - pos[0] ) < radius \
			  and abs( v.rect.centery - pos[1] ) < radius:
			  	return v
		return None

	#---------------------------------------------------------------------
	def HighlightRideNear(self,pos):
		events.Fire( "UnHighlightRide" )

		for r in self.rideGroup.sprites():
			if r.rect.collidepoint( pos ):
				events.Fire( "HighlightRide", r )
				return

	#---------------------------------------------------------------------
	def HighlightLineupNear(self,pos):
		events.Fire( "UnHighlightLineup" )

		for l in self.lineupGroup.sprites():
			if l.rect.collidepoint( pos ):
				events.Fire( "HighlightLineup", l )
				return

	#---------------------------------------------------------------------
	def SignalKey( self, event, remainingEvents ):
		pass

	#---------------------------------------------------------------------
	def Click( self, pos ):
		pass
	#---------------------------------------------------------------------
	def MouseOver( self, event ):
		pass
		
	#---------------------------------------------------------------------
	def DoGraphics( self, screen, display, timeChange ):
		if self.justToggledShowRed  \
		   or self.justToggledShowGreen \
		   or self.justToggledShowServer:
			screen.blit( self.bgImage, self.boundRect )
			display.flip()
			self.justToggledShowRed = False
			self.justToggledShowGreen = False
			self.justToggledShowServer = False
		else:
			bg = self.bgImage

			self.rideGroup.clear(screen, self.bgImage)
			self.lineupGroup.clear(screen, self.bgImage)
			self.highlightGroup.clear( screen, self.bgImage )
			if self.showRed:
				self.redVisitorGroup.clear( screen, bg )
			if self.showGreen:
				self.greenVisitorGroup.clear( screen, bg )
			if self.showServer:
				self.deviceGroup.clear(screen, self.bgImage )

		self.UpdateHighlightGroup()
		if not allobjects.thousandCounter % 30:
			self.DoVisitorEntries()
			self.DoVisitorExits()

		if not self.paused:
			allobjects.timeOfDay += simulation.speed
			self.carGroup.update()
			self.rideGroup.update()
			self.lineupGroup.update()
			self.redVisitorGroup.update()
			self.greenVisitorGroup.update()
			if self.showServer:
				self.deviceGroup.update()

		changedRects =  self.highlightGroup.draw(screen)
		changedRects += self.rideGroup.draw(screen)
		changedRects += self.carGroup.draw(screen)
		changedRects += self.lineupGroup.draw(screen)
		if self.showRed:
			changedRects += self.redVisitorGroup.draw(screen)
		if self.showGreen:
			changedRects += self.greenVisitorGroup.draw(screen)
		if self.showServer:
			changedRects += self.deviceGroup.draw(screen)

		display.update( changedRects )
Esempio n. 21
0
class Game:

    def __init__(self, title='Checkers', log_level=log.INFO, show_fps=False):
        log.basicConfig(level=log_level)
        self.show_fps = show_fps
        self.window_title = title
        self.game = Board(BOARD_DIM)
        # Initialize Game Groups
        self.brown_spaces = RenderUpdates()
        self.pieces = RenderUpdates()
        self.piece_selected = GroupSingle()
        self.space_selected = GroupSingle()
        self.current_piece_position = ORIGIN
        self.screen = None
        self.fps_clock = None
        self.font = None
        self.font_rect = None
        self.background = None
        self.background_rect = None
        self.fps_text = None
        self.fps_rect = None
        self.winner_text = None
        self.winner_rect = None

    def _board_setup(self, **kwargs):
        """ initialize board state """
        brown_spaces = kwargs.get('brown_spaces')
        for col, row in self.game.usable_positions():
            loc = TILE_WIDTH * col + (BORDER_WIDTH / 2), TILE_WIDTH * row + (BORDER_WIDTH / 2)
            brown_spaces.add(SquareSprite(loc, "brown", row, col))

    def _screen_init(self):
        """ Initialise screen """
        pygame.init()
        self.screen = pygame.display.set_mode(SCREEN_RES)
        pygame.display.set_caption(self.window_title)
        return self.screen

    def _get_background(self):
        result = pygame.Surface(self.screen.get_size())
        (bg_img, bg_rect) = ImageLoader.load_img('marble-board.jpg')
        result.blit(bg_img, bg_rect)
        return result.convert(), bg_rect

    def _get_fps_text(self):
        fps_text = self.font.render("%4.1f fps" % self.fps_clock.get_fps(), True, WHITE)
        rect = fps_text.get_rect()
        rect.right, rect.bottom = self.background_rect.right, self.background_rect.bottom
        return fps_text, rect

    def _draw_fps(self):
        if self.show_fps:
            self.fps_text, self.fps_rect = self._get_fps_text()
            self.screen.blit(self.fps_text, self.fps_rect)

    def _clear_fps(self):
        if self.show_fps:
            self.screen.blit(self.background, self.fps_rect, area=self.fps_rect)

    def _clear_items(self):
        self._clear_winner()
        self._clear_fps()
        self.piece_selected.clear(self.screen, self.background)
        self.pieces.clear(self.screen, self.background)

    def _draw_winner(self):
        winner = self.game.winner()
        if winner:
            self.winner_text = self.font.render("%s wins!" % winner.title(), True, WHITE)
            winner_rect = self.winner_text.get_rect()
            winner_rect.centerx = self.background.get_rect().centerx
            winner_rect.top = 100
            self.winner_rect = winner_rect
            self.screen.blit(self.winner_text, winner_rect)

    def _clear_winner(self):
        winner = self.game.winner()
        if winner:
            self.screen.blit(self.background, self.winner_rect, area=self.winner_rect)

    def _quit(self):
        log.debug('quitting')
        sys.exit()

    def _select_piece(self, event):
        # select the piece by seeing if the piece collides with cursor
        self.piece_selected.add(piece for piece in self.pieces if piece.rect.collidepoint(event.pos))
        # Capture piece's original position (at center) to determine move on drop
        if len(self.piece_selected) > 0:
            # Assumed: starting a move
            pygame.event.set_grab(True)
            self.pieces.remove(self.piece_selected)
            self.current_piece_position = (self.piece_selected.sprite.rect.centerx,
                                           self.piece_selected.sprite.rect.centery)
            log.debug('grabbing input, picked up piece at %s', self.current_piece_position)

    def _drag_piece(self):
        #  Until button is let go, move the piece with the mouse position
        self.piece_selected.update(pygame.mouse.get_pos())
        log.debug('updated piece to %s', pygame.mouse.get_pos())

    def _drop_piece(self, event):
        if pygame.event.get_grab():
            pygame.event.set_grab(False)
            log.debug('releasing input')

            # center the piece on the valid space; if it is not touching a space, return it to its original position
            self.space_selected.add(space for space in self.brown_spaces
                                    if space.rect.collidepoint(event.pos))

            if self.piece_selected and self.space_selected:
                log.debug('dropped a piece')
                piece, space = self.piece_selected.sprite, self.space_selected.sprite
                try:
                    captured = self.game.move(piece.location, (space.col, space.row))
                    if captured:
                        self.pieces.remove(captured)
                except InvalidMoveException as ce:
                    log.debug(ce)
                log.debug("%s", str(self.game))

            self.piece_selected.sprite.update_from_board()

            # Add piece back to stationary set
            self.pieces.add(self.piece_selected)

            # clean up for the next selected piece
            self.piece_selected.empty()
            self.space_selected.empty()

    def _draw_items(self):
        self.pieces.draw(self.screen)
        self.piece_selected.draw(self.screen)
        self._draw_winner()
        self._draw_fps()


    def run(self):

        log.debug('starting game')

        log.debug('initializing screen')
        self.screen = self._screen_init()

        log.debug('getting font')
        self.font = pygame.font.Font(None, 36)

        log.debug('loading background')
        self.background, self.background_rect= self._get_background()

        log.debug('building initial game board')
        self._board_setup(brown_spaces=self.brown_spaces)

        log.debug('initializing game pieces')
        for player, x, y in self.game.start_positions():
            new_piece = PieceSprite(player)
            self.game.add_piece(new_piece, (x, y))
            new_piece.update_from_board()
            self.pieces.add(new_piece)

        log.debug('drawing initial content to screen')
        self.screen.blit(self.background, ORIGIN)
        pygame.display.flip()

        self.piece_selected = GroupSingle()
        self.space_selected = GroupSingle()
        self.current_piece_position = ORIGIN

        self.fps_clock = Clock()

        self._draw_fps()

        # Event loop
        while True:

            self._clear_items()

            for event in pygame.event.get():

                if event.type == QUIT:
                    self._quit()

                if event.type == MOUSEBUTTONDOWN:     # select a piece
                    log.debug('mouse pressed')
                    self._select_piece(event)

                if event.type == MOUSEBUTTONUP:     # let go of a piece
                    log.debug('mouse released')
                    self._drop_piece(event)

                if pygame.event.get_grab():          # drag selected piece around
                    log.debug('dragging')
                    self._drag_piece()

            self._draw_items()

            self.fps_clock.tick(60)  # Waits to maintain 60 fps

            # TODO: Use display.update instead
            pygame.display.flip()
Esempio n. 22
0
class Game(object):
    title = 'Gravity'
    screen_size = 1000, 750
    
    def __init__(self,level=0):
        pygame.init()
        
        self.screen = pygame.display.set_mode(self.screen_size)
        if self.title:
            pygame.display.set_caption(self.title)
        self.fps = 30

        #group definitions
        self.userPlacedObjects = Group()
        self.startItems = RenderUpdates()
        self.playerGroup = RenderUpdates()
        self.tails = RenderUpdates()
        self.blackHoles = RenderUpdates()
        self.obstacles = RenderUpdates()
        self.masslessObstacles = RenderUpdates()
        self.goalCollide = Group()
        self.toolbar = OrderedUpdates()

        #level/transition/player & enemy/obstacle creation hocus pocus
        self.goal = Goal(573,372,self.goalCollide,30)
        self.bar = ToolBar(0,626,self.toolbar,self.screen,self,self.goal)
        self.player = Player(50,535,self.screen,(255,0,0),self.playerGroup,1000,624,(2,-2),self.tails,self)
        
        self.level = level
        self.levelUp = True
        self.stars = Starfield(self.screen,1000,626,200)
        BlackHole(339,70,self.blackHoles,self.screen,80,71,16)
        temp = EarthRounder(513,313,self.masslessObstacles,self.screen,40,0)
        temp.rotate(55)
        temp = Alien(60,188,self.masslessObstacles,self.screen,34,1)
        temp.rotate(-15)
        temp = Alien(107,268,self.masslessObstacles,self.screen,35,1)
        temp.rotate(-75)
        temp = Alien(816,533,self.masslessObstacles,self.screen,39,0)
        temp.rotate(-13)
        temp = BlueUpAnDown(811,227,self.masslessObstacles,self.screen,34,1,97,239)
        temp.rotate(80)
        self.obstacles.add(self.blackHoles)
        self.obstacles.add(self.goalCollide)
        self.freeb = False
        self.gotoLevel = level
        self.loaded = False

        if system.thereIsASaveFile() and level == 0:
            self.intro_screen = Intro(0,0,self.startItems,str('title_w_file.png'))
            self.thereIsAFile = True
        elif level == 0:
            self.intro_screen = Intro(0,0,self.startItems)
            self.thereIsAFile = False
      
    def quit(self):
        self.done = True
   
    def level_0(self):
        self.clock.tick(self.fps)
        pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))
        
        for evt in pygame.event.get():
            if evt.type == QUIT:
                self.quit()
            if evt.type == KEYDOWN:
                if evt.key == K_ESCAPE:
                    self.quit()
                elif evt.key == K_RETURN:
                    if not self.thereIsAFile:
                        self.transition = Transition(-1314,0,self.screen,self.startItems)
                        self.intro_screen.begin()
                    else:
                        loadingDial = system.Loading()
                        pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))
                        self.startItems.draw(self.screen)
                        loadingDial.draw(self.screen)
                        pygame.display.flip()
                        self.loadFile(system.loadFile())
                        
                elif evt.key == K_RIGHT:
                    self.intro_screen.instruct(True)
                elif evt.key == K_LEFT:
                    self.intro_screen.instruct(False)
                elif evt.key == K_n:
                    if self.thereIsAFile:
                        self.transition = Transition(-1314,0,self.screen,self.startItems)
                        self.intro_screen.begin()
                        self.transition = Transition(-1314,0,self.screen,self.startItems)
                elif evt.key == K_d:
                    if self.thereIsAFile:
                        os.remove('save.txt')
                        self.thereIsAFile = False
                        self.startItems.empty()
                        self.intro_screen = Intro(0,0,self.startItems)

       
        if self.intro_screen.next_level():
            self.level = 1
        
        
        self.startItems.update()
        self.stars.draw()
        self.goalCollide.draw(self.screen)
        self.toolbar.draw(self.screen)
        self.masslessObstacles.draw(self.screen)
        self.playerGroup.draw(self.screen)
        self.blackHoles.draw(self.screen)
        self.startItems.draw(self.screen)
        

        pygame.display.flip()

        

    def tick(self):
        self.clock.tick(self.fps)
        pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))
        pos = pygame.mouse.get_pos()

        #inputs queue
        for evt in pygame.event.get():
            if evt.type == QUIT:
                self.quit()
            elif evt.type == KEYDOWN:
                if evt.key == K_ESCAPE and not self.bar.itemsTab.open and self.bar.grabbed == None:
                    self.bar.menuWidget.dropped()
                elif evt.key == K_ESCAPE and self.bar.grabbed == None:
                    self.bar.itemsTab.dropped()
                    self.bar.menuWidget.dropped()
                                        
            elif evt.type == MOUSEBUTTONDOWN:
                #print pos
                should_freebie = self.bar.collision_test(pos,self.player,evt.button)
                if should_freebie and not self.freeb:
                    self.freebie()
                    self.freeb = True
                if evt.button == 1:
                    for obj in self.userPlacedObjects:
                        if obj.rect.collidepoint(pos) and not self.player.makeANew and not self.bar.menuWidget.open:
                            obj.grab(pos)
                elif evt.button == 3:
                    for obj in self.userPlacedObjects:
                        if obj.rect.collidepoint(pos) and not self.player.makeANew and not self.bar.menuWidget.open:
                            obj.remove()
            elif evt.type == MOUSEBUTTONUP:
                self.bar.clear_grabbed()
                for obj in self.userPlacedObjects:
                    obj.drop(self.blackHoles)
             
   
        if self.level == 4 and self.player.makeANew:
            self.masslessObstacles.update()
   
        #self.masslessObstacles.update(self.player.makeANew)
        self.stars.draw()
        self.player.drawTails()
        self.blackHoles.update()
        self.bar.update(pos)
        self.blackHoles.draw(self.screen)
        self.userPlacedObjects.update(pos)
        self.userPlacedObjects.draw(self.screen)
        self.masslessObstacles.draw(self.screen)
        self.goalCollide.draw(self.screen)
        self.toolbar.draw(self.screen)
        self.playerGroup.update()
        self.playerGroup.draw(self.screen)  

        if len(self.playerGroup) == 0 and self.player.lives >1:
            self.bar.lives_update()
            self.bar.score.update(-200)
            pygame.time.wait(750)
            self.player.lives -= 1
            if self.level == 4:
                self.asteroid.reset()
            self.player.add(self.playerGroup)
        elif len(self.playerGroup) == 0:
            self.bar.score.update(-200)
            self.bar.lives_update()
            self.over_screen = GameOverScreen(293,161,self.screen)
            if self.level == 4:
                self.asteroid.reset()
            self.gameOver()
                
        if pygame.sprite.collide_mask(self.player, self.goal):
            if self.loaded != 0:
                self.level = self.loaded
                self.loaded = 0
            self.next_level()
            

        for obj in self.blackHoles:
            if pygame.sprite.collide_mask(self.player,obj):
                self.player.blackHoleCollision(True,False)

        for obj in self.masslessObstacles:
            if  pygame.sprite.collide_mask(self.player,obj):
                self.player.update(True)
        
        for obj in self.userPlacedObjects:
            if pygame.sprite.collide_mask(self.player,obj) and not obj.grabbed:
                self.player.update(True)
        

        pygame.display.flip()


    def next_level(self,add_score_bool=True,trans_effect=True):
        if self.level < 5:
            print self.level,"pre-adding"
            self.level += 1
            print self.level,"post-adding"
        #print self.level
        if self.level == 5:
            return
        if trans_effect: self.transition.add_to_group()
        changed = False
        while True:
            self.clock.tick(self.fps)
            pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))
            
            for evt in pygame.event.get():
                if evt.type == QUIT:
                    self.quit()
                if evt.type == KEYDOWN:
                    if evt.key == K_ESCAPE:
                        self.quit()
                        
            if not trans_effect or self.transition.rect.x >= -50 and not changed:
                print self.level
                if self.level == 2:
                    self.make_level_two(add_score_bool)
                if self.level == 3:
                    self.make_level_three(add_score_bool)
                if self.level == 4:
                    self.make_level_four(add_score_bool)

                if add_score_bool:
                    self.bar.score.update(2000)


                self.player.restart(add_score_bool)
                changed = True      

            if not trans_effect:
                print self.level,"load" 
                break
                
            self.startItems.update()
            self.stars.draw()
            self.player.drawTails()
            self.goalCollide.draw(self.screen)
            self.masslessObstacles.draw(self.screen)
            self.userPlacedObjects.draw(self.screen)
            self.toolbar.draw(self.screen)
            self.blackHoles.draw(self.screen)
            self.playerGroup.draw(self.screen)  
            self.startItems.draw(self.screen)
            if self.transition.rect.x > 1000:
                self.transition.kill()
                break


            pygame.display.flip()
        if trans_effect:
            self.transition.reset(-1314)
        print self.level,"end o loop"
        return False

    
    def freebie(self):
        groupus = Group()
        groupus.add(self.blackHoles,self.goal)
        self.player.makeANew = True
        self.player.addTail = False
        while True:
            self.clock.tick(self.fps)
            pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))
            
            for evt in pygame.event.get():
                if evt.type == QUIT:
                    self.quit()
                if evt.type == KEYDOWN:
                    if evt.key == K_ESCAPE:
                        self.quit()
            
            
            for obj in self.blackHoles:
                if pygame.sprite.collide_mask(self.player,obj):
                    self.player.blackHoleCollision(True,False)

            for obj in self.masslessObstacles:
                if  pygame.sprite.collide_mask(self.player,obj):
                    self.player.update(True)
        
            for obj in self.userPlacedObjects:
                if pygame.sprite.collide_mask(self.player,obj) and not obj.grabbed:
                    self.player.update(True)
            

            self.startItems.update()
            #self.masslessObstacles.update()
            self.stars.draw()
            self.player.drawTails()
            self.goalCollide.draw(self.screen)
            self.masslessObstacles.draw(self.screen)
            self.userPlacedObjects.draw(self.screen)
            self.toolbar.draw(self.screen)
            self.blackHoles.draw(self.screen)
            self.player.update(False,groupus)
            self.playerGroup.draw(self.screen)  
            self.startItems.draw(self.screen)
            if len(self.playerGroup) < 1:
                self.player.addTail = True
                pygame.time.wait(750)
                self.player.add(self.playerGroup)
                break
            pygame.display.flip()
            

    def gameOver(self):
        overing = True
        self.bar.update()
        self.toolbar.draw(self.screen)
        self.over_screen.draw()
        pygame.display.flip()
        while overing:
            self.clock.tick(self.fps)
            
            for evt in pygame.event.get():
                if evt.type == QUIT:
                    overing = False
                    self.quit()
                if evt.type == KEYDOWN:
                    if evt.key == K_ESCAPE:
                        overing = False
                        self.quit()
                    if evt.key == K_RETURN:
                        overing = False
            
            
        
        self.player.add(self.playerGroup)
        self.bar.reset_lives_over()
        self.player.restart()
        self.over_screen.kill()

    def inStructionees(self):
        self.instructions = Instructions(0,-750,self.startItems)
        self.instructions.instruct(True)

        while True:
            self.clock.tick(self.fps)
            pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))

            if self.instructions.instruct and self.instructions.rect.y < 0:
                self.instructions.rect.y += 50

            elif not self.instructions.instruct and self.instructions.rect.y > -750:
                self.instructions.rect.y -= 50
            elif not self.instructions.instruct and self.instructions.rect.y <= -750:
                self.instructions.kill()
                return
            
            
            for evt in pygame.event.get():
                if evt.type == QUIT:
                    self.quit()
                    return
                elif evt.type == KEYDOWN:
                    if evt.key == K_RETURN:
                        self.instructions.instruct = False
                    elif evt.key == K_ESCAPE:
                        self.quit()
                        return

            self.stars.draw()
            self.player.drawTails()
            self.goalCollide.draw(self.screen)
            self.masslessObstacles.draw(self.screen)
            self.userPlacedObjects.draw(self.screen)
            self.toolbar.draw(self.screen)
            self.blackHoles.draw(self.screen)
            self.playerGroup.draw(self.screen)  
            self.startItems.draw(self.screen)
                
            pygame.display.flip()
    
    def saveFile(self):
        save_confirm = GameOverScreen(293,161,self.screen,str('filesaved.png'))
        save_confirm.draw()
        self.bar.menuWidget.dropped()
        system.saveFile(self.level,self.player.lives,self.bar.score.score)
        pygame.display.flip()
        while True:
            self.clock.tick(self.fps)
            pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))

            for evt in pygame.event.get():
                if evt.type == QUIT:
                    self.quit()
                    return
                elif evt.type == KEYDOWN:
                    if evt.key == K_RETURN:
                        return
                    elif evt.key == K_ESCAPE:
                        self.quit()
                        return

            
    def loadFile(self,file_tuple):
        gotoLevel,gotoLives,gotoScore = file_tuple
        self.level = gotoLevel
        if self.level > 1:
            self.loaded = self.level
        self.player.lives = gotoLives
        self.bar.lives.next_life = gotoLives+1
        self.bar.lives_update()
        self.bar.score.reset(gotoScore)
        if gotoLevel != 1:
            self.level -= 1
            self.next_level(False,False)
        self.startItems.empty()
        self.intro_screen = Intro(0,0,self.startItems,str('title_w_file.png'))
        self.intro_screen.begin()
        self.transition = Transition(-1314,0,self.screen,self.startItems)

        while True:
            self.clock.tick(self.fps)
            pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))
            
            
            if self.intro_screen.next_level():
                break
            
            self.startItems.update()
            self.startItems.update()
            self.stars.draw()
            self.goalCollide.draw(self.screen)
            self.toolbar.draw(self.screen)
            self.masslessObstacles.draw(self.screen)
            self.playerGroup.draw(self.screen)
            self.blackHoles.draw(self.screen)
            self.startItems.draw(self.screen)
            
            
            pygame.display.flip()

        
    def gameWinner(self):
        self.clock.tick(self.fps)
        pygame.draw.rect(self.screen,(0,0,0),((0,0),(1000,750)))
            
            
        for evt in pygame.event.get():
            if evt.type == QUIT:
                self.quit()
                
            elif evt.type == KEYDOWN:
                self.quit()
            
        self.winnerScreen.draw()
        pygame.display.flip()
        
    def run(self,level=0):
        self.done = False
        self.clock = pygame.time.Clock()
        if self.gotoLevel > 1 and self.gotoLevel < 4:
            self.transition = Transition(-1314,0,self.screen,self.startItems)
            self.tick()
            self.level = self.gotoLevel
            self.next_level()
        while not self.done:
            while self.level == 0 and not self.done:
                self.level_0()
            while self.level >= 1 and self.level < 5 and not self.done:
                self.tick()
            self.winnerScreen = WinScreen(0,0,self.screen)
            while not self.done:
                self.gameWinner()


    def make_level_two(self,reset_lives_bool):
        self.tails.empty()
        self.goal.next_level(self.level)
        self.bar.next_level(self.level,reset_lives_bool)
        self.userPlacedObjects.empty()
        self.blackHoles.empty()
        self.obstacles.empty()
        self.freeb = False
        self.bar.itemsTab.earth_item.light()
        self.masslessObstacles.empty()
        temp = Alien(55,143,self.masslessObstacles,self.screen,39,1)
        temp.rotate(-66)
        temp = Alien(189,98,self.masslessObstacles,self.screen,36,1)
        temp.rotate(23)
        temp = Alien(107,228,self.masslessObstacles,self.screen,32,1)
        temp.rotate(17)
        temp = BlueUpAnDown(249,244,self.masslessObstacles,self.screen,41,1,204,245)
        temp.rotate(80)
        temp = TwitchyOnes(898,541,self.masslessObstacles,self.screen,45,2)
        temp.rotate(22)
        temp = TwitchyOnes(730,545,self.masslessObstacles,self.screen,40,2)
        temp.rotate(-30)
        temp = Rotator(525,121,self.masslessObstacles,self.screen,50,0,-70)
        BlackHole(842,388,self.blackHoles,self.screen,80,71,16)
        hole = BlackHole(388,189,self.blackHoles,self.screen,80,71,16)
        hole.flip()
        self.obstacles.add(self.blackHoles)
        self.obstacles.add(self.goal)

    def make_level_three(self,reset_lives_bool):
        self.goal.next_level(self.level)
        self.bar.next_level(self.level,reset_lives_bool)
        self.userPlacedObjects.empty()
        self.blackHoles.empty()
        self.obstacles.empty()
        self.freeb = False
        self.bar.itemsTab.earth_item.light()
        self.masslessObstacles.empty()
        temp = Alien(519,257,self.masslessObstacles,self.screen,28,3)
        temp.rotate(18)
        temp = Alien(539,247,self.masslessObstacles,self.screen,27,3)
        temp.rotate(60)
        temp = Alien(555,240,self.masslessObstacles,self.screen,25,3)
        temp.rotate(-20)
        temp = Alien(568,281,self.masslessObstacles,self.screen,29,3)
        temp.rotate(-45)
        temp = Alien(549,291,self.masslessObstacles,self.screen,32,3)
        temp.rotate(10)
        temp = Alien(530,301,self.masslessObstacles,self.screen,26,3)
        temp = Alien(562,265,self.masslessObstacles,self.screen,27,3)
        temp.rotate(25)   
        temp = Alien(519,334,self.masslessObstacles,self.screen,25,3)
        temp.rotate(-70)
        temp = Alien(500,307,self.masslessObstacles,self.screen,25,3)
        temp.rotate(-80)
        temp = Alien(494,356,self.masslessObstacles,self.screen,25,3)
        temp.rotate(-3)
        temp = Alien(560,365,self.masslessObstacles,self.screen,25,3)
        temp.rotate(77)
        temp = Alien(525,374,self.masslessObstacles,self.screen,29,3)
        temp.rotate(33)
        temp = Alien(640,290,self.masslessObstacles,self.screen,26,3)
        temp.rotate(37)
        temp = Alien(607,250,self.masslessObstacles,self.screen,33,3)
        temp.rotate(-27)  
        temp = Alien(518,421,self.masslessObstacles,self.screen,24,3)
        temp.rotate(55)
        temp = Alien(473,419,self.masslessObstacles,self.screen,28,3)
        temp.rotate(-43)
        temp = Alien(480,453,self.masslessObstacles,self.screen,27,3)
        temp = Alien(512,479,self.masslessObstacles,self.screen,31,3)
        temp.rotate(4)
        temp = Alien(422,500,self.masslessObstacles,self.screen,32,3)
        temp = Alien(463,521,self.masslessObstacles,self.screen,27,3)
        temp.rotate(22)
        temp = Alien(471,486,self.masslessObstacles,self.screen,22,3)
        temp.rotate(80)
        temp = Alien(743,713,self.masslessObstacles,self.screen,25,3)
        temp.rotate(13)
        temp = Alien(527,532,self.masslessObstacles,self.screen,28,3)
        temp.rotate(-8)
        temp = Alien(568,559,self.masslessObstacles,self.screen,27,3)
        temp = Alien(527,593,self.masslessObstacles,self.screen,23,3)
        temp.rotate(-60)
        temp = Alien(652,552,self.masslessObstacles,self.screen,25,3)
        temp.rotate(-24)
        temp = Alien(636,581,self.masslessObstacles,self.screen,26,3)
        temp.rotate(-19)
        temp = Alien(714,596,self.masslessObstacles,self.screen,22,3)
        temp.rotate(-88)
        BlackHole(162,42,self.blackHoles,self.screen,80,71,29)
        self.obstacles.add(self.goal)
        self.obstacles.add(self.blackHoles)

    def make_level_four(self,reset_lives_bool):
        self.goal.next_level(self.level)
        self.bar.next_level(self.level,reset_lives_bool)
        self.userPlacedObjects.empty()
        self.blackHoles.empty()
        self.obstacles.empty()
        self.freeb = False
        self.bar.itemsTab.earth_item.light()
        self.masslessObstacles.empty()
        BlackHole(183,61,self.blackHoles,self.screen,80,71,16)
        BlackHole(101,157,self.blackHoles,self.screen,80,71,16)
        BlackHole(234,157,self.blackHoles,self.screen,80,71,16)
        BlackHole(178,250,self.blackHoles,self.screen,80,71,16)
        hole = BlackHole(683,41,self.blackHoles,self.screen,80,71,16)
        hole = BlackHole(577,41,self.blackHoles,self.screen,80,71,16)
        hole = BlackHole(646,133,self.blackHoles,self.screen,80,71,16)
        hole = BlackHole(747,133,self.blackHoles,self.screen,80,71,16)
        self.asteroid = Asteroid(840,530,self.masslessObstacles,self.screen,55,4)
        self.asteroid.rotate(137)

        self.obstacles.add(self.blackHoles)
        self.obstacles.add(self.goal)
Esempio n. 23
0
def main():
	background, screen, clock = config()

	#================================
	#Criação de objetos
	musica = pygame.mixer.Sound("BGM/hark_the_sound.wav") #from https://alumni.unc.edu/article.aspx?sid=9630 Audio archive
	group = RenderUpdates()
	personagem = Heroi(20, 290,['nome','sobrenome','classe'],listImagens, group)
	npc = Npcs(650, 280, ['sprites/devilL.png'], group)
	npc2 = Npcs(675, 240, ["sprites/devilR.png"], group)
  	npc3 = Npcs(675, 340, ["sprites/devilL.png"], group)
	pygame.font.init()
	frase = Textos(40, 'Nyeh nyeh nyeh!!', 'fonts/carolingia.ttf')

	#===================================

	lx = [b for b in range(-15, 30)]
	l1 = [-30]
	l2 = [30]

	#parede esquerda
	parede = [x for x in range(-10, 16)]
	#colisaoParedeLateral = Eventos(parede, -2)


	#===================================
	iniciarConversa = [52,6,36,-20,55,-10]

	keys = {K_LEFT: False, K_RIGHT: False, K_UP: False, K_DOWN: False,
			  K_RETURN: False, 27: False}  # obs 27 = key 'esc'

	musica.play()
	background = background.convert()
	pygame.display.flip()
	while True:
		clock.tick(FPS)

		for e in pygame.event.get([KEYUP, KEYDOWN]):
			valor = (e.type == KEYDOWN)
			if e.key in keys.keys():
				keys[e.key] = valor

		if keys[27]:  # key ESC
			pygame.quit()
			sys.exit()
		if personagem.py in l1:  #player in the top
			MPD(keys,personagem)
			MPR(keys,personagem)
			MPL(keys,personagem)
		elif personagem.py in l2: #player in the bottom
			MPT(keys,personagem)
			MPR(keys,personagem)
			MPL(keys,personagem)
		else:
			MPU(keys,personagem)
			MPD(keys,personagem)
			MPL(keys,personagem)
			MPR(keys,personagem)

		if personagem.px == iniciarConversa[0] and personagem.py == iniciarConversa[1]:
			 import squirrel
			 squirrel.main()
		if personagem.px == iniciarConversa[2] and personagem.py == iniciarConversa[3]:
			 import flippy
			 flippy.main()
		if personagem.px == iniciarConversa[4] and personagem.py == iniciarConversa[5]:
			 import wormy
			 wormy.main()
		print(personagem.px, personagem.py)
		
		group.clear(screen, background)
		pygame.display.update(group.draw(screen))
Esempio n. 24
0
class Game:
    def __init__(self):
        self.screen = pg.display.get_surface()
        self.game_over = False
        self.background = pg.Surface((1440, 768))
        self.background.fill((0, 60, 77))

        self.ui_background_right = pg.Surface((R.UI_LEFTBAR, R.WINDOW_HEIGHT))
        self.ui_background_right.fill((0, 0, 0))

        self.ui_background_bottom = pg.Surface(
            (R.WINDOW_WIDTH, R.UI_BOTTOMBAR))
        self.ui_background_bottom.fill((0, 0, 0))

        self.ui_background = pg.Surface((R.WINDOW_WIDTH, R.WINDOW_HEIGHT))
        self.ui_background.fill((100, 200, 100))
        self.ui_background.set_colorkey((100, 200, 100))

        self.ui_background.blit(self.ui_background_bottom, (0, R.UI_DOWN))
        self.ui_background.blit(self.ui_background_right, (R.UI_LEFT, 0))

        self.camera = Camera(simple_camera_two, R.MAP_WINDOW_WIDTH,
                             R.MAP_WINDOW_HEIGHT)
        self.sprites = SortedUpdates()
        self.ui_overlay = RenderUpdates()

        self.galaxy = Galaxy()  # 1024,768,R.tile_size, group=self.sprites)
        print "finished generating"
        self.layer = self.galaxy.active_sector
        self.zoom = "sector"  # galaxy, sector, solar system, planet
        self.selected = None
        self.selector = None  # Sprite((-10, -10), R.TILE_CACHE["data/selection_anim.png"])

        # self.camera.state.topleft = (0,0)#self.camera.camera_func(self.camera, self.layer.dimensions).center

        # self.camera.state.center = self.layer.dimensions.center

        # #test sprites.
        thing3 = Sprite((200, 200),
                        R.TILE_CACHE["data/planet_1.png"],
                        scaling=2,
                        ticks=8,
                        depth=2)
        thing4 = Sprite((500, 350),
                        R.TILE_CACHE["data/planet_1.png"],
                        scaling=2,
                        ticks=8,
                        depth=2,
                        row=1)
        # thing = Sprite((100, 100), R.TILE_CACHE["data/planet_1.png"], scaling=3, ticks=4)
        # thing2 = ParallaxSprite((100, 100), R.TILE_CACHE["data/two.png"], sprite_pos=[1,0])
        # self.sprites.add( thing2, thing3, thing4)  # , self.world)
        # thing2 = ParallaxSprite((500, 500), R.TILE_CACHE["data/two.png"], sprite_pos=[1,0], offset=0.1)
        # self.sprites.add(thing2)
        # thing2 = ParallaxSprite((800, 200), R.TILE_CACHE["data/two.png"], sprite_pos=[1,0])
        # self.sprites.add(thing2)

        self.ship = Ship(group=self.sprites)

        self.sprites.add(self.ship)

        # control
        self.pressed_key = None
        self.mouse_pressed = False
        # self.cam_pos = Rect(0,0,R.MAP_WINDOW_WIDTH, R.MAP_WINDOW_HEIGHT)
        self.drag = False

    def render(self, pos, dt):
        dirties = []
        # if self.zoom == "galaxy":
        if self.zoom == "solar" or self.zoom == "sector":
            self.layer.sprites.clear(self.screen, self.background)
            if self.zoom == "sector":
                for points in self.layer.get_points_from_connections(pos):
                    gfxdraw.bezier(self.screen, points, 10, (255, 0, 0))
            # pos = self.camera.state.centerx - self.layer.dimensions.w /2, self.camera.state.centery - self.layer.dimensions.h /2
            self.layer.sprites.update(pos, dt)  # self.camera,
            dirties.append(self.layer.sprites.draw(self.screen))
        else:
            self.sprites.clear(self.screen, self.background)
            self.sprites.update(pos, dt)

        self.sprites.update(pos, dt)
        self.ui_overlay.update(pos, dt)
        return dirties

    def main(self):
        clock = pg.time.Clock()
        self.screen.blit(self.background, (0, 0))
        pg.display.flip()

        while not self.game_over:
            dt = 1 / float(clock.tick(30))

            # ##temp
            self.screen.blit(self.background, (0, 0))
            ####

            self.controls()

            # rect = Rect(self.layer.dimensions[0] + self.camera.state[0], self.layer.dimensions[1] + self.camera.state[1],
            #                     self.layer.dimensions[2], self.layer.dimensions[3])
            # pg.draw.rect(self.screen, (60,60,30,20), rect)

            pg.draw.rect(
                self.screen, (30, 30, 30, 50),
                Rect(self.camera.state.centerx, self.camera.state.centery, 48,
                     48))

            pos = self.camera.state.centerx - self.layer.dimensions.w / 2, self.camera.state.centery - self.layer.dimensions.h / 2
            dirties = self.render(pos, dt)

            # self.sprites.clear(self.screen, self.background)
            # self.sprites.update(self.camera, dt)

            # self.ui_overlay.clear(self.screen, self.background)
            # self.ui_overlay.update()
            #
            # for connection in self.galaxy.connections.values():
            #     points = self.galaxy.get_connections(connection, self.camera)
            #
            #     gfxdraw.bezier(self.screen, points, 10, (255,0,0))

            # dirties = self.sprites.draw(self.screen)
            dirties.append(self.ui_overlay.draw(self.screen))

            # pg.draw.lines(self.screen, (0, 0, 255), False, [(100, 100), (150, 200), (200, 100)], 4)
            # control_points = [Vec2d(100,100), Vec2d(150,500), Vec2d(450, 500), Vec2d(500,150)]
            # for x in range(0,len(control_points)-1,3):
            #     points = calculate_bezier(control_points[x:x+4])
            #     pg.draw.aalines(self.screen, (0, 0, 255), False, points )    #[(40, 100), (150, 566), (400, 100), (500, 300)]))

            # for sprite in self.sprites:
            #     points = (sprite.rect.topleft, sprite.rect.topright, sprite.rect.bottomright, sprite.rect.bottomleft)
            #     pg.draw.aalines(self.screen, (0, 0, 255), True, points)

            self.update_ui()

            pg.display.update()
            # pg.display.flip()

            self.handle_events(pos)

    def controls(self):
        # keys = pg.key.get_pressed()

        def pressed(key):
            return self.pressed_key == key  # or keys[key]

        def m_pressed(mouse):
            return self.mouse_pressed == mouse

        if pressed(pg.K_d):
            self.camera.state.topleft = (0, 0)
            self.pressed_key = None

        if pressed(pg.K_x):
            if hasattr(self.selected, "sprites"):
                self.switch_zoom(self.selected.zoom, self.selected)
            self.pressed_key = None

        if pressed(pg.K_z):
            if self.layer.parent is not None:
                self.switch_zoom(self.layer.parent.zoom, self.layer.parent)
            self.pressed_key = None

    def update_ui(self):
        if self.selected is not None and self.selector is None:

            if hasattr(self.selected, "sprite"):
                sprite = self.selected.sprite
            else:
                sprite = self.selected

            self.selector = Sprite(sprite.rect.center,
                                   R.TILE_CACHE["data/selection_anim.png"],
                                   depth=10)

            size = max(sprite.rect.w, sprite.rect.h)

            self.selector.scale_to(size, size)
            self.selector.x_y = (sprite.x_y[0], sprite.x_y[1])
            self.ui_overlay.add(self.selector)
        elif self.selected is None and self.selector is not None:
            self.selector.kill()
            self.selector = None

        self.screen.blit(self.ui_background, (0, 0))

    def mouse_clicked(self, (x, y), button, pos):
        # check if inside map first?
        # if button == 1:
        if 0 < x < R.UI_LEFT and 0 < y < R.UI_DOWN:
            if button == 1:
                if self.zoom == "galaxy":
                    self.selected = self.galaxy.check_mouse_pos((x, y), pos)
                elif self.zoom == "solar" or "sector":
                    self.selected = self.layer.check_mouse_pos((x, y), pos)
                else:
                    self.selected = None

                if self.selected is not None:
                    print "picked object: " + self.selected.name + "  ", self.selected.x_y, "\tmouse coords:", x, y, "\tcam_pos:", self.camera.state.center
                    if self.selector is not None:
                        # self.selected.rect.center = self.picked.sprite.rect.center
                        self.selector.x_y = (self.selected.x_y[0],
                                             self.selected.x_y[1])
                        # .center = (self.picked.sprite.x_y[0] + self.camera.state.topleft[0], self.picked.sprite.x_y[1] + self.camera.state.topleft[1])
                else:
                    for sprite in self.sprites.sprites():
                        if sprite.rect.collidepoint((x, y)):
                            self.selected = sprite
        else:
            # do menu click things here.
            pass
Esempio n. 25
0
    def pickColors(self, playerList):
        background = pygame.surface.Surface(RESOLUTION)

        # Create swatches
        SwatchesGroup = SpriteGroup()
        swatches = [Swatch((0, 0, 0)),
                    Swatch((127, 0, 0)),
                    Swatch((255, 0, 0)),
                    Swatch((0, 127, 0)),
                    Swatch((0, 255, 0)),
                    Swatch((0, 0, 127)),
                    Swatch((0, 0, 255)),                    
                    Swatch((127, 127, 0)),
                    Swatch((0, 127, 127)),
                    Swatch((127, 0, 127)),
                    Swatch((0, 255, 255)),
                    Swatch((255, 0, 255)),
                    Swatch((255, 255, 0)),
                    Swatch((255, 255, 255))
                    ]

        l = 0
        for swatch in swatches:
            swatch.setName = str(swatch.color[0]) + "/" + str(swatch.color[1])\
                             + "/" + str(swatch.color[2])
            swatch.rect=Rect(
                (l % COLUMNS) * 40 + 10,
                (l / COLUMNS) * 40 + 10,
                30, 30)
            SwatchesGroup.add(swatch)
            l += 1

        # Create text box to enter players' names
        inputRect = Rect((400, 75, 100, 30))
        theInput = TextInput(playerList[0].playerName, inputRect, 30)
        SwatchesGroup.add(theInput)

        if not self.default:
            # Create Bomberman pic
            BMRect = Rect((510, 190), (100, 100))
            BMSurf = pygame.surface.Surface((100, 100))
            BMPic = Widget(BMSurf, BMRect)
            SwatchesGroup.add(BMPic)

            # Create some text to prompt players to pick color
            text = TextBar("Choose color. ", (400, 20, 100, 30), 25)
            text2 = TextBar("Backspace and type Player Name. Press Enter. ",\
                            (400, 40, 100, 30), 25)
            SwatchesGroup.add(text)
            SwatchesGroup.add(text2)

            background = pygame.image.load('images/bgd_grass.jpg').convert()
            screen.blit(background, ((0, 0),RESOLUTION))
            theSelector = Select()
            cursor = SpriteGroup()
            theSelector.rect = Rect(10, 10, 30, 30)
            cursor.add(theSelector)

            SwatchesGroup.draw(screen)
            pygame.display.flip()

        # Use default colors
        if self.default:
            for player in playerList:
                newpath = "images/player" + str(player.name)
                try:
                    d.mkpath(newpath)
                    self.createStrips(player.color, player.name)
                except:
                    print "Could not create strips"
                    return

        # Else, let players select their colors
        else:
            for player in playerList:
                newpath = "images/player" + str(player.name)
                try:
                    d.mkpath(newpath)
                    self.createStrips(player.color, player.name)
                except:
                    print "Could not create strips"
                    return
                
                optionsChosen = False
                theInput.setText(player.playerName)
                while (not optionsChosen):
                    for event in pygame.event.get():
                        if event.type == QUIT:
                            sys.exit()
                        if event.type == KEYDOWN:
                            if event.key == K_ESCAPE:
                                sys.exit()
                            elif event.key == K_RIGHT:
                                theSelector.setX(40)
                            elif event.key == K_LEFT:
                                theSelector.setX(-40)
                            elif event.key == K_UP:
                                theSelector.setY(-40)
                            elif event.key == K_DOWN:
                                theSelector.setY(40)
                            elif event.key == K_BACKSPACE:
                                theInput.deleteChar()
                            elif (event.key >= K_0 and event.key <= K_z)\
                                  or event.key == K_SPACE:
                                theInput.appendChar(event.key)
                            elif event.key == K_RETURN: #return key
                                d.mkpath(newpath)
                                self.createStrips(\
                                    swatches[theSelector.index].color, \
                                    player.name)
                                player.playerName = theInput.getText()
                                player.setColor(\
                                    swatches[theSelector.index].color)
                                optionsChosen = True

                    self.switchColor(BMPic, swatches, theSelector.index)
                    SwatchesGroup.clear(screen, background)
                    cursor.clear(screen, background)
                    cursor.update()
                    SwatchesGroup.update()
                    dirty = SwatchesGroup.draw(screen) + cursor.draw(screen)
                    pygame.display.update(dirty)
Esempio n. 26
0
def main():
    """this function is called when the program starts.
	   it initializes everything it needs, then runs in
	   a loop until the function returns."""
    #Initialize Everything
    global screen
    screen = None
    pygame.init()
    screen = pygame.display.set_mode(RESOLUTION)
    pygame.display.set_caption('Example Poutine Window')

    #Create The Backgound
    bg = pygame.Surface(RESOLUTION)
    bg.fill(BGCOLOR)

    #Display The Background
    screen.blit(bg, (0, 0))
    pygame.display.flip()

    #Prepare Game Objects
    clock = pygame.time.Clock()

    label = LabelSprite('foo')
    label.rect.move_ip(100, 100)

    #this will be the callback function of the button
    def buttonWasClicked():
        print "button clicked"

    button = ButtonSprite('bar', None, buttonWasClicked)
    button.rect.move_ip(100, 300)

    tEntry = TextEntrySprite('textentry')
    tEntry.rect.move_ip(100, 400)

    allWidgets = RenderUpdates()
    allWidgets.add(label)
    allWidgets.add(button)
    allWidgets.add(tEntry)

    #Main Loop
    while 1:
        timeChange = clock.tick(40)

        #Handle Input Events
        oldEvents = []
        remainingEvents = pygame.event.get()
        for event in remainingEvents:
            oldEvents.append(remainingEvents.pop(0))
            if event.type == QUIT:
                return
            elif event.type == KEYDOWN and event.key == K_ESCAPE:
                return

            elif event.type == KEYDOWN:
                key = event.unicode.encode("ascii")
                if key and key in string.printable:
                    for s in allWidgets.sprites():
                        if hasattr(s, "OnKeyPressed"):
                            s.OnKeyPressed(key)
                else:
                    key = event.key
                    for s in allWidgets.sprites():
                        if hasattr(s, "OnMetaPressed"):
                            s.OnMetaPressed(key)
            elif event.type == MOUSEMOTION:
                for sprite in allWidgets.sprites():
                    if hasattr(sprite, "OnMouseMove"):
                        sprite.OnMouseMove(event.pos)
            elif event.type == MOUSEBUTTONDOWN:
                for sprite in allWidgets.sprites():
                    if hasattr(sprite, "OnMouseClick"):
                        sprite.OnMouseClick(event.pos)

    #Draw Everything
        allWidgets.clear(screen, bg)
        allWidgets.update()
        changedRects = allWidgets.draw(screen)
        pygame.display.update(changedRects)

#Game Over
    pygame.quit()
Esempio n. 27
0
class UIPanel:
	def __init__( self, bgImage, boundRect):
		self.isDone = 0
		self.isDirty = 1
		self.bgImage = bgImage
		self.boundRect = boundRect
		#print self.boundRect

		self.needsReBlit = True
		self.UIGroup = RenderUpdates()

		self.infoObj = None

		yPad = 4

		#labels
		self.todLabel = LabelSprite( "00:00" )
		self.todLabel.rect.midbottom = self.boundRect.midbottom
		self.todLabel.rect.move_ip( -160, -90 )
		self.UIGroup.add( self.todLabel )

		self.infoLabel = LabelSprite( " - " )
		self.infoLabel.rect.x = self.todLabel.rect.x
		self.infoLabel.rect.y = self.todLabel.rect.y + ascent + yPad
		self.UIGroup.add( self.infoLabel )

		self.fpsLabel = LabelSprite( "FPS: 0" )
		self.fpsLabel.rect.x = self.infoLabel.rect.x
		self.fpsLabel.rect.y = self.infoLabel.rect.y + ascent + yPad
		self.UIGroup.add( self.fpsLabel )


		#buttons
		self.pauseButton = ToggleButtonSprite( "pause" )
		self.pauseButton.onClickCallback = self.Pause
		self.pauseButton.rect.topleft = self.boundRect.topleft
		self.pauseButton.rect.move_ip( 0, 10 )
		self.UIGroup.add( self.pauseButton )

		self.rTogButton = ToggleButtonSprite( "red" )
		self.rTogButton.onClickCallback = self.ShowRed
		self.rTogButton.rect.x = self.boundRect.x
		self.rTogButton.rect.y = self.pauseButton.rect.bottom + yPad
		self.UIGroup.add( self.rTogButton )

		self.gTogButton = ToggleButtonSprite( "green" )
		self.gTogButton.onClickCallback = self.ShowGreen
		self.gTogButton.rect.x = self.boundRect.x
		self.gTogButton.rect.y = self.rTogButton.rect.bottom + yPad
		self.UIGroup.add( self.gTogButton )

		self.servButton = ToggleButtonSprite( "server" )
		self.servButton.onClickCallback = self.ShowServer
		self.servButton.rect.x = self.boundRect.x
		self.servButton.rect.y = self.gTogButton.rect.bottom + yPad
		self.UIGroup.add( self.servButton )


		self.device = DeviceSprite()
		self.device.rect.bottomright = self.boundRect.bottomright
		self.device.rect.move_ip( -170, -80 )
		self.UIGroup.add( self.device )

		events.AddListener( self )
		events.AddEvent( "Pause" )
		events.AddEvent( "ShowRed" )
		events.AddEvent( "ShowGreen" )
		events.AddEvent( "ShowServer" )


	#---------------------------------------------------------------------
	def On_FPSChange( self, newfps ):
		self.isDirty = 1
		self.fpsLabel.SetText( "FPS: "+ str(newfps) )

	#---------------------------------------------------------------------
	def On_MouseClick( self, pos ):
		self.isDirty = 1
		self.device.OnMouseClick( pos )
		self.pauseButton.OnMouseClick( pos )
		self.gTogButton.OnMouseClick( pos )
		self.rTogButton.OnMouseClick( pos )
		self.servButton.OnMouseClick( pos )

	#---------------------------------------------------------------------
	def On_MouseMove( self, event ):
		self.isDirty = 1
		self.pauseButton.OnMouseMove( event.pos )
		self.rTogButton.OnMouseMove( event.pos )
		self.gTogButton.OnMouseMove( event.pos )
		self.servButton.OnMouseMove( event.pos )

		if self.infoLabel.rect.collidepoint( event.pos ):
			self.isDirty = 1
			self.infoObj = PopCounter()
			self.infoLabel.SetText( "Population: " + \
			                  str(len(allobjects.allVisitors)) )

	#---------------------------------------------------------------------
	def On_SelectVisitor( self, visitor ):
		self.isDirty = 1
		self.infoObj = visitor
		self.device.SetVisitor( visitor )

	#---------------------------------------------------------------------
	def On_HighlightRide( self, ride ):
		self.isDirty = 1
		self.infoObj = ride

	#---------------------------------------------------------------------
	def On_UnHighlightRide( self ):
		self.isDirty = 1

	#---------------------------------------------------------------------
	def On_HighlightLineup( self, lineup ):
		self.isDirty = 1
		self.infoObj = lineup

	#---------------------------------------------------------------------
	def On_UnHighlightLineup( self ):
		return

	#---------------------------------------------------------------------
	def Click( self, pos ):
		pass
	#---------------------------------------------------------------------
	def MouseOver( self, event ):
		pass

	#---------------------------------------------------------------------
	def Pause( self ):
		events.Fire( "Pause" )

	#---------------------------------------------------------------------
	def ShowRed( self ):
		events.Fire( "ShowRed" )

	#---------------------------------------------------------------------
	def ShowGreen( self ):
		events.Fire( "ShowGreen" )

	#---------------------------------------------------------------------
	def ShowServer( self ):
		events.Fire( "ShowServer" )
		
	#---------------------------------------------------------------------
	def UpdateTimeOfDay( self ):
		self.todLabel.SetText( formatTime( allobjects.timeOfDay ) )
		
	#---------------------------------------------------------------------
	def BGWipe( self, screen, clearArea ):
		srcArea = Rect( clearArea )
		srcArea.move_ip( (-self.boundRect.x, -self.boundRect.y) )
		screen.blit( self.bgImage, clearArea, srcArea )
	#---------------------------------------------------------------------
	def DoGraphics( self, screen, display, timeChange ):
		if self.needsReBlit:
			print 'blitting on screen', self.bgImage, self.boundRect
			screen.blit( self.bgImage, self.boundRect )
			display.flip()
			self.needsReBlit = False

		if self.infoObj:
			self.infoLabel.SetText( self.infoObj.GetInfo() )

		self.UpdateTimeOfDay()

		if not self.isDirty:
			return

		allobjects.server.Tick()

		self.UIGroup.clear(screen, self.BGWipe)

		self.UIGroup.update()

		changedRects =  self.UIGroup.draw(screen)
		display.update( changedRects )
		self.isDirty = 0
Esempio n. 28
0
class Game(StatusHandler):

    def __init__(self, title='Checkers', log_drag=False, show_fps=False, ip='127.0.0.1', port=5000, spectate=False):
        self.game_running = True
        self.player = None
        self.log_drag = log_drag
        self.show_fps = show_fps
        self.window_title = title
        self.game = NetBoard(handler=self, ip=ip, port=port, spectate=spectate)
        # Initialize Game Groups
        self.board_spaces = set()
        self.pieces = RenderUpdates()
        self.piece_selected = GroupSingle()
        self.bg_text = RenderUpdates()
        self.fg_text = RenderUpdates()
        self.current_piece_position = ORIGIN
        self.screen = None
        self.fps_clock = None
        self.font = None
        self.background = None
        self.background_rect = None
        self.fps_text = None
        self.winner_text = None
        self.turn_text = None
        self.player_text = None
        self.game_id_text = None

    def handle_game_id(self, game_id):
        self.game_id_text.text = "Game: %s" % game_id

    def handle_list(self, game_list, list_type):

        if list_type == SPECTATE and game_list:
            game_id = game_list[0]
            self.game.client.spectate(game_id)
            self.player_text.text = 'You are a spectator'
        elif not list_type and game_list:
            game_id = game_list[0]
            self.game.client.join(game_id)
        elif not list_type and not game_list:
            self.game.client.new_game()

    def handle_board(self, board):
        for piece in board:
            new_piece = PieceSprite(piece.player)
            new_piece.king = piece.king
            self.game.add_piece(new_piece, piece.location)
            new_piece.update_from_board()
            self.pieces.add(new_piece)

    def handle_turn(self, player):
        self.game.turn = player

    def handle_you_are(self, player):
        self.player = player

    def handle_moved(self, src, dst):
        moved_pieces = [p for p in self.pieces if p.location == src]
        Board.move(self.game, src, dst)
        if moved_pieces:
            moved_pieces[0].update_from_board()
            Sounds.play('slap.ogg')
            log.debug("board after drop:\n%s", str(self.game))

    def handle_captured(self, loc):
        captured_pieces = [p for p in self.pieces if p.location == loc]
        if captured_pieces:
            self.pieces.remove(captured_pieces[0])

    def _board_space_setup(self):
        """ initialize board state """
        for col, row in self.game.usable_positions():
            self.board_spaces.add(Square(row, col))

    def _screen_init(self):
        """ Initialise screen """
        self.screen = pygame.display.set_mode(SCREEN_RES)
        pygame.display.set_caption(self.window_title)
        return self.screen

    def _get_background(self):
        result = pygame.Surface(self.screen.get_size())
        (bg_img, bg_rect) = Images.load('marble-board.jpg')
        result.blit(bg_img, bg_rect)
        return result.convert(), bg_rect

    def _clear_items(self):
        self.fg_text.clear(self.screen, self.background)
        self.piece_selected.clear(self.screen, self.background)
        self.pieces.clear(self.screen, self.background)
        self.bg_text.clear(self.screen, self.background)

    def _quit(self):
        log.debug('quitting')
        self.game.client.quit()
        self.game_running = False

    def _select_piece(self, event):
        # select the piece by seeing if the piece collides with cursor
        self.piece_selected.add(piece for piece in self.pieces
                                if piece.rect.collidepoint(event.pos)
                                and piece.player == self.player
                                and piece.player == self.game.turn)
        # Capture piece's original position (at center) to determine move on drop
        if len(self.piece_selected) > 0:
            # Assumed: starting a move
            pygame.event.set_grab(True)
            self.pieces.remove(self.piece_selected)
            self.current_piece_position = (self.piece_selected.sprite.rect.centerx,
                                           self.piece_selected.sprite.rect.centery)
            log.debug('grabbing input, picked up piece at %s', self.current_piece_position)
            Sounds.play('slide.ogg')

    def _drag_piece(self):
        #  Until button is let go, move the piece with the mouse position
        if self.log_drag:
            log.debug('dragging')
        rect = self.piece_selected.sprite.rect
        rect.centerx, rect.centery = pygame.mouse.get_pos()
        if self.log_drag:
            log.debug('updated piece to %s', pygame.mouse.get_pos())

    def _reset_selected_piece(self):
        self.piece_selected.sprite.update_from_board()
        Sounds.play('slap.ogg')
        log.debug("board after drop:\n%s", str(self.game))

    def _drop_piece(self, event):
        if pygame.event.get_grab():
            pygame.event.set_grab(False)
            log.debug('releasing input')

            # center the piece on the valid space; if it is not touching a space, return it to its original position
            space_selected = [space for space in self.board_spaces if space.collidepoint(event.pos)]

            if self.piece_selected and space_selected:
                log.debug('dropped a piece')
                piece, space = self.piece_selected.sprite, space_selected[0]
                try:
                    self.game.move(piece.location, (space.col, space.row))
                except InvalidMoveException as ce:
                    log.debug(ce)
                    self._reset_selected_piece()
            else:
                log.debug('dropped on unplayable game space')
                self._reset_selected_piece()

            # Add piece back to stationary set
            self.pieces.add(self.piece_selected)

            # clean up for the next selected piece
            self.piece_selected.empty()

    def _draw_items(self):
        self.bg_text.draw(self.screen)
        self.pieces.draw(self.screen)
        self.piece_selected.draw(self.screen)
        self.fg_text.draw(self.screen)

    def _update(self):
        self.game.update()

        self.fps_text.text = "%4.1f fps" % self.fps_clock.get_fps()

        if self.player:
            self.player_text.text = "Your pieces are %s" % self.player

        if self.game.turn not in players:
            self.turn_text.text = "Waiting for player"
        else:
            if self.player == self.game.turn:
                self.turn_text.text = "Your turn"
            else:
                self.turn_text.text = "%s's turn" % self.game.turn.title()

        if self.game.winner():
            self.turn_text.text = ''
            self.winner_text.text = "%s wins!" % self.game.winner().title()
        else:
            self.winner_text.text = ''

        if not self.piece_selected and self.player == self.game.turn:
            highlight_player = self.game.turn
        else:
            highlight_player = None
        self.pieces.update(highlight_player)
        self.piece_selected.update(self.game.turn)
        self.bg_text.update()
        self.fg_text.update()

    def run(self):

        log.debug('pre-initializing sound')
        mixer.pre_init(buffer=32)

        log.debug('starting game')
        pygame.init()

        log.debug('initializing screen')
        self.screen = self._screen_init()

        log.debug('getting font')
        self.font = pygame.font.Font(None, 36)

        log.debug('loading background')
        self.background, self.background_rect = self._get_background()

        log.debug('setting up drop locations')
        self._board_space_setup()

        log.debug('building text')
        bg_rect = self.background_rect

        class FPSText(Text):
            def update(self, *args):
                Text.update(self, *args)
                self.rect.right, self.rect.bottom = bg_rect.right, bg_rect.bottom

        self.fps_text = FPSText('', self.font, WHITE)
        if self.show_fps:
            self.fg_text.add(self.fps_text)

        class TurnText(Text):
            def update(self, *args):
                Text.update(self, *args)
                self.rect.centerx, self.rect.centery = bg_rect.centerx, bg_rect.centery

        self.turn_text = TurnText('', self.font, WHITE)
        self.bg_text.add(self.turn_text)

        class WinnerText(Text):
            def update(self, *args):
                Text.update(self, *args)
                self.rect.centerx, self.rect.centery = bg_rect.centerx, bg_rect.centery

        self.winner_text = WinnerText('', self.font, WHITE)
        self.fg_text.add(self.winner_text)

        class PlayerText(Text):
            def update(self, *args):
                Text.update(self, *args)
                self.rect.centerx, self.rect.bottom = bg_rect.centerx, bg_rect.bottom

        self.player_text = PlayerText('', pygame.font.Font(None, 24), WHITE)
        self.bg_text.add(self.player_text)

        class GameIdText(Text):
            def update(self, *args):
                Text.update(self, *args)
                self.rect.centerx, self.rect.top = bg_rect.centerx, bg_rect.top + (0.25 * self.font.get_height())

        self.game_id_text = GameIdText('', pygame.font.Font(None, 20), WHITE)
        self.bg_text.add(self.game_id_text)

        log.debug('drawing initial content to screen')
        self.screen.blit(self.background, ORIGIN)
        pygame.display.flip()

        self.piece_selected = GroupSingle()
        self.current_piece_position = ORIGIN

        self.fps_clock = Clock()

        # Event loop
        while self.game_running:

            self._clear_items()

            for event in pygame.event.get():

                if event.type == QUIT:
                    self._quit()

                if event.type == MOUSEBUTTONDOWN:     # select a piece
                    log.debug('mouse pressed')
                    self._select_piece(event)

                if event.type == MOUSEBUTTONUP:     # let go of a piece
                    log.debug('mouse released')
                    self._drop_piece(event)

                if pygame.event.get_grab():          # drag selected piece around
                    self._drag_piece()

            self._update()

            self._draw_items()

            self.fps_clock.tick(60)  # Waits to maintain 60 fps

            # TODO: Use display.update instead
            pygame.display.flip()

        log.debug('finishing game loop')
Esempio n. 29
-1
def startGame():
    background = pygame.surface.Surface(RESOLUTION)
    background = pygame.image.load(BACKGROUND).convert()
    screen.blit(background, ((0, 0),RESOLUTION))

    # Create title from image
    titleSize = ((int(RESOLUTION[0] * .75)), (int(RESOLUTION[0] * .3)))
    titleRect = Rect((0, 0), titleSize)
    titleRect.midtop = (screen.get_rect().centerx, 20)
    titleSurf = pygame.surface.Surface(titleSize)
    title = Widget(titleSurf, titleRect)
    tempImage = pygame.image.load('images/title.png').convert()
    tempImage = pygame.transform.scale(tempImage, titleSize)
    tempImage.set_colorkey(PUCE, RLEACCEL)
    title.image = tempImage

    # Create animated bomb on screen
    bombRect = Rect((0, 0), (200, 200))
    bombRect.centerx = screen.get_rect().centerx
    bombRect.centery = screen.get_rect().centery
    bombSurf = pygame.surface.Surface((200, 200))
    bomb = Widget(bombSurf, bombRect)
    tempImage = pygame.image.load('images/bomb/bomb_strip_title.png').convert()
    bombFrames = createFrames(tempImage)
    bomb.image = bombFrames[0]

    # Create 'Press any Key' message from image
    pressKeySize = ((int(RESOLUTION[0] * .75)), (int(RESOLUTION[0] * .15)))
    pressKeySurf = pygame.surface.Surface(pressKeySize)
    pressKeyRect = Rect((0, 0), pressKeySize)
    pressKeyRect.midbottom = screen.get_rect().midbottom
    pressKey = Widget(pressKeySurf, pressKeyRect)
    tempImage = pygame.image.load('images/press_key.png').convert()
    tempImage = pygame.transform.scale(tempImage, pressKeySize)
    tempImage.set_colorkey(PUCE, RLEACCEL)
    pressKey.image = tempImage

    myGroup = SpriteGroup()
    myGroup.add(title)
    myGroup.add(bomb)
    myGroup.add(pressKey)

    pygame.display.flip()

    i = 0
    MaxFR = 15
    lastUpdate = t.time()
    frameTime = 1.0 / float(MaxFR)
    while 1:
        pygame.event.pump()
        for event in pygame.event.get():
            if event.type == KEYDOWN or event.type == JOYBUTTONDOWN:
                return
            if event.type == QUIT:
                s.exit()

        bomb.image = bombFrames[i]
        myGroup.clear(screen, background)
        myGroup.update()
        dirty = myGroup.draw(screen)
        pygame.display.update(dirty)
        if t.time() > lastUpdate + frameTime:
            i = (i+1) % 4
            lastUpdate = t.time()