Ejemplo n.º 1
0
    def run(self):
        self.screen.blit(self.imgBg, (0, 0))
        while not self.gameStatus == "Finished":
            #tick
            self.clock.tick(self.fps)
            #input
            self.getKeys()
            #update and draw
            if (self.gameStatus[2:] == "_Threw"):
                self.K_pos = self.getCollisions()
                print(self.K_pos)
            elif (self.gameStatus[2:] == "_Ready"):
                self.txtWind.draw(self.screen)
                self.txtForce.draw(self.screen)
                self.txtAngle.draw(self.screen)
                self.btnThrow.draw(self.screen)
            elif (self.gameStatus[2:] == "_Missed"):
                self.btnContinue.draw(self.screen)
            elif (self.gameStatus[2:] == "_Hit"):
                if self.score_added == False:
                    if self.gameStatus[0:2] == "P1":
                        self.P1_score += 1
                    elif self.gameStatus[0:2] == "P2":
                        self.P2_score += 1
                    self.score_added = True
                PxWinsTxt = Textbox(self.gameStatus[0:2] + " Wins!", (200, 50))
                WinCounterTxt = Textbox(
                    str(self.P1_score) + " : " + str(self.P2_score),
                    (200, 150))
                PxWinsTxt.draw(self.screen)
                WinCounterTxt.draw(self.screen)
                self.btnContinue.draw(self.screen)
            ##NOT NEEDED IF NOT ONLINE? -> self.nextStatus()
        #    self.screen.fill(0)
        # redraw background
            print("####")
            old_pos = self.K_pos
            #self.K_pos = self.Kuchen.get_pos()
            print(old_pos)
            self.screen.blit(
                self.imgBg,
                (old_pos[0] - self.K_size_x, old_pos[1] - self.K_size_y),
                pygame.Rect(old_pos[0] - self.K_size_x,
                            old_pos[1] - self.K_size_y, 3 * self.K_size_x,
                            3 * self.K_size_y))

            self.screen.blit(self.P1_sprite, self.P1_pos)
            self.screen.blit(self.P2_sprite, self.P2_pos)
            self.screen.blit(self.K_sprite, self.K_pos)
            self.txtForce = Textbox(str(self.throw_force),
                                    (self.screen_width // 2, 50))
            self.txtAngle = Textbox(str(int(self.throw_angle)),
                                    (self.screen_width // 2, 100))
            pygame.display.flip()

        pygame.quit()
        quit()
Ejemplo n.º 2
0
def game_intro(WIDTH, HEIGHT, screen, BLACK, WHITE, font, Star, clock):
    intro = True

    textObject = Textbox((WIDTH - 200) / 2, 340, 200, 24, 24, 20, True, "",
                         (0, 191, 255), (255, 255, 255), (0, 191, 255))

    while intro:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RETURN:
                    username = textObject.getName()
                    intro = False
                    return username

            textObject.handle_event(event)

        screen.fill(BLACK)

        # all_sprites_list.add(elementBox)

        textObject.update()
        textObject.draw(screen)
        menuText = font.render('Welcome to the Periodic Table Quiz', True,
                               (WHITE))
        menuTextW = menuText.get_width()
        screen.blit(menuText, ((WIDTH - menuTextW) / 2, 222))

        # Background stars
        for i in range(1, 20):
            newStarx = random.randint(1, WIDTH)
            newStary = random.randint(1, HEIGHT)
            newstarIntro = Star(screen, WHITE, (newStarx, newStary),
                                random.randint(1, 2), 20)

        pygame.display.update()
        clock.tick(15)
Ejemplo n.º 3
0
class GameLoop():
    # COLORS
    WHITE = (255, 255, 255)
    GREY = (155, 155, 155)
    BLACK = (0, 0, 0)

    throw_force = 5
    throw_angle = 45
    P1_score = 0
    P2_score = 0

    # I dont include JustStarted and Finished here, to mark them a outside the regular flow
    statusFlow = [
        "P1_Ready", "P1_Threw", "P1_Missed", "P1_Hit", "P2_Ready", "P2_Threw",
        "P2_Missed", "P2_Hit"
    ]
    gameStatus = "JustStarted"
    api_url_base = 'http://127.0.0.1:5000/'
    api_url = '{0}info'.format(api_url_base)

    def __init__(self, ):
        self.fps = 60

        self.screen_width = 1024
        self.screen_height = 580
        self.gravity = 0.1

        # Online?
        self.online = False

        # Images
        # K is for Kuchen, P1 and P2 for Player 1 and Player 2
        self.K_sprite = pygame.image.load("drawables/kuchen.png")
        self.P1_sprite = pygame.image.load("drawables/player1.png")
        self.P2_sprite = pygame.image.load("drawables/player2.png")

        # Sizes
        self.K_size_x = 10
        self.K_size_y = 10
        P1_size_x = 20
        P1_size_y = 20
        P2_size_x = 20
        P2_size_y = 20

        # Positions
        self.K_pos = (15, self.screen_height - 15)
        self.P1_pos = (0, self.screen_height - P1_size_y)
        self.P2_pos = (self.screen_width - P2_size_x,
                       self.screen_height - P2_size_y)

        # Init of Items in the game
        self.Kuchen = KuchenClass(self.K_size_x, self.K_size_y, self.K_pos[0],
                                  self.K_pos[1])
        self.Kuchen.set_v(0, 0)
        self.Player1 = Item(P1_size_x, P1_size_y, self.P1_pos[0],
                            self.P1_pos[1])
        self.Player1.set_v(0, 0)
        self.Player1.set_a(0, self.gravity)
        self.Player2 = Item(P2_size_x, P2_size_y, self.P2_pos[0],
                            self.P2_pos[1])
        self.Player2.set_v(0, 0)
        self.Player2.set_a(0, self.gravity)

        # Pygame elements
        pygame.init()
        pygame.font.init()
        gameDisplay = pygame.display
        self.screen = gameDisplay.set_mode(
            (self.screen_width, self.screen_height))
        gameDisplay.set_caption('Throw the Kuchen')
        self.clock = pygame.time.Clock()
        allsprites = pygame.sprite.RenderPlain(
            (self.Player1, self.Player2, self.Kuchen))

        # Background image
        self.imgBg = pygame.image.load("drawables/bg.png")

        # User Interface Elements
        self.wind = self.get_wind()
        if self.wind < 0: self.msgWind = str(abs(self.wind)) + " ->"
        elif self.wind > 0: self.msgWind = "<- " + str(abs(self.wind))
        else: self.msgWind = str(abs(self.wind))
        self.txtWind = Textbox(self.msgWind, (self.screen_width // 2, 0))
        self.txtForce = Textbox(str(self.throw_force),
                                (self.screen_width // 2, 50))
        self.txtAngle = Textbox(str(int(self.throw_angle)),
                                (self.screen_width // 2, 100))
        self.btnThrow = Button("drawables/button_throw.png",
                               (self.screen_width // 2, 200), "Throw!")
        self.btnContinue = Button("drawables/button_continue.png",
                                  (self.screen_width // 2, 200),
                                  "Press to continue")

        # This might be changed if we use a random starting player
        self.gameStatus = "P1_Ready"
        self.score_added = False

    def getKeys(self):

        delta_angle = 0
        delta_force = 0

        keys = pygame.key.get_pressed()
        if keys[pygame.K_UP]:
            if self.throw_angle < 90:
                self.throw_angle += 0.05
            else:
                self.throw_angle = 90
        if keys[pygame.K_DOWN]:
            if self.throw_angle > 0:
                self.throw_angle -= 0.05
            else:
                self.throw_angle = 0
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                quit()
            if event.type == pygame.MOUSEBUTTONUP:
                mousepos = pygame.mouse.get_pos()
                bt_area = self.btnThrow.get_area()
                bc_area = self.btnContinue.get_area()
                if bt_area[0] < mousepos[0] < bt_area[1] and bt_area[
                        2] < mousepos[1] < bt_area[3]:
                    self.gameStatus = self.throw(self.Kuchen, self.gameStatus,
                                                 self.wind)
                    if self.wind < 0:
                        self.msgWind = str(abs(self.wind)) + " ->"
                    elif self.wind > 0:
                        self.msgWind = "<- " + str(abs(self.wind))
                    else:
                        self.msgWind = str(abs(self.wind))
                    self.txtWind = Textbox(self.msgWind,
                                           (self.screen_width // 2, 0))
                if bc_area[0] < mousepos[0] < bc_area[1] and bc_area[
                        2] < mousepos[1] < bc_area[3]:
                    if self.gameStatus[2:] == "_Hit":
                        self.score_added = False
                    self.wind = self.nextPlayer()
                    if self.wind > 0:
                        self.msgWind = str(abs(self.wind)) + " ->"
                    elif self.wind < 0:
                        self.msgWind = "<- " + str(abs(self.wind))
                    else:
                        self.msgWind = str(abs(self.wind))
                    self.txtWind = Textbox(self.msgWind,
                                           (self.screen_width // 2, 0))
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_UP:
                    delta_angle = 1
                if event.key == pygame.K_DOWN:
                    delta_angle = -1
                if event.key == pygame.K_LEFT:
                    delta_force = -1
                if event.key == pygame.K_RIGHT:
                    delta_force = 1
                if event.key == pygame.K_RETURN:
                    if self.gameStatus[2:] == "_Ready":
                        self.gameStatus = self.throw(self.Kuchen,
                                                     self.gameStatus,
                                                     self.wind)
                    elif self.gameStatus[2:] == "_Missed" or self.gameStatus[
                            2:] == "_Hit":
                        if self.gameStatus[2:] == "_Hit":
                            self.score_added = False
                        self.wind = self.nextPlayer()
                        if self.wind > 0:
                            self.msgWind = str(abs(self.wind)) + " ->"
                        elif self.wind < 0:
                            self.msgWind = "<- " + str(abs(self.wind))
                        else:
                            self.msgWind = str(abs(self.wind))
                        self.txtWind = Textbox(self.msgWind,
                                               (self.screen_width // 2, 0))
                        self.screen.blit(self.K_sprite, self.K_pos)
            if event.type == pygame.KEYUP:
                if event.key == pygame.K_UP:
                    delta_angle = 0
                if event.key == pygame.K_DOWN:
                    delta_angle = 0
                if event.key == pygame.K_LEFT:
                    delta_force = 0
                if event.key == pygame.K_RIGHT:
                    delta_force = 0

        self.throw_angle += delta_angle
        self.throw_force += delta_force

    def getCollisions(self):
        new_pos = self.Kuchen.update()
        if (self.gameStatus[0:2] == "P1"):
            self.gameStatus = check_collision(self.Kuchen, self.Player2,
                                              self.gameStatus)
        elif (self.gameStatus[0:2] == "P2"):
            self.gameStatus = check_collision(self.Kuchen, self.Player1,
                                              self.gameStatus)
        if self.gameStatus != "P1_Hit" and self.gameStatus != "P2_Hit":
            self.gameStatus = check_collision_boundaries(
                self.Kuchen, 0, 0, self.screen_width, self.screen_height,
                self.gameStatus)
        return new_pos

    def nextStatus(self):
        for statusIx in list(range(0, len(self.statusFlow) - 1, 1)):
            if self.gameStatus == self.statusFlow[statusIx]:
                newStatus = self.statusFlow[(statusIx + 1) %
                                            len(self.statusFlow)]

    def throw(self, thrownObject, Status, wind):
        NewStatus = Status.split('_')[0] + "_Threw"
        # We correct angle for -y and both players here instead of under item.py
        if Status[0:2] == "P1":
            corrected_angle = 90 - int(self.throw_angle)
        elif Status[0:2] == "P2":
            corrected_angle = 270 + int(self.throw_angle)
        thrownObject.set_v_vector(self.throw_force, corrected_angle)
        thrownObject.set_a(wind, self.gravity)
        return NewStatus

    def nextPlayer(self):
        if self.online:
            url_text = '{0}' + self.gameStatus
            self.api_url = url_text.format(self.api_url_base)
            response = requests.put(self.api_url)
            exitcode = response.status_code
            data = json.loads(response.content.decode('utf-8'))
            self.gameStatus = data['gameStatus']
        else:
            if self.gameStatus[0:2] == "P1": self.gameStatus = "P2_Ready"
            elif self.gameStatus[0:2] == "P2": self.gameStatus = "P1_Ready"

        if self.gameStatus[0:2] == "P2":
            self.Kuchen.set_pos(self.screen_width - 15,
                                self.screen_height - 15)
        elif self.gameStatus[0:2] == "P1":
            self.Kuchen.set_pos(15, self.screen_height - 15)

        NewWind = self.get_wind()
        return NewWind

    def get_wind(self):
        #0.05 is fine
        newWind = random.randint(-5, 5) / 100
        return newWind

    def run(self):
        self.screen.blit(self.imgBg, (0, 0))
        while not self.gameStatus == "Finished":
            #tick
            self.clock.tick(self.fps)
            #input
            self.getKeys()
            #update and draw
            if (self.gameStatus[2:] == "_Threw"):
                self.K_pos = self.getCollisions()
                print(self.K_pos)
            elif (self.gameStatus[2:] == "_Ready"):
                self.txtWind.draw(self.screen)
                self.txtForce.draw(self.screen)
                self.txtAngle.draw(self.screen)
                self.btnThrow.draw(self.screen)
            elif (self.gameStatus[2:] == "_Missed"):
                self.btnContinue.draw(self.screen)
            elif (self.gameStatus[2:] == "_Hit"):
                if self.score_added == False:
                    if self.gameStatus[0:2] == "P1":
                        self.P1_score += 1
                    elif self.gameStatus[0:2] == "P2":
                        self.P2_score += 1
                    self.score_added = True
                PxWinsTxt = Textbox(self.gameStatus[0:2] + " Wins!", (200, 50))
                WinCounterTxt = Textbox(
                    str(self.P1_score) + " : " + str(self.P2_score),
                    (200, 150))
                PxWinsTxt.draw(self.screen)
                WinCounterTxt.draw(self.screen)
                self.btnContinue.draw(self.screen)
            ##NOT NEEDED IF NOT ONLINE? -> self.nextStatus()
        #    self.screen.fill(0)
        # redraw background
            print("####")
            old_pos = self.K_pos
            #self.K_pos = self.Kuchen.get_pos()
            print(old_pos)
            self.screen.blit(
                self.imgBg,
                (old_pos[0] - self.K_size_x, old_pos[1] - self.K_size_y),
                pygame.Rect(old_pos[0] - self.K_size_x,
                            old_pos[1] - self.K_size_y, 3 * self.K_size_x,
                            3 * self.K_size_y))

            self.screen.blit(self.P1_sprite, self.P1_pos)
            self.screen.blit(self.P2_sprite, self.P2_pos)
            self.screen.blit(self.K_sprite, self.K_pos)
            self.txtForce = Textbox(str(self.throw_force),
                                    (self.screen_width // 2, 50))
            self.txtAngle = Textbox(str(int(self.throw_angle)),
                                    (self.screen_width // 2, 100))
            pygame.display.flip()

        pygame.quit()
        quit()
Ejemplo n.º 4
0
#  Px_Threw
#  Px_Hit
#  Px_Missed
gameStatus = "JustStarted"
# Just in case we want to start randomly here
gameStatus = "P1_Ready"
score_added = False

while not gameStatus == "Finished":
    Kuchen_pos = Kuchen.get_pos()
    screen.fill(0)
    screen.blit(P1_sprite, P1_pos)
    screen.blit(P2_sprite, P2_pos)
    screen.blit(Kuchen_sprite, Kuchen_pos)
    if (gameStatus[2:] == "_Ready"):
        windTxt.draw(screen)
        forceTxt.draw(screen)
        angleTxt.draw(screen)
        throwButton.draw(screen)
    elif (gameStatus[2:] == "_Threw"):
        Kuchen_pos = Kuchen.update()
        if (gameStatus[0:2] == "P1"):
            gameStatus = check_collision(Kuchen, Player2, gameStatus)
        elif (gameStatus[0:2] == "P2"):
            gameStatus = check_collision(Kuchen, Player1, gameStatus)
        if gameStatus != "P1_Hit" and gameStatus != "P2_Hit":
            gameStatus = check_collision_boundaries(Kuchen, 0, 0, MAX_X, MAX_Y, gameStatus)
    elif (gameStatus[2:] == "_Missed"):
        continueButton.draw(screen)
    elif (gameStatus[2:] == "_Hit"):
        if score_added == False: