Exemplo n.º 1
0
class BingBall(Frame):

    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent

        self.W = self.parent.winfo_screenwidth() - bbc.MIN_W
        self.H = self.parent.winfo_screenheight() - bbc.MIN_H
        if self.W < bbc.MIN_W:
            self.W = bbc.MIN_W
        if self.H < bbc.MIN_H:
            self.H = bbc.MIN_H

        self.board = Board(self)
        self.ball = Ball(self.board)
        self.barTop = Bar(self.board, bbc.BAR_T)
        self.barBottom = Bar(self.board, bbc.BAR_B)

        self.initialize()

    def initialize(self):
        self.reset_score()
        self.parent.title("BingBall Game")
        self.parent.config(bg="#324b21")

        self.pack(side=RIGHT, padx=5, pady=5)

    def reset_score(self):
        bbc.BAR_SCORE_G = 0
        bbc.BAR_SCORE_R = 0

    def direct_bar_auto(self):
        if bbc.IS_AUTO is False:
            return 1
        fx, fy, lx, ly = self.ball.get_current_coords()
        if fy + self.H*bbc.SPEED[1] <= 0:
            self.barTop.do_moving(10 + fx + 2*bbc.SPEED[0])
        if ly + self.H*bbc.SPEED[1] >= self.H:
            self.barBottom.do_moving(lx + 2*bbc.SPEED[0] - 10)
        self.after(5, self.direct_bar_auto)

    def bar_top_event_left(self, event):
        self.barTop.to_move(bbc.DIRECT_TO_LEFT)

    def bar_top_event_right(self, event):
        self.barTop.to_move(bbc.DIRECT_TO_RIGHT)

    def bar_bottom_event_left(self, event):
        self.barBottom.to_move(bbc.DIRECT_TO_LEFT)

    def bar_bottom_event_right(self, event):
        self.barBottom.to_move(bbc.DIRECT_TO_RIGHT)

    def bar_top_event(self, event):
        self.barTop.do_moving(event.x)

    def play_event(self, event):
        if bbc.IS_PLAYING is True:
            bbc.IS_PLAYING = False
        else:
            bbc.IS_PLAYING = True
            self.play()

    def play(self):
        self.direct_bar_auto()
        self.ball.do_moving()

    def auto_play_event(self, event):
        if bbc.IS_PLAYING is False:
            if bbc.IS_AUTO is False:
                self.reset_score()
            bbc.IS_AUTO = True
            self.reset_event_switch()

    def manual_play_event(self, event):
        if bbc.IS_PLAYING is False:
            if bbc.IS_AUTO is True:
                self.reset_score()
            bbc.IS_AUTO = False
            self.reset_event_switch()

    def up_delay_event(self, event):
        if bbc.DELAY < MAX_DELAY:
            bbc.DELAY += 1

    def down_delay_event(self, event):
        if bbc.DELAY > MIN_DELAY:
            bbc.DELAY -= 1

    def main(self):
        self.parent.bind("<space>", self.play_event)
        self.parent.bind("<F1>", self.auto_play_event)
        self.parent.bind("<F2>", self.manual_play_event)
        self.parent.bind("<Up>", self.down_delay_event)
        self.parent.bind("<Down>", self.up_delay_event)
        self.reset_event_switch()
        self.play()

    def reset_event_switch(self):
        if bbc.IS_AUTO is True:
            self.parent.unbind("<Left>")
            self.parent.unbind("<Right>")
            self.parent.unbind("<a>")
            self.parent.unbind("<d>")
            self.board.unbind("<1>")
        else:
            self.parent.bind("<a>", self.bar_top_event_left)
            self.parent.bind("<d>", self.bar_top_event_right)
            self.parent.bind("<Left>", self.bar_bottom_event_left)
            self.parent.bind("<Right>", self.bar_bottom_event_right)
            self.board.bind("<1>", self.bar_top_event)