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()
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()
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)
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)
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()
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"))
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)
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)
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)