def createHowToObjectives(window): sprites = [ common.createTitle("Objectives"), common.createCenteredImage("objectives") ] drawer.drawList(sprites, window) return sprites
def submitScoreState(window, control, score): '''The playing screen for submitting a new score''' sprites, \ errorMessage, \ inputBox, \ submitScoreButton = makeSubmitMenuGUI(score, window) drawer.drawList(sprites[:-2] + [inputBox], window) isError = False while not window.closed: point = window.checkMouse() if button.isButtonPressed(point, submitScoreButton, window): name = inputBox.getText() if (len(name) < 3 or len(name) > 25) or "`" in name: if not isError: errorMessage.draw(window) isError = True else: name = inputBox.getText() highscores.submitScore(name, score) break gfx.update(common.UPDATE_SPEED) drawer.undrawList(sprites + [inputBox, errorMessage])
def createHowToAppleTypes(window): sprites = [ common.createTitle("Apple Types", y=common.WINDOW_HEIGHT / 12), common.createCenteredImage("apple_types") ] drawer.drawList(sprites, window) return sprites
def createHowToControls(window): sprites = [ common.createTitle("Controls"), common.createCenteredImage("controls") ] drawer.drawList(sprites, window) return sprites
def createHowToPlayMenu(window): '''Creates the GUI for the "how to play" menu''' sprites = [common.createTitle("How To Play")] drawer.drawList(sprites, window) guiY = common.WINDOW_HEIGHT / 10 + 50 controlsSprites, \ controlsButton = button.create(guiY, "Controls", window) guiY += button.HEIGHT * 2 objectivesSprites, \ objectivesButton = button.create(guiY, "Objectives", window) guiY += button.HEIGHT * 2 appleTypesSprites, \ appleTypesButton = button.create(guiY, "Apple Types", window) #This is a list of sprites that have no purpose but to be shown, hence stored in a list #for ease of undrawing. sprites += objectivesSprites + controlsSprites + appleTypesSprites return sprites, controlsButton, objectivesButton, appleTypesButton
def displayMenu(guiCreateFunction=None): drawer.undrawList([titleText] + sprites) showMenu(window, control, apples, guiCreateFunction) if window.closed: return True drawer.drawList([titleText] + sprites, window) return False
def displayMenu(guiCreateFunction): drawer.undrawList(sprites + backButtonSprites) showMenu(window, control, apples, guiCreateFunction) if window.closed: return True drawer.drawList(sprites + backButtonSprites, window) return False
def runMenuState(window, control): '''Says it on the tin''' titleText = common.createTitle(common.GAME_NAME, window) sprites, \ playButton, \ howToPlayButton, \ highscoreButton, \ exitButton = createFrontMenuButtons(window) bg = common.createCenteredImage("menu_bg") bg.draw(window) menu_top = common.createCenteredImage("menu_top") menu_top.draw(window) apples = [] for i in range(50): addApple(apples, window) def displayMenu(guiCreateFunction=None): drawer.undrawList([titleText] + sprites) showMenu(window, control, apples, guiCreateFunction) if window.closed: return True drawer.drawList([titleText] + sprites, window) return False start = time.time() while control["state"] == states.STATE_MENU and not window.closed: key = common.getKeyPress(window) point = window.checkMouse() elapsed = common.calculateTime(start) if button.isButtonPressed(point, playButton, window): common.switchState(window, control, states.STATE_PLAYING) elif button.isButtonPressed(point, howToPlayButton, window): drawer.undrawList([titleText] + sprites) displayHowToPlayMenu(window, control, apples) if window.closed: break drawer.drawList([titleText] + sprites, window) elif button.isButtonPressed(point, highscoreButton, window): if displayMenu(highscores.createHighscoresDisplay): break elif button.isButtonPressed(point, exitButton, window): common.switchState(window, control, states.EXIT) updateApples(apples, window) #make it so the title is ALWAYS on front drawer.redrawSprite(menu_top, window) drawer.redrawList([titleText] + sprites, window) gfx.update(common.UPDATE_SPEED) drawer.undrawList([titleText, bg, menu_top] + sprites + apples)
def createTiles(window): y = BASE_HEIGHT + 50 tiles = [] active = [] for x in range(WINDOW_WIDTH // TILE_SIZE): tiles.append(gfx.Image(gfx.Point(x * TILE_SIZE + 25, y), "../res/tile.gif")) active.append(True) drawer.drawList(tiles, window) return tiles, active
def runGameOverState(window, control, score, elapsed): '''Runs after the player has run out of lives''' bg = common.createCenteredImage("menu_bg") bg.draw(window) overallScore = score * round(elapsed) messages = [ addMessage(window, "GAME OVER", 30, "red", reset=True, bold=True), addMessage(window, "Score: " + str(score)), addMessage(window, "Time: " + str(round(elapsed)) + " seconds"), addMessage(window, "Final Score: " + str(overallScore)) ] sprites, \ playAgainButton, \ submitScoreButton, \ exitToMenuButton = makeGameOverButtons(len(messages), window) sprites += messages scoreSubmitted = False while control["state"] is states.STATE_GAME_OVER and not common.shouldExit( window, control): mouseClick = window.checkMouse() if button.isButtonPressed(mouseClick, playAgainButton, window): common.switchState(window, control, states.STATE_PLAYING) elif button.isButtonPressed(mouseClick, submitScoreButton, window) and not scoreSubmitted: drawer.undrawList(sprites) submitScoreState(window, control, overallScore) if window.closed: break drawer.drawList(sprites, window) scoreSubmitted = True sprites[0].setFill("dim gray") sprites[1].setFill("gray") elif button.isButtonPressed(mouseClick, exitToMenuButton, window): common.switchState(window, control, states.STATE_MENU) gfx.update(common.UPDATE_SPEED) drawer.undrawList(sprites + [bg])
def createHighscoresDisplay(window): '''Creation of the GUI for the highscores screen''' highscores = getScoresList() sprites = [] #Create title bar sprites.append(common.createTitle("Highscores")) colours = ["gray90", "cornsilk4"] * (len(highscores) // 2 + 1) for i in range(len(highscores) + 1): rank = str(i) name = str(highscores[i - 1][0]) score = str(highscores[i - 1][1]) y = i * 20 + 100 + 10 createBackgroundRect(sprites, y, colours[i]) if i == 0: addHighscoreTitles(sprites, y) continue addField(sprites, name, rank, score, y) if i + 1 == 26: #Maximum of 25 highscore fields can be displayed break drawer.drawList(sprites, window) return sprites