Пример #1
0
    def createObjects(self):
        from mechanics.Ball import Ball
        from mechanics.Level import Level
        from mechanics.Player import Player
        from tools.Sound import Sound
        from tools.Score import Score
        from gui.Text import TextPane

        self.ball = Ball(size=40)
        self.player = Player()
        self.effects = []
        self.level = Level()
        self.level.text.fs = 50
        self.level.text.update()
        self.score = Score(0)
        self.score.fs = 50
        self.score.update()
        self.sound = Sound()
        self.time = default_timer()

        Debug.printMessage("LOADING COMPLETE")
        #Setting GUI position
        self.score.pos = Vec2D(self.size.x - self.score.size.x) + Vec2D(
            -10, 10)
        self.sound.pos = self.size - self.sound.size - Vec2D(20, 10)
        self.sound.fs = 15
        self.sound.update()
        self.level.text.pos = Vec2D(10, 10)
        #Debug features
        if Debug.DEBUGGING:
            self.fpsCounter = TextPane('0 fps', 15)
            self.fpsCounter.pos = Vec2D(
                20, self.size.y - 10 - self.fpsCounter.size.y)
Пример #2
0
 def click(self, mousePos=Vec2D(0, 0)):
     relPos = Vec2D(0, 0, mousePos) - self.pos
     if (relPos > 0 and relPos < self.size):
         if (self.action is not None):
             self.action()
         return True
     else:
         return False
Пример #3
0
 def moveRand(self):
     if self.movement != Vec2D(0, 0):
         return False
     from random import randint
     self.movement = Vec2D(randint(-1, 4), -4)
     while self.movement.x == 0:
         self.movement.x = randint(-1, 4)
     Debug.printMessage("Starting Speed: %s" % self.movement)
     return True
Пример #4
0
 def __init__(self, size=None):
     if isinstance(size, int) or isinstance(size, float):
         Drawable.__init__(self, pos=Vec2D(0, 0), size=Vec2D(size, size))
     else:
         Drawable.__init__(self,
                           pos=Vec2D(0, 0),
                           size=Vec2D(Ball.DEFAULTSIZE, Ball.DEFAULTSIZE))
     self.movement = Vec2D(0, 0)
     self.speed = 1
     Debug.printMessage("Ball created")
Пример #5
0
 def __init__(self, size=None):
     from tools.Debug import Debug
     if Vec2D.isVec(size):
         Drawable.__init__(self, None, size)
     else:
         Drawable.__init__(self, None, Player.PLAYERSIZE)
     self.offsetY = 30
     self.speed = 5
     self.sizeScale = 1
     self.movement = Vec2D(0, 0)
     Debug.printMessage("Player created")
Пример #6
0
 def __init__(self, position, size):
     import random, pygame
     from tools.VecMath import Vec2D
     self.imageOverLay = None
     #self.effekt = ClassOfEffect("none")
     self.pos = Vec2D(0, 0, position)
     self.size = Vec2D(0, 0, size)
     if len(TEXTUES) != 0:
         image = pygame.image.load(random.choice(TEXTUES))
         #image = pygame.transform.scale(image, self.size.getTuple())
         self.imageOverLay = image
     else:
         self.imageOverLay = None
Пример #7
0
 def gameOverScreen(self):
     from tools.Debug import Debug
     playerName = ''
     blocked = True
     toRender = []
     # Creating text panes
     gameOverText = TextPane("Game Over", 60)
     gameOverText.pos = (self.size - gameOverText.size) / 2
     toRender.append(gameOverText)
     # The text below
     restartText = TextPane("Q to quit or C to play again", 45)
     restartText2 = TextPane("H for highscore", 45)
     restartText.pos = (self.size - restartText.size) / 2 + Vec2D(0, 50)
     restartText2.pos = (self.size - restartText2.size) / 2 + Vec2D(0, 100)
     toRender.append(restartText)
     toRender.append(restartText2)
     # Playername
     playerNameText = TextPane(playerName, 90)
     playerNameText.pos.y = (self.size - playerNameText.size).y
     toRender.append(playerNameText)
     # Updating the screen and doing the event loop
     while True:
         for gameOverEvent in pygame.event.get():
             if gameOverEvent.type == pygame.QUIT:
                 return SceneManager.QUIT
             if gameOverEvent.type == pygame.KEYDOWN:
                 key = gameOverEvent.key
                 if key == pygame.K_ESCAPE: return SceneManager.QUIT
                 if key == pygame.K_q and not blocked:
                     return SceneManager.QUIT
                 elif key == pygame.K_c and not blocked:
                     return SceneManager.RESTART
                 elif 97 <= key <= 122:
                     playerName += chr(key)
                 elif key == pygame.K_SPACE:
                     playerName += ' '
                 elif key == pygame.K_BACKSPACE:
                     playerName = playerName[:-1]
                 elif key == pygame.K_RETURN and blocked:
                     blocked = False
                     Debug.printMessage(playerName)
                     Highscore.saveToFile(playerName, self.score.score,
                                          self.level.levelid)
         #Drawing objects
         self.screen.fill(SceneManager.BACKGROUND_COLOR)
         playerNameText.setText("Enter your name" if playerName ==
                                '' else playerName)
         for obj in toRender:
             obj.draw(self.screen)
         pygame.display.update()
