Beispiel #1
0
    def __init__(self, game, flag, bg):
        self.game = game

        back = Button('back', 20, 20, 100, 100)

        while self.game.status == flag:
            self.game.screen.blit(bg, ORIGIN)

            for event in pg.event.get():
                pos = pg.mouse.get_pos()

                if event.type == pg.QUIT:
                    print("You quit in the middle of the game!")
                    self.game.running = False
                    quit()

                # mouse click
                if event.type == pg.MOUSEBUTTONDOWN:
                    if back.isOver(pos):
                        self.game.status = INTRO

                # mouse hover
                if event.type == pg.MOUSEMOTION:
                    back.isOver(pos)

            self.game.screen.blit(back.image, (back.x, back.y))

            pg.display.flip()
Beispiel #2
0
    def __init__(self, surface, pageName):
        # | Call the superclass __init__() method
        Page.__init__(self, surface, pageName)

        # | btnOnePlayer
        # |---------------
        btnOneplayerXpos = 300
        btnOnePlayerYpos = 400
        btnOnePlayerDimensions = {"width": 250, "height": 100}
        btnOnePlayerColour = colours.btnPrimary
        btnOnePlayerHoverColour = colours.btnHover
        btnOnePlayerAction = "Difficulty"
        btnOnePlayerText = "One player"
        btnOnePlayerTextSize = 28
        btnOnePlayerTextColour = colours.btnText
        self.btnOnePlayer = Button(btnOneplayerXpos, btnOnePlayerYpos,
                                   btnOnePlayerDimensions, btnOnePlayerColour,
                                   btnOnePlayerHoverColour, btnOnePlayerAction,
                                   btnOnePlayerText, btnOnePlayerTextSize,
                                   btnOnePlayerTextColour)

        # | btnTwoPlayer
        # |---------------
        btnTwoPlayerXpos = 600
        btnTwoPlayerYpos = 400
        btnTwoPlayerDimensions = {"width": 250, "height": 100}
        btnTwoPlayerColour = colours.btnPrimary
        btnTwoPlayerHoverColour = colours.btnHover
        btnTwoPlayerAction = "TwoPlayerGame"
        btnTwoPlayerText = "Two player"
        btnTwoPlayerTextSize = 28
        btnTwoPlayerTextColour = colours.btnText
        self.btnTwoPlayer = Button(btnTwoPlayerXpos, btnTwoPlayerYpos,
                                   btnTwoPlayerDimensions, btnTwoPlayerColour,
                                   btnTwoPlayerHoverColour, btnTwoPlayerAction,
                                   btnTwoPlayerText, btnTwoPlayerTextSize,
                                   btnTwoPlayerTextColour)

        # | ttlPong
        # |----------
        ttlPongXpos = 450
        ttlPongYpos = 200
        self.ttlPong = Title(ttlPongXpos, ttlPongYpos, "Pong", 121)

        self.addToObjects([self.btnOnePlayer, self.btnTwoPlayer, self.ttlPong])
        self.addToButtons([self.btnOnePlayer, self.btnTwoPlayer])
Beispiel #3
0
    def __init__(self, surface, pageName):
        # | Call the superclass __init__() method
        Page.__init__(self, surface, pageName)

        self.backgroundSurface = self.createBackgroundSurface()

        # | btnResume
        # |------------
        btnResumeDimensions = {'width': 450, 'height': 100}
        btnResumeXpos = self.surface.get_width() / 2
        btnResumeYpos = 200
        btnResumeColour = colours.btnPrimary
        btnResumeHoverColour = colours.btnHover
        btnResumeAction = "Resume"
        btnResumeText = "Resume"
        btnResumeTextSize = 35
        btnResumeTextColour = colours.btnText
        self.btnResume = Button(btnResumeXpos, btnResumeYpos,
                                btnResumeDimensions, btnResumeColour,
                                btnResumeHoverColour, btnResumeAction,
                                btnResumeText, btnResumeTextSize,
                                btnResumeTextColour)

        # | btnQuit
        # |----------
        btnQuitDimensions = {'width': 450, 'height': 100}
        btnQuitXpos = self.surface.get_width() / 2
        btnQuitYpos = 350
        btnQuitColour = colours.btnPrimary
        btnQuitHoverColour = colours.btnHover
        btnQuitAction = "MainMenu"
        btnQuitText = "Quit"
        btnQuitTextSize = 35
        btnQuitTextColour = colours.btnText
        self.btnQuit = Button(btnQuitXpos, btnQuitYpos, btnQuitDimensions,
                              btnQuitColour, btnQuitHoverColour, btnQuitAction,
                              btnQuitText, btnQuitTextSize, btnQuitTextColour)

        self.addToObjects([self.btnResume, self.btnQuit])
        self.addToButtons([self.btnResume, self.btnQuit])
