def showCredits(self): self.levelpack_finished = True if not self.enable_credits: self.sound.stopSounds() self.running = False SHOWCOUNT = 400 showcount = SHOWCOUNT line = 0 hcount = 0 SPACE = 60 lastTime = jngl.getTime() timePerStep = 0.01 credits = [["Programming", "Jannik Waschkau", "Jan-Niklas Hasse", "Kolja Lubitz", "Carsten Pfeffer"], ["Leveldesign", "Jannik Waschkau", "Jan-Niklas Hasse", "Kolja Lubitz"], ["Graphics", "Carsten Pfeffer", "Kolja Lubitz","Jan-Niklas Hasse"], ["Music & Sound","Jannik Waschkau"], ["Graphics Engine (JNGL)","Jan-Niklas Hasse"], ["Thanks to","Hendrik Leibrandt","Malte 'MonkZ' Kuhn","Anika 'Chibi' Roosch","University Bremen"], ["Thanks to","Adrian Lubitz","Jannis Tanner"]] jngl.swapBuffers() jngl.translate(-jngl.getScreenWidth()/2, -jngl.getScreenHeight()/2) jngl.updateInput() jngl.setFontSize(50) while self.running: if jngl.getTime() - lastTime > timePerStep: lastTime += timePerStep jngl.setFontSize(50) for i in range(0, 3): jngl.draw(RESOURCEWORLD + "Background.png", i*jngl.getWidth(RESOURCEWORLD + "Background.png"), 0) if line >= len(credits): jngl.print("Thanks for Playing!!!", int((self.windowWidth/2) - jngl.getTextWidth("Thanks for Playing") / 2), (self.windowHeight/2)) self.levelpack_finished = True if jngl.keyPressed(jngl.key.Any): self.sound.stopSounds() self.running = False elif jngl.keyPressed(jngl.key.Any): line +=1 else: for word in credits[line]: jngl.print(word, int((self.windowWidth/2) - jngl.getTextWidth(word) / 2), (self.windowHeight/2)-150+SPACE*hcount) hcount += 1 hcount = 0 showcount-=1 if not showcount: line+=1 showcount = SHOWCOUNT jngl.setFontSize(20) jngl.print("www.somyeol.com", self.windowWidth-180, self.windowHeight-30) jngl.swapBuffers() jngl.translate(-jngl.getScreenWidth()/2, -jngl.getScreenHeight()/2) jngl.updateInput()
##import cProfile from Game import Game, bouncingEnterButton, bouncingButton, canvas_preview HELPSCREEN = "img/World/helpscreen.png" OVERFLOW_LEFT = False OVERFLOW_RIGHT = True def printCentered(t, x, y): jngl.print(t, int(x-jngl.getTextWidth(t) / 2), y) root = tkinter.Tk() root.withdraw() game = Game() if not jngl.isOpenALInstalled(): jngl.print("Installing OpenAl... Please be patient...", 30, 30) jngl.swapBuffers() jngl.translate(-jngl.getScreenWidth()/2, -jngl.getScreenHeight()/2) os.system("oalinst.exe -s") text = "loading graphics " dirList = os.listdir("img/World/") for f in dirList: if not f.endswith(".png"): continue jngl.load("img/World/" + f) jngl.print(text, 30, 30) text += "." jngl.swapBuffers() jngl.translate(-jngl.getScreenWidth()/2, -jngl.getScreenHeight()/2) dirList = os.listdir("img/Somyeols") for f in dirList: if not f.endswith(".png"): continue
def run(self): self.levelpack_finished = False self.highscore.loadHighscore(self.levelpack) self.levelpack_finished = False lastTime = jngl.getTime() needDraw = True timePerStep = 0.01 counter = 0 fps = 0 start_time = time.time() seconds = 0 min_fps_count = MIN_FPS self.moveCamera() while self.running: if min_fps_count and jngl.getTime() - lastTime > timePerStep: lastTime += timePerStep needDraw = True if jngl.keyPressed(jngl.key.Escape): self.sound.stopSounds() self.running = False if jngl.keyPressed("r"): self.level.somyeols = [] self.level.points = 0 self.moveCamera() self.calculateCollisionBounds() if not self.finish: self.level.step() else: for a in self.level.animations: a.step(self.level.animations) for o in self.level.objects: o.step() elif needDraw: if not min_fps_count: lastTime = jngl.getTime() min_fps_count = MIN_FPS self.sound.playSounds() self.checkMusic() jngl.setFontSize(20) needDraw = False self.level.drawBackground(self.cameray) jngl.pushMatrix() jngl.translate(self.windowWidth/2, self.windowHeight) jngl.scale(1 + (self.scale - 1) / 2) jngl.translate(self.camerax / 2, -self.windowHeight + self.cameray / 2) for i in range(-2, 3): jngl.draw(RESOURCEWORLD + "mountains.png", i*1024, self.windowHeight-300) jngl.popMatrix() jngl.pushMatrix() jngl.scale(self.scale) jngl.translate(self.camerax, self.cameray) self.level.draw() #uncomment for visualization of boundingbox ## jngl.setColor(255,0,0,150) ## jngl.drawRect(self.bounds.x,self.bounds.y,self.bounds.width,self.bounds.height) jngl.popMatrix() jngl.pushSpriteAlpha(150) jngl.draw("img/World/canvas.png", -80, -100) jngl.print("Somyeols: {0}".format(len(self.level.somyeols)), 10, 10) jngl.draw("img/World/canvas.png", self.windowWidth - 200, -120) jngl.print("Level: {0}".format(self.levelNr), self.windowWidth - 140, 10) jngl.popSpriteAlpha() jngl.print("Time: %.2f"%(seconds), 10, 40) if self.finish: if not self.testmode: def printCentered(t, x, y): jngl.print(t, int(x-jngl.getTextWidth(t) / 2), y) def printHighscore(): x,y = (self.windowWidth/2) - 207, (self.windowHeight/2) - 140 jngl.draw("img/World/highscore.png", x,y) hs = self.highscore.getLevelScore(self.levelNr) jngl.print("#".format(len(self.level.somyeols)), x+30, y+80) jngl.print("Score".format(len(self.level.somyeols)), x+100, y+80) jngl.print("Seconds".format(len(self.level.somyeols)), x+200, y+80) jngl.print("Rank".format(len(self.level.somyeols)), x+300, y+80) i = 1 best_rank = hs[0].getRank() for score in hs: jngl.setFontColor(0,0,0) if new_score: if new_score == score: jngl.setFontColor(255,50,50) jngl.print(str(i)+".", x+30, y+90+(30*i)) #jngl.print(str(score.score), x+120, y+90+(30*i)) jngl.print("{0}".format(score.score), x+100, y+90+(30*i)) jngl.print("{0:.2f}".format(score.time), x+200, y+90+(30*i)) jngl.print("{0:.2%}".format(score.getRank()/best_rank), x+300, y+90+(30*i)) i += 1 jngl.setFontColor(0,0,00) if self.finish_highscore: printHighscore() else: x,y = (self.windowWidth/2) - (jngl.getWidth("img/World/canvas.png")/2), (self.windowHeight/2) - (jngl.getHeight("img/World/canvas.png")/2) jngl.draw("img/World/canvas.png", self.windowWidth/2 - 137, self.windowHeight/2 - 92) printCentered("FINAL SCORE", x+(jngl.getWidth("img/World/canvas.png")/2), y+20) printCentered("NEEDED: 100", x+(jngl.getWidth("img/World/canvas.png")/2), y+140) jngl.setFontSize(50) printCentered(str(self.level.points), x+(jngl.getWidth("img/World/canvas.png")/2), y+70) bouncingEnterButton(x+50, y+jngl.getHeight("img/World/canvas.png")+50) if jngl.keyPressed(jngl.key.Return) and self.finish_highscore: self.levelpack_finished = not self.loadNextLevel() start_time = time.time() elif jngl.keyPressed(jngl.key.Return): if self.level.points < self.level.needed_points: self.levelNr -= 1 self.levelpack_finished = not self.loadNextLevel() start_time = time.time() else: self.finish_highscore = True # HIGHSCORE new_score = self.highscore.newHighscore(self.levelNr, seconds, self.level.points) if new_score: self.highscore.saveHighscore(self.levelpack) time.sleep(.5) else:self.running=False else: seconds = time.time()-start_time fps += jngl.getFPS() / 50 counter -= 1 if counter < 0: counter = 50 jngl.setTitle("Somyeol2D {0} - FPS: {1}".format(self.version, int(fps))) fps = 0 jngl.setFontSize(20) jngl.print("Press F1 for Help", 10, self.windowHeight-30) if jngl.keyDown(jngl.key.F1): jngl.draw(HELPSCREEN, (self.windowWidth/2)-jngl.getWidth(HELPSCREEN)/2, (self.windowHeight/2)-jngl.getHeight(HELPSCREEN)/2) #uncomment for visualization of collision-count #colcount = 0 #for o in self.level.objects: # if o.canCollide: # colcount+=1 #jngl.print(str(colcount), self.windowWidth-680, self.windowHeight-50) jngl.print("www.somyeol.com", self.windowWidth-180, self.windowHeight-30) jngl.swapBuffers() jngl.translate(-jngl.getScreenWidth()/2, -jngl.getScreenHeight()/2) jngl.updateInput() else: jngl.sleep(1) min_fps_count-=1 self.sound.stopSounds()