Пример #8
0
    def update(self):
        self.remove_invisible_blocks()

        # Generate new platforms
        current = self.blocks[-1].get_right_edge().x
        end = self.x_offset + self.dimension.x * 1.2
        height = 50

        while current <= end:
            current += self.get_distance_between_blocks()
            width = randrange(80, 100)
            block = Block(Vec2D(current, self.dimension.y - height),
                          Vec2D(width, height))
            self.blocks.append(block)
            current += width
Пример #9
0
 def setSize(self, scale):
     if Vec2D.isVec(scale):
         scale = scale.getLength()
     if isinstance(scale, float) or isinstance(scale, int):
         self.size = Player.PLAYERSIZE * scale
     else:
         self.size = Player.PLAYERSIZE
Пример #10
0
 def constrain(self, boundery):
     # Top
     if self.pos.y < 0:
         self.bounceY()
         self.pos = Vec2D(self.pos.x, 0)
         return Ball.BOUNCE
     # Right
     elif (self.pos + self.size).x >= boundery.x:
         self.bounceX()
         self.pos = Vec2D(boundery.x - (self.size.x + 1), self.pos.y)
         return Ball.BOUNCE
     # Left
     elif self.pos.x < 0:
         self.bounceX()
         self.pos = Vec2D(0, self.pos.y)
         return Ball.BOUNCE
     #Down
     elif (self.pos + self.size).y > boundery.y:
         return Ball.FAIL
     return Ball.NONE
Пример #11
0
    def run(self):
        while self.running:
            self.running = self.catch_events(pygame.event.get())

            # Updating positions
            self.player.update()
            # self.player.constrain(self.window_dimension)
            if self.level.collides(self.player):
                self.player.bounce()

            self.level.update()

            # Showing objects on the screen
            self.camera.show(self.screen, Vec2D(0, 0))
            self.camera.update()
            pygame.display.update()
Пример #12
0
 def eventLoop(self, event):
     # todo: implement keymap
     if event.type == pygame.QUIT:
         self.running = False
     elif event.type == pygame.KEYDOWN:
         if event.key == pygame.K_RIGHT:
             self.player.movement.x = 1
         elif event.key == pygame.K_LEFT:
             self.player.movement.x = -1
         try:
             self.keymap[event.key]()
         except KeyError:
             pass
     elif event.type == pygame.KEYUP:
         self.player.movement = Vec2D(0, 0)
     elif (event.type == pygame.MOUSEBUTTONDOWN) and (event.button == 1):
         self.click(pygame.mouse.get_pos())
Пример #13
0
class Player(Drawable):
    PLAYERSPEED = 10
    PLAYERSIZE = Vec2D(150, 10)

    # Constructor
    def __init__(self, size=None):
        from tools.Debug import Debug
        if Vec2D.isVec(size):
            Drawable.__init__(self, None, size)
        else:
            Drawable.__init__(self, None, Player.PLAYERSIZE)
        self.offsetY = 30
        self.speed = 5
        self.sizeScale = 1
        self.movement = Vec2D(0, 0)
        Debug.printMessage("Player created")

    # Resizing the player
    def setSize(self, scale):
        if Vec2D.isVec(scale):
            scale = scale.getLength()
        if isinstance(scale, float) or isinstance(scale, int):
            self.size = Player.PLAYERSIZE * scale
        else:
            self.size = Player.PLAYERSIZE

    # Setting speed
    def setSpeed(self, x):
        self.speed = Player.PLAYERSPEED * x

    # Moving the player+checking for collisions
    def move(self, screenWidth):
        self.pos += self.movement * self.speed
        self.pos.x = max(0, self.pos.x)
        self.pos.x = min(screenWidth - self.size.x, self.pos.x)

    # Puting the player out on the screen
    def draw(self, screen):
        from pygame.draw import rect
        rect(screen, (0, 0, 0), self.getRect())
