예제 #1
0
    def handlePhysics(self, squares, collisionObjects, pointsObjects, finish,
                      timeStep):
        for s in squares:
            s.velocity += self.gravityForce * s.getMass() * timeStep

            r = s.getRect()
            coll = Vector(0.0, 0.0)

            for sc in squares:
                if s == sc:
                    continue
                rc = sc.getRect()
                coll += self.collision(r, rc)

            s.processCollision(coll)
            coll = Vector(0.0, 0.0)
            r = s.getRect()
            for c in collisionObjects:
                coll += self.collision(r, c)
            s.processCollision(coll)
            for i, p in enumerate(pointsObjects):
                if self.collision(r, p) != 0:
                    GameInfo().addPoint()
                    del pointsObjects[i]
            if self.collision(r, finish) != 0:
                GameInfo().handleFinish()
예제 #2
0
 def handleEvent(self, e):
     if e.type == SDL_KEYUP:
         if e.key.keysym.sym == SDLK_ESCAPE:
             ViewEngine().toggleOverlay()
             if ViewEngine().isOverlay():
                 GameInfo().getTimer().pause()
             else:
                 GameInfo().getTimer().unpause()
예제 #3
0
    def init(self):
        self.buttons.clear()

        gFont = TTF_OpenFont(FONT, 80)
        TTF_SetFontStyle(gFont, TTF_STYLE_BOLD)
        color = SDL_Color(0, 0, 0)

        button = Button()
        button.setTexture("Main menu", 40, SDL_Color(
            255, 255, 255), SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 70)
        button.onClick(lambda: ViewEngine().changeView("mainMenu"))
        self.buttons.append(button)

        self.title = Texture(ViewEngine().getRenderer())
        self.title.loadFromRenderedText("Set nickname", color, gFont)

        gFont = TTF_OpenFont(FONT, 40)
        self.score.clear()
        s = GameInfo().readSave()
        for i, val in enumerate(s):
            texture = Texture(ViewEngine().getRenderer())
            texture.loadFromRenderedText(
                str(i+1)+". " + val["name"] + " - " + str(val["score"]), color, gFont)
            self.score.append(texture)
예제 #4
0
    def init(self):
        self.buttons.clear()

        gFont = TTF_OpenFont(FONT, 80)
        TTF_SetFontStyle(gFont, TTF_STYLE_BOLD)
        color = SDL_Color(0, 0, 0)

        button = Button()
        button.setTexture("Main menu", 40, SDL_Color(255, 255, 255),
                          SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 140)
        button.onClick(lambda: ViewEngine().changeView("mainMenu"))
        self.buttons.append(button)

        button = Button()
        button.setTexture("Fullscreen", 40, SDL_Color(255, 255, 255),
                          SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 70)
        button.onClick(lambda: ViewEngine().toggleFullscreen())
        self.buttons.append(button)

        self.title = Texture(ViewEngine().getRenderer())
        self.title.loadFromRenderedText("Settings", color, gFont)

        gFont = TTF_OpenFont(FONT, 40)
        self.greetings = Texture(ViewEngine().getRenderer())
        self.greetings.loadFromRenderedText("Hello " + GameInfo().getPlayer(),
                                            color, gFont)
예제 #5
0
 def handleEvent(self, e):
     for b in self.buttons:
         b.handleEvent(e)
     if e.type == SDL_KEYDOWN:
         if e.key.keysym.sym == SDLK_BACKSPACE and len(
                 GameInfo().getPlayer()) > 0:
             player = GameInfo().getPlayer()
             player = player[:-1]
             if len(player) == 0:
                 player = " "
             GameInfo().setPlayer(player)
         ViewEngine().updateView()
     elif e.type == SDL_TEXTINPUT:
         player = GameInfo().getPlayer()
         if len(player) == 1 and player[0] == " ":
             player = ""
         GameInfo().setPlayer(player + e.text.text.decode('utf-8'))
         ViewEngine().updateView()
예제 #6
0
def loadInterfaces():
    mainMenu = MainMenu.MainMenu()
    settings = Settings.Settings()
    ViewEngine().addView(mainMenu)
    ViewEngine().addView(settings)
    ViewEngine().addView(Nickname.Nickname())
    ViewEngine().addView(Scoreboard.Scoreboard())
    ViewEngine().addView(Game.Game())
    ViewEngine().addView(Pause.Pause())

    GameInfo().setMap(Level("level1"))
예제 #7
0
 def init(self):
     self.timer = Timer()
     self.offsetX = 50
     self.border = 200
     self.gFont = TTF_OpenFont(FONT, 20)
     self.gFontOutline = TTF_OpenFont(FONT, 20)
     TTF_SetFontOutline(self.gFontOutline, 3)
     color = SDL_Color(0, 0, 0)
     GameInfo().getMap().init()
     ViewEngine().setOverlay("pause")
     GameInfo().setState(len(GameInfo().getMap().getPoints()))
     self.time = Texture(ViewEngine().getRenderer())
     self.points = Texture(ViewEngine().getRenderer())
     self.squares.clear()
     square = Square(Vector(10, 10), Vector(600, 1000), 50, 2, 0.99, 1)
     self.squares.append(square)
     square = Square(Vector(80, 80), Vector(500, 1100), 60, 4, 0.9, 1)
     self.squares.append(square)
     square = Square(Vector(160, 80), Vector(700, 1100), 80, 4, 0.95, 1)
     self.squares.append(square)