Beispiel #4
0
    def __init__(self, pos, size, has_button=False):
        """
		:param pos: (list or tuple) The position (X, Y) of the input.
		:param size: (list or tuple) The size (X, Y)  of the input.
		:param has_button: Creates a 'Submit' button next to it if True.
		"""

        super().__init__(pos, size)

        # ------------------------ INPUT'S TEXT ------------------------ #
        self.text_input = ""
        self.listening = False

        # Changing the basic position of the text.
        self.pos_text = (self.pos[0] + 15,
                         (self.size[1] - self.text_rect.h) // 2 + self.pos[1])
        self.render_text()

        # ------------------------ BACKGROUND COLORS ------------------------ #
        self.background_color = (240, 240, 240)
        self.hover_background_color = bases.LIGHT_GRAY
        self.press_background_color = bases.GRAY

        # ------------------------ INPUT'S BUTTON ------------------------ #
        if has_button:
            # Creating the button.
            pos_button = (pos[0] + size[0] + 10, pos[1])
            size_button = (100, size[1])
            self.button = Button(pos_button, size_button, "Submit")

            # Updating the button's text size.
            self.button.render_text(size=26)
            self.button.render_pressed_text(size=26)
            self.button.render_hovered_text(size=26)
        else:
            self.button = None
Beispiel #5
0
    def __init__(self, game):
        self.game = game

        start = Button('start', 400, 275, 300, 100)
        guide = Button('guide', 400, 400, 300, 100)
        about = Button('about', 400, 525, 300, 100)

        while self.game.status == INTRO:
            self.game.screen.blit(INTRO_BG, ORIGIN)

            for event in pg.event.get():
                pos = pg.mouse.get_pos()

                if event.type == pg.QUIT:
                    print("You quit in the middle of the game!")
                    self.game.running = False
                    quit()

                # mouse click
                if event.type == pg.MOUSEBUTTONDOWN:
                    if start.isOver(pos):
                        self.game.status = START
                    elif guide.isOver(pos):
                        self.game.status = GUIDE
                    elif about.isOver(pos):
                        self.game.status = ABOUT

                # mouse hover
                if event.type == pg.MOUSEMOTION:
                    start.isOver(pos)
                    guide.isOver(pos)
                    about.isOver(pos)

            self.game.screen.blit(start.image, (start.x, start.y))
            self.game.screen.blit(guide.image, (guide.x, guide.y))
            self.game.screen.blit(about.image, (about.x, about.y))

            pg.display.flip()
Beispiel #6
0
    for i, a in enumerate(animation):
        if np.sum(a) > 0:
            print(i)


#-----------------------------------------------------------------------------------------#
#-----------------------------------------BUTTONS-----------------------------------------#
#-----------------------------------------------------------------------------------------#


def func_cls_button():
    main_display.clear_frame()
    return


cls_button = Button((1270, 600), 0, func_cls_button, text="CLS", fit_text=True)
window.add_element(cls_button, "cls_button")


def func_cpy_button():
    main_display.load_frame(animation[current_frame])
    return


cpy_button = Button((1370, 600), 0, func_cpy_button, text="CPY", fit_text=True)
window.add_element(cpy_button, "cpy_button")


def func_del_button():
    global animation, current_frame, num_mini_displays, num_x, num_y, num_active_mini_displays, window, num_active_mini_displays, num_frames
    if num_frames == 1:
Beispiel #7
0
class TextInput(MotherObject.MotherObject):
    """A text input bar. Can be automaticaly linked to a button."""
    def __init__(self, pos, size, has_button=False):
        """
		:param pos: (list or tuple) The position (X, Y) of the input.
		:param size: (list or tuple) The size (X, Y)  of the input.
		:param has_button: Creates a 'Submit' button next to it if True.
		"""

        super().__init__(pos, size)

        # ------------------------ INPUT'S TEXT ------------------------ #
        self.text_input = ""
        self.listening = False

        # Changing the basic position of the text.
        self.pos_text = (self.pos[0] + 15,
                         (self.size[1] - self.text_rect.h) // 2 + self.pos[1])
        self.render_text()

        # ------------------------ BACKGROUND COLORS ------------------------ #
        self.background_color = (240, 240, 240)
        self.hover_background_color = bases.LIGHT_GRAY
        self.press_background_color = bases.GRAY

        # ------------------------ INPUT'S BUTTON ------------------------ #
        if has_button:
            # Creating the button.
            pos_button = (pos[0] + size[0] + 10, pos[1])
            size_button = (100, size[1])
            self.button = Button(pos_button, size_button, "Submit")

            # Updating the button's text size.
            self.button.render_text(size=26)
            self.button.render_pressed_text(size=26)
            self.button.render_hovered_text(size=26)
        else:
            self.button = None

    # ----------------------------------------- #
    # TEXT FUNCTIONS							#
    # ----------------------------------------- #

    # ----------------------------------------- #
    # DRAWING FUNCTIONS							#
    # ----------------------------------------- #
    def draw(self, surface):
        super().draw(surface)

        # Drawing the button if there is one.
        if self.button is not None:
            self.button.draw(surface)

        if self.text_input != "":
            self.render_text(self.text_input)

    def draw_basic(self, surface):
        """Draw the basic version of the input bar."""

        # Drawing the background of the input.
        pygame.draw.rect(surface, self.background_color, self.rect_data)

        # Drawing the border.
        if self.border_thickness > 0:
            pygame.draw.rect(surface, self.border_color, self.rect_data,
                             self.border_thickness)

        # Adding the text.
        if self.text_input != "":
            surface.blit(self.text, self.pos_text)
        # Drawing the cursor when listening the inputs.
        # Drawing the rect to hide the text at the left.

    def draw_hovered(self, surface):
        """Draw the hovered version of the input bar."""

        # Drawing the background of the input.
        pygame.draw.rect(surface, self.hover_background_color, self.rect_data)

        # Drawing the border.
        if self.border_thickness > 0:
            pygame.draw.rect(surface, self.hover_border_color, self.rect_data,
                             self.hover_border_thickness)

    def draw_pressed(self, surface):
        """This function will draw the input bar as writing mode."""

        # Drawing the background of the input.
        pygame.draw.rect(surface, self.press_background_color, self.rect_data)

        # Drawing the border.
        if self.border_thickness > 0:
            pygame.draw.rect(surface, self.press_border_color, self.rect_data,
                             self.press_border_thickness)

    # ----------------------------------------- #
    # EVENT FUNCTIONS							#
    # ----------------------------------------- #

    def is_hovered(self, event_pos):
        """Check if the input bar is hovered by the event.
		If True, self.hovered == True."""

        # Checking if the input bar is hovered.
        super().is_hovered(event_pos)

        # Checking if the input's button is hovered.
        if self.button is not None:
            self.button.is_hovered(event_pos)

    def is_pressed(self, *args):
        """Function called to check if the button is pressed and execute the function linked to this event if
		there is one."""

        super().is_pressed()

        # Checking if the input is listening the keyboard events.
        if self.pressed and not self.listening:
            self.listening = True
        else:
            self.listening = False

        # Checking if the button is pressed.
        if self.button is not None:
            self.button.is_pressed(args)

    def is_released(self, *args):
        """Function called to check if the button is released and execute the function linked to this event if
		there is one"""

        super().is_released()

        # Checking if the button is released.
        if self.button is not None:
            self.button.is_released(args)

    # ----------------------------------------- #
    # EVENT FUNCTIONS							#
    # ----------------------------------------- #
    def listen_inputs(self, event):
        """Listen the inputs from the keyboard. If self.pressed == True, then the inputs are added to the text in the
		input bar."""

        if self.listening:
            if event.key == pygame.K_RETURN:
                if self.button.on_press is not None:
                    self.button.on_press()
            elif event.key == pygame.K_ESCAPE:
                self.text_input = ""
            elif event.key == pygame.K_DELETE:
                self.text_input = self.text_input[:-1]
            elif event.unicode in string.printable:
                self.text_input += event.unicode

            print(self.text_input)
Beispiel #8
0
    def __init__(self, surface, pageName):
        Page.__init__(self, surface, pageName)

        # | btnEasy
        # |----------
        btnEasyXpos = 450
        btnEasyYpos = 200
        btnEasyDimensions = {'width': 400, 'height': 100}
        btnEasyColour = colours.btnPrimary
        btnEasyHoverColour = colours.btnHover
        btnEasyAction = "OnePlayerGameEasy"
        btnEasyText = "Easy"
        btnEasyTextSize = 30
        btnEasyTextColour = colours.btnText
        self.btnEasy = Button(btnEasyXpos, btnEasyYpos, btnEasyDimensions,
                              btnEasyColour, btnEasyHoverColour, btnEasyAction,
                              btnEasyText, btnEasyTextSize, btnEasyTextColour)

        # | btnMedium
        # |------------
        btnMediumXpos = 450
        btnMediumYpos = 320
        btnMediumDimensions = {'width': 400, 'height': 100}
        btnMediumColour = colours.btnPrimary
        btnMediumHoverColour = colours.btnHover
        btnMediumAction = "OnePlayerGameMedium"
        btnMediumText = "Medium"
        btnMediumTextSize = 30
        btnMediumTextColour = colours.btnText
        self.btnMedium = Button(btnMediumXpos, btnMediumYpos,
                                btnMediumDimensions, btnMediumColour,
                                btnMediumHoverColour, btnMediumAction,
                                btnMediumText, btnMediumTextSize,
                                btnMediumTextColour)

        # | btnHard
        # |------------
        btnHardXpos = 450
        btnHardYpos = 440
        btnHardDimensions = {'width': 400, 'height': 100}
        btnHardColour = colours.btnPrimary
        btnHardHoverColour = colours.btnHover
        btnHardAction = "OnePlayerGameHard"
        btnHardText = "Hard"
        btnHardTextSize = 30
        btnHardTextColour = colours.btnText
        self.btnHard = Button(btnHardXpos, btnHardYpos, btnHardDimensions,
                              btnHardColour, btnHardHoverColour, btnHardAction,
                              btnHardText, btnHardTextSize, btnHardTextColour)

        # | btnBack
        # |----------
        btnBackXpos = 35
        btnBackYpos = 20
        btnBackDimensions = {'width': 50, 'height': 20}
        btnBackColour = colours.btnPrimary
        btnBackHoverColour = colours.btnHover
        btnBackAction = "MainMenu"
        btnBackText = "Back"
        btnBackTextSize = 19
        btnBackTextColour = colours.btnText
        self.btnBack = Button(btnBackXpos, btnBackYpos, btnBackDimensions,
                              btnBackColour, btnBackHoverColour, btnBackAction,
                              btnBackText, btnBackTextSize, btnBackTextColour)

        self.addToObjects(
            [self.btnEasy, self.btnMedium, self.btnHard, self.btnBack])
        self.addToButtons(
            [self.btnEasy, self.btnMedium, self.btnHard, self.btnBack])
Beispiel #9
0
    def showWinMessage(self, player):
        self.ball.xVelocity = 0
        self.ball.yVelocity = 0
        side = ""

        congratulationsTitleXpos = 0
        if player == self.leftPlayer:
            congratulationsTitleXpos = 1 / 4 * (self.surface.get_width())
            btnXpos = 3 / 4 * (self.surface.get_width())
            side = "left"
        elif player == self.rightPlayer:
            congratulationsTitleXpos = 3 / 4 * (self.surface.get_width())
            btnXpos = 1 / 4 * (self.surface.get_width())
            side = "right"

        # | congratulationsTitle
        # |-----------------------
        congratulationsTitleLineOneYpos = Helpers.midpoint(
            0, self.surface.get_height()) - 70
        congratulationsTitleLineTwoYpos = Helpers.midpoint(
            0, self.surface.get_height()) - 30
        congratulationsTitleLineOneText = "The " + side
        congratulationsTitleLineTwoText = "player won!"
        congratulationsTitleSize = 55
        congratulationsTitleColour = colours.red
        congratulationsTitleLineOne = Title(congratulationsTitleXpos,
                                            congratulationsTitleLineOneYpos,
                                            congratulationsTitleLineOneText,
                                            congratulationsTitleSize,
                                            congratulationsTitleColour)
        congratulationsTitleLineTwo = Title(congratulationsTitleXpos,
                                            congratulationsTitleLineTwoYpos,
                                            congratulationsTitleLineTwoText,
                                            congratulationsTitleSize,
                                            congratulationsTitleColour)

        # | btnMainMenu
        # |--------------
        btnMainMenuYpos = Helpers.midpoint(0, self.surface.get_height()) - 70
        btnMainMenuDimensions = {'height': 75, 'width': 250}
        btnMainMenuColour = colours.btnPrimary
        btnMainMenuHoverColour = colours.btnHover
        btnMainMenuAction = "MainMenu"
        btnMainMenuText = "Main Menu"
        btnMainMenuTextSize = 35
        btnMainMenuTextColour = colours.btnText
        btnMainMenu = Button(btnXpos, btnMainMenuYpos, btnMainMenuDimensions,
                             btnMainMenuColour, btnMainMenuHoverColour,
                             btnMainMenuAction, btnMainMenuText,
                             btnMainMenuTextSize, btnMainMenuTextColour)

        # | btnPlayAgain
        # |---------------
        btnPlayAgainYpos = Helpers.midpoint(0, self.surface.get_height()) + 70
        btnPlayAgainDimensions = {'height': 75, 'width': 250}
        btnPlayAgainColour = colours.btnPrimary
        btnPlayAgainHoverColour = colours.btnHover
        btnPlayAgainAction = self.pageName
        btnPlayAgainText = "Play again"
        btnPlayAgainTextSize = 35
        btnPlayAgainTextColour = colours.btnText
        btnPlayAgain = Button(btnXpos, btnPlayAgainYpos,
                              btnPlayAgainDimensions, btnPlayAgainColour,
                              btnPlayAgainHoverColour, btnPlayAgainAction,
                              btnPlayAgainText, btnPlayAgainTextSize,
                              btnPlayAgainTextColour)

        self.addToObjects([
            congratulationsTitleLineOne, congratulationsTitleLineTwo,
            btnMainMenu, btnPlayAgain
        ])
        self.addToButtons([btnMainMenu, btnPlayAgain])
Beispiel #10
0
    def __init__(self, surface, pageName, playerAmount, AISpeed=-1):
        # | Call the superclass __init__() method
        Page.__init__(self, surface, pageName)

        self.bounceSound = pygame.mixer.Sound(
            os.path.join(currentPath, r"..\resources\ball hit paddle.wav"))
        self.AISpeed = AISpeed

        # | ball
        # |-------
        ballXpos = 450
        ballYpos = Helpers.midpoint(0, self.surface.get_height())
        ballColour = colours.white
        self.ball = Ball(ballXpos, ballYpos, ballColour)

        # | leftPaddle
        # |-------------
        leftPaddleXpos = 50
        leftPaddleYpos = Helpers.midpoint(0, self.surface.get_height())
        leftPaddleColour = colours.white
        leftPaddleWindowHeight = self.surface.get_height()
        self.leftPaddle = Paddle(leftPaddleXpos, leftPaddleYpos,
                                 leftPaddleWindowHeight, leftPaddleColour)

        # | rightPaddle
        # |--------------
        rightPaddleXpos = self.surface.get_width() - 50
        rightPaddleYpos = Helpers.midpoint(0, self.surface.get_height())
        rightPaddleColour = colours.white
        rightPaddleWindowHeight = self.surface.get_height()
        self.rightPaddle = Paddle(rightPaddleXpos, rightPaddleYpos,
                                  rightPaddleWindowHeight, rightPaddleColour)

        # | leftTitle
        # |------------
        leftTitleXpos = 20
        leftTitleYpos = 20
        leftTitleText = "0"
        leftTitleSize = 45
        leftTitleColour = colours.white
        self.leftTitle = Title(leftTitleXpos, leftTitleYpos, leftTitleText,
                               leftTitleSize, leftTitleColour)

        # | rightTitle
        # |-------------
        rightTitleXpos = self.surface.get_width() - 20
        rightTitleYpos = 20
        rightTitleText = "0"
        rightTitleSize = 45
        rightTitleColour = colours.white
        self.rightTitle = Title(rightTitleXpos, rightTitleYpos, rightTitleText,
                                rightTitleSize, rightTitleColour)

        # | leftPlayer
        # |-------------
        if playerAmount == 1:
            self.leftPlayer = ComputerPlayer(self.leftPaddle, self.leftTitle,
                                             self.ball)
            self.leftPlayer.paddle.setVelocity(self.AISpeed)
        elif playerAmount == 2:
            leftPlayerUpKey = pygame.K_a
            leftPlayerDownKey = pygame.K_z
            self.leftPlayer = HumanPlayer(self.leftPaddle, self.leftTitle,
                                          leftPlayerUpKey, leftPlayerDownKey)

        # | rightPlayer
        # |--------------
        rightPlayerUpKey = pygame.K_k
        rightPlayerDownKey = pygame.K_m
        self.rightPlayer = HumanPlayer(self.rightPaddle, self.rightTitle,
                                       rightPlayerUpKey, rightPlayerDownKey)

        # | verticalLine
        # |---------------
        verticalLineXpos = Helpers.midpoint(0, self.surface.get_width())
        verticalLineStartPoint = 0
        verticalLineEndPoint = self.surface.get_height()
        verticalLineSegmentLength = 20
        verticalLineInterval = 15
        verticalLineColour = colours.white
        self.verticalLine = VerticalLine(verticalLineXpos,
                                         verticalLineStartPoint,
                                         verticalLineEndPoint,
                                         verticalLineSegmentLength,
                                         verticalLineInterval,
                                         verticalLineColour)

        # | btnPause
        # |-------------
        btnPauseXpos = self.surface.get_width() / 2
        btnPauseYpos = 30
        btnPauseDimensions = {'width': 40, 'height': 40}
        btnPauseColour = colours.btnPrimary
        btnPauseHoverColour = colours.btnHover
        btnPauseAction = 'Pause'
        btnPauseText = '||'
        btnPauseTextSize = 30
        btnPauseTextColour = colours.btnText
        self.btnPause = Button(btnPauseXpos, btnPauseYpos, btnPauseDimensions,
                               btnPauseColour, btnPauseHoverColour,
                               btnPauseAction, btnPauseText, btnPauseTextSize,
                               btnPauseTextColour)

        # | Integer to keep track of the number of keys that are being pressed, to indicate
        # | whether or not the paddles need to be moves - helps to improve performance.
        self.keysPressed = 0

        # | The score needed to win
        self.winScore = 10

        # | Flag to indicate if the code needs to check if the ball is on the screen
        self.ballOnScreenNeedsToBeChecked = True

        # | The delay for the ball to be recentred in the screen after leaving (in seconds)
        self.ballCentreTimer = 0.5

        self.addToObjects([
            self.ball, self.leftPaddle, self.rightPaddle, self.leftTitle,
            self.rightTitle, self.verticalLine, self.btnPause
        ])
        self.addToButtons(self.btnPause)
Beispiel #11
0
    def __init__(self, game):
        self.g = game

        back = Button('back', 20, 20, 100, 100)
        ready = ReadyButton('ready', 400, 560, 300, 100)
        mario = CharButton('mario', 25, 210, 150, 350)
        luigi = CharButton('luigi', 210, 210, 150, 350)
        yoshi = CharButton('yoshi', 390, 210, 150, 350)
        popo = CharButton('popo', 575, 210, 150, 350)
        nana = CharButton('nana', 750, 210, 150, 350)
        link = CharButton('link', 920, 210, 150, 350)
        '''

        NOTE - screen is the current background

        name = input for player's name
        no_name = no player input for name
        character = character selection
        waiting = ready / unready screen

        '''

        screen = 'name'

        old_name = ''
        enteredName = False
        player_ready = False

        font = pg.font.Font(None, 100)

        self.start_name_bg = START_NAME_BG.convert()
        self.start_no_name_bg = START_NO_NAME_BG.convert()
        self.start_character_bg = START_CHARACTER_BG.convert()
        self.start_waiting_bg = START_WAITING_BG.convert()
        self.start_name_exists_bg = START_NAME_EXISTS_BG.convert()

        # note - self.g.curr_player = current text of the input player name

        while self.g.status == START:

            if screen == 'name' or screen == 'no_name':
                self.g.checkName(self.g.curr_player)

            if screen == 'name':
                self.g.screen.blit(self.start_name_bg, ORIGIN)
            elif screen == 'no_name':
                self.g.screen.blit(self.start_no_name_bg, ORIGIN)
            elif screen == 'character':
                self.g.screen.blit(self.start_character_bg, ORIGIN)
                self.drawStats()
            elif screen == 'waiting':
                self.g.screen.blit(self.start_waiting_bg, ORIGIN)
                text_surface = font.render(str(self.g.player_count), True,
                                           WHITE)
                self.g.screen.blit(text_surface, (700, 450))

            if screen == 'name' or screen == 'no_name':
                if not self.g.name_available:
                    # allow changing the name to player's own name
                    # even though technically - that name is taken
                    if self.g.curr_player != old_name:
                        self.g.screen.blit(self.start_name_exists_bg, ORIGIN)

                text_surface = font.render(self.g.curr_player, True, WHITE)
                self.g.screen.blit(text_surface, (355, 355))

            for event in pg.event.get():
                pos = pg.mouse.get_pos()

                if event.type == pg.QUIT:
                    print("You quit in the middle of the game!")
                    if enteredName:
                        self.g.disconnectPlayer(self.g.curr_player,
                                                self.g.restart_request)
                    self.g.running = False
                    self.g.s.close()
                    quit()

                # mouse click
                if event.type == pg.MOUSEBUTTONDOWN:
                    if back.isOver(pos) and not player_ready:
                        if screen == 'name':
                            self.g.status = INTRO
                            if enteredName:
                                self.g.disconnectPlayer(
                                    self.g.curr_player, self.g.restart_request)
                        elif screen == 'no_name':
                            self.g.status = INTRO
                            if enteredName:
                                self.g.disconnectPlayer(
                                    self.g.curr_player, self.g.restart_request)
                        elif screen == 'character':
                            screen = 'name'
                        elif screen == 'waiting':
                            screen = 'character'

                    if screen == 'character':
                        if mario.isOver(pos, 'mario'):
                            self.g.editPlayerCharacter(self.g.curr_player,
                                                       MARIO)
                            screen = 'waiting'
                        elif luigi.isOver(pos, 'luigi'):
                            self.g.editPlayerCharacter(self.g.curr_player,
                                                       LUIGI)
                            screen = 'waiting'
                        elif yoshi.isOver(pos, 'yoshi'):
                            self.g.editPlayerCharacter(self.g.curr_player,
                                                       YOSHI)
                            screen = 'waiting'
                        elif popo.isOver(pos, 'popo'):
                            self.g.editPlayerCharacter(self.g.curr_player,
                                                       POPO)
                            screen = 'waiting'
                        elif nana.isOver(pos, 'nana'):
                            self.g.editPlayerCharacter(self.g.curr_player,
                                                       NANA)
                            screen = 'waiting'
                        elif link.isOver(pos, 'link'):
                            self.g.editPlayerCharacter(self.g.curr_player,
                                                       LINK)
                            screen = 'waiting'

                    if screen == 'waiting':
                        if not player_ready:
                            if ready.isOver(pos):
                                self.g.editPlayerStatus(
                                    self.g.curr_player, 'ready')
                                player_ready = True
                                ready.click()

                # mouse hover
                if event.type == pg.MOUSEMOTION:
                    back.isOver(pos)
                    if screen == 'character':
                        mario.isOver(pos, 'mario')
                        luigi.isOver(pos, 'luigi')
                        yoshi.isOver(pos, 'yoshi')
                        popo.isOver(pos, 'popo')
                        nana.isOver(pos, 'nana')
                        link.isOver(pos, 'link')
                    if screen == 'waiting':
                        if not player_ready:
                            ready.isOver(pos)

                if event.type == pg.KEYDOWN:
                    if screen == 'name' or screen == 'no_name' or screen == 'waiting':
                        if event.key == pg.K_RETURN:
                            if screen != 'waiting':
                                if len(self.g.curr_player) == 0:
                                    screen = 'no_name'
                                    print(
                                        "INVALID NAME! Your name cannot be blank!"
                                    )
                                else:
                                    if self.g.name_available or self.g.curr_player == old_name:
                                        screen = 'character'
                                        if not enteredName:
                                            # if not entered yet - connect once
                                            enteredName = True
                                            old_name = self.g.curr_player
                                            self.g.connectPlayer(
                                                self.g.curr_player)
                                        elif enteredName:
                                            # if entered once - just change name
                                            self.g.editPlayerName(
                                                old_name, self.g.curr_player)
                                            old_name = self.g.curr_player
                                    elif not self.g.name_available:
                                        print(
                                            "NAME EXISTS! Enter a unique one!")

                            else:
                                if player_ready:
                                    self.g.startGame()

                        else:
                            # limit character length for the screen
                            if len(self.g.curr_player) < 10:
                                char = event.unicode
                                self.g.curr_player += char

            if screen == 'name' or screen == 'no_name':
                keys = pg.key.get_pressed()
                if keys[pg.K_BACKSPACE]:
                    self.g.curr_player = self.g.curr_player[:-1]

            if screen == 'character':
                self.g.screen.blit(mario.image, (mario.x, mario.y))
                self.g.screen.blit(luigi.image, (luigi.x, luigi.y))
                self.g.screen.blit(yoshi.image, (yoshi.x, yoshi.y))
                self.g.screen.blit(popo.image, (popo.x, popo.y))
                self.g.screen.blit(nana.image, (nana.x, nana.y))
                self.g.screen.blit(link.image, (link.x, link.y))

            elif screen == 'waiting':
                self.g.screen.blit(ready.image, (ready.x, ready.y))

            if not player_ready:
                self.g.screen.blit(back.image, (back.x, back.y))

            pg.display.flip()