Пример #14
0
    def menuScreen(self):
        from gui.Button import Button
        self.screen.fill(SceneManager.BACKGROUND_COLOR)
        buttons = [Button("Start", 30), Button("Highscore", 30)]
        #Drawing
        for button in buttons:
            button.size = Vec2D(200, 50)
            button.center()
            button.bg = (255, 0, 0)
            button.draw(self.screen)
        pygame.display.update()
        while (True):
            for menuEvent in pygame.event.get():
                if menuEvent.type == pygame.QUIT: self.close()
                if menuEvent.type == pygame.KEYDOWN:
                    key = menuEvent.key
                    if key == pygame.K_ESCAPE: self.close()

                if menuEvent != pygame.MOUSEBUTTONDOWN or event.button != 1:
                    continue
                for button in buttons:
                    button.click(pygame.mouse.get_pos())
Пример #15
0
    def setup(self):
        # Setting the effects
        # from mechanics.Effect import Effect
        # self.effects.append(Effect("PlayerBooster", 5))
        # self.effects.append(Effect("BallSlower", 5))

        # Sets the level to 1
        self.level.switchLevel(1)
        # Centers the player
        playerRect = self.player.getRect()
        playerRect.center = (self.size.x / 2,
                             self.size.y - self.player.offsetY)
        self.player.pos = Vec2D(playerRect.left, playerRect.top)
        # Relocates the ball to the middle of the player
        self.ball.movement = Vec2D(0, 0)
        self.ball.pos = self.player.pos + self.player.size * Vec2D(
            .5, 0) - self.ball.size * Vec2D(.5, 1)
        # Moving level Down
        self.level.setOffset(
            Vec2D(0, self.score.pos.y + self.score.size.y * .75))

        # Reset score
        self.score.reset()
        self.level.pos = Vec2D(0, self.score.pos.y + self.score.size.y)
Пример #16
0
 def __init__(self, size):
     self.background = (0, 128, 0)
     self.position = Vec2D(0, 0)
     self.size = size
     self.objects = []
     self.center_object = None
Пример #17
0
 def __init__(self, dimension):
     self.dimension = dimension
     self.blocks = [Block(Vec2D(0, 400), Vec2D(100, 300))]
     self.x_offset = 0
Пример #18
0
 def __init__(self, position, size):
     self.position = position if Vec2D.isVec(position) else Vec2D(0, 0)
     self.size = size if Vec2D.isVec(size) else Vec2D(10, 10)
Пример #19
0
 def __init__(self, size):
     pygame.init()
     self.size = size if Vec2D.isVec(size) else Vec2D(500, 500)
     self.screen = pygame.display.set_mode(self.size.getTuple())
     self.clock = pygame.time.Clock()
Пример #20
0
 def update(self):
     from pygame.font import Font
     self.textRect = Font(None, self.fs).render(self.text, 1, self.fc)
     rect = self.textRect.get_rect()
     self.size = Vec2D(rect.width, rect.height)
Пример #21
0
 def setOffset(self, offset=None):
     from tools.VecMath import Vec2D
     if not Vec2D.isVec(offset) or offset is None:
         return
     for block in self.blocks:
         block.pos += offset
Пример #22
0
 def __init__(self):
     self.position = Vec2D(100, 200)
     self.speed = Vec2D(500, 0) * Game.UPDATE_SPEED
     self.acceleration = Vec2D(0, 1) * Game.UPDATE_SPEED
     self.radius = 30
Пример #23
0
 def draw(self, surf):
     textVec = self.pos
     for i, line in enumerate(self.lines):
         line.pos = textVec
         line.draw(surf)
         textVec += Vec2D(0, line.size.y)
Пример #24
0
 def __init__(self, window_dimension=None):
     from mechanics.Camera import Camera
     from Player import Player
     from mechanics.Obstacles import Level
     self.window_dimension = window_dimension if window_dimension is not None else Vec2D(
         800, 600)
     self.screen = pygame.display.set_mode(
         self.window_dimension.get_tuple())
     self.camera = Camera(self.window_dimension)
     self.level = Level(self.window_dimension)
     self.player = Player()
     self.camera_setup()
     self.running = True
     self.run()
Пример #25
0
 def setPosition(self, position):
     self.pos if Vec2D.isVec(position) else Vec2D(0, 0)