예제 #8
0
    def init(self):
        self.buttons.clear()

        gFont = TTF_OpenFont(FONT, 80)
        TTF_SetFontStyle(gFont, TTF_STYLE_BOLD)
        color = SDL_Color(0, 0, 0)

        button = Button()
        button.setTexture("Settings", 40, SDL_Color(255, 255, 255),
                          SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 140)
        button.onClick(lambda: ViewEngine().changeView("settings"))
        self.buttons.append(button)

        button = Button()
        button.setTexture("Exit", 40, SDL_Color(255, 255, 255),
                          SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 70)
        button.onClick(lambda: ViewEngine().exit())
        self.buttons.append(button)

        button = Button()
        button.setTexture("Scoreboard", 40, SDL_Color(255, 255, 255),
                          SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 210)
        button.onClick(lambda: ViewEngine().changeView("scoreboard"))
        self.buttons.append(button)

        button = Button()
        button.setTexture("New Game", 40, SDL_Color(255, 255, 255),
                          SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 350)
        button.onClick(lambda: ViewEngine().changeView("game"))
        self.buttons.append(button)

        button = Button()
        button.setTexture("Set nickname", 40, SDL_Color(255, 255, 255),
                          SDL_Color(0, 0, 0))
        button.setPosition(30, SCREEN_HEIGHT - 280)
        button.onClick(lambda: ViewEngine().changeView("nickname"))
        self.buttons.append(button)

        self.title = Texture(ViewEngine().getRenderer())
        self.title.loadFromRenderedText("Main Menu", color, gFont)

        gFont = TTF_OpenFont(FONT, 40)
        self.greetings = Texture(ViewEngine().getRenderer())
        self.greetings.loadFromRenderedText("Hello " + GameInfo().getPlayer(),
                                            color, gFont)
예제 #9
0
    def render(self, gRenderer):
        ts = self.timer.getTicks()
        timeStep = (ts / 1000.)
        self.timer.start()

        SDL_SetRenderDrawColor(ViewEngine().getRenderer(), 0, 0, 0, 1)
        ground = GameInfo().getMap().getGround()
        for g in ground:
            tempRect = SDL_Rect(g.x, g.y, g.w, g.h)
            tempRect.x += self.offsetX
            SDL_RenderFillRect(ViewEngine().getRenderer(), tempRect)

        SDL_SetRenderDrawColor(ViewEngine().getRenderer(), 0, 0xff, 0xff, 1)
        points = GameInfo().getMap().getPoints()
        for p in points:
            tempRect = SDL_Rect(p.x, p.y, p.w, p.h)
            tempRect.x += self.offsetX
            SDL_RenderFillRect(ViewEngine().getRenderer(), tempRect)

        SDL_SetRenderDrawColor(ViewEngine().getRenderer(), 255, 0, 0, 1)
        f = GameInfo().getMap().getFinish()
        tempRect = SDL_Rect(f.x, f.y, f.w, f.h)
        tempRect.x += self.offsetX
        SDL_RenderFillRect(ViewEngine().getRenderer(), tempRect)

        for s in self.squares:
            SDL_SetRenderDrawColor(ViewEngine().getRenderer(),
                                   s.getColor().r,
                                   s.getColor().g,
                                   s.getColor().b, 1)
            squareRect = s.getRect()
            tempRect = SDL_Rect(squareRect.x, squareRect.y, squareRect.w,
                                squareRect.h)
            tempRect.x += self.offsetX
            SDL_RenderFillRect(ViewEngine().getRenderer(), tempRect)

        pointsString = str(GameInfo().getPoints())+"/" + \
            str(GameInfo().getPointsAll())
        self.time.loadFromRenderedText("Score: " + pointsString,
                                       SDL_Color(255, 255, 255),
                                       self.gFontOutline)
        self.time.render(17, 17)
        self.time.loadFromRenderedText("Score: " + pointsString,
                                       SDL_Color(0, 0, 0), self.gFont)
        self.time.render(20, 20)

        self.time.loadFromRenderedText("Time: " + GameInfo().getTimeString(),
                                       SDL_Color(255, 255, 255),
                                       self.gFontOutline)
        self.time.render(17, 42)
        self.time.loadFromRenderedText("Time: " + GameInfo().getTimeString(),
                                       SDL_Color(0, 0, 0), self.gFont)
        self.time.render(20, 45)

        if ts == 0 or ViewEngine().isOverlay():
            return

        self.calculateOffset()
        for s in self.squares:
            s.move()
            s.addPosition(timeStep)

        PhysicsEngine().handlePhysics(self.squares,
                                      GameInfo().getMap().getGround(),
                                      GameInfo().getMap().getPoints(),
                                      GameInfo().getMap().getFinish(), ts)