class WinMenu(object): """docstring for WinMenu.""" def __init__(self, main, screen): """"Dans ce constructeur on initialise les variables de classe et on appelle la méthode new(self)""" self.main = main self.screen = screen self.newUpdate = False self.new() def new(self): """cette méthode sert a ajouter les bouttons et textes au menu en fonction des variables de classe dans le constructeur""" self.winMenu = Menu(self.screen, self.main, 7).addText('Win', 60) self.winMenu.addButton('Menu', 'm') """les 3 méthodes suivantes sont les méthodes dans lesquelles les tacks sont gérés, ces méthodes sont appellée depuis la méthode run du main""" def update(self): if self.newUpdate: self.main.effects_sounds['victory'].play() self.newUpdate = not self.newUpdate def draw(self): """cette méthode permet de placer les element a render""" bg = self.main.background_image_b if self.main.getTask( 'settingsMenu')[2].biere else self.main.background_image self.screen.blit(bg, (0, 0)) self.winMenu.render() def events(self, event): """cette méthode gere les input du clavier et les traite en conséquence""" game = False res = self.winMenu.update(event) if res == 'm': self.main.change = 'mainMenu'
class DifficultyMenu(object): """docstring for DifficultyMenu. Cette classe est le menu de gestion des difficultée il est """ def __init__(self, main, screen): """"Dans ce constructeur on initialise les variables de classe et on appelle la méthode new(self)""" self.main = main self.screen = screen self.difficultyLvl = 0 self.deja = True self.new() def new(self): """cette méthode sert a ajouter les bouttons et textes au menu en fonction des variables de classe dans le constructeur (difficltyLVL)""" if self.deja: self.difficultyLvl = self.main.getTask('scoreMenu')[2].bottle self.deja = not self.deja self.difficultyMenu = Menu(self.screen, self.main, 7, 2).addText('Difficulty', 60).addButton('Easy', 'e', GREEN if self.difficultyLvl >= 0 else BLACK).addButton('Medium', 'm', GREEN if self.difficultyLvl >= 1 else BLACK).addButton('Hard', 'h', GREEN if self.difficultyLvl >= 2 else BLACK).addButton('Extreme', 'ex', GREEN if self.difficultyLvl >= 3 else BLACK).addButton('Armand', 'a', GREEN if self.difficultyLvl >= 4 else BLACK).addButton('Menu', 'menu') """les 3 méthodes suivantes sont les méthodes dans lesquelles les tacks sont gérés, ces méthodes sont appellée depuis la méthode run du main""" def update(self): pass def draw(self): """cette méthode permet de placer les element a render""" bg = self.main.background_image_b if self.main.getTask('settingsMenu')[2].biere else self.main.background_image self.screen.blit(bg, (0, 0)) self.difficultyMenu.render() def events(self, event): """cette méthode gere les input du clavier et les traite en conséquence""" game = False if event.type == pygame.KEYDOWN: if event.key == pygame.K_F2: self.difficultyLvl = 4 self.new() res = self.difficultyMenu.update(event) if res == 'menu': self.main.change = 'mainMenu' elif res == 'e' and self.difficultyLvl >= 0: game = Game(self.main, self.screen, self, 0) elif res == 'm' and self.difficultyLvl >= 1: game = Game(self.main, self.screen, self, 1, column = 4, row = 4) elif res == 'h' and self.difficultyLvl >= 2: game = Game(self.main, self.screen, self, 2, column = 5, row = 5) elif res == 'ex' and self.difficultyLvl >= 3: game = Game(self.main, self.screen, self, 3, column = 6, row = 6, colors = 7) elif res == 'a' and self.difficultyLvl >= 4: game = Game(self.main, self.screen, self, 4, column = 7, row = 6, colors = 7) if res == 'e' or res == 'm' or res == 'h' or res == 'ex' or res == 'a': if game: self.main.getTask('game')[2] = game self.main.change = 'game'
class GameModeMenu(object): """docstring for GameModeMenu.""" def __init__(self, main, screen): """"Dans ce constructeur on initialise les variables de classe et on appelle la méthode new(self)""" self.main = main self.screen = screen self.colorMode = False self.sandbox = False self.new() def new(self): """cette méthode sert a ajouter les bouttons et textes au menu en fonction des variables de classe dans le constructeur""" self.gameModeMenu = Menu(self.screen, self.main, 6).addText('Game mode', 60) self.gameModeMenu.addButton('1 player', 'v2') if self.sandbox: self.gameModeMenu.addButton('Sandbox', 'v').addText('', 0) else: self.gameModeMenu.addButton('VS: IA', 'v') if self.colorMode: self.gameModeMenu.addButton('MultiColor: On', 'm') else: self.gameModeMenu.addButton('MultiColor: Off', 'm') self.gameModeMenu.addButton('Menu', 'menu') """les 3 méthodes suivantes sont les méthodes dans lesquelles les tacks sont gérés, ces méthodes sont appellée depuis la méthode run du main""" def update(self): pass def draw(self): """cette méthode permet de placer les element a render""" bg = self.main.background_image_b if self.main.getTask( 'settingsMenu')[2].biere else self.main.background_image self.screen.blit(bg, (0, 0)) self.gameModeMenu.render() def events(self, event): """cette méthode gere les input du clavier et les traite en conséquence""" res = self.gameModeMenu.update(event) if res == 'menu': self.main.change = 'mainMenu' elif res == 'm': self.colorMode = not self.colorMode self.new() elif res == 'v': self.sandbox = not self.sandbox self.new()
class RuleMenu(object): """docstring for RuleMenu.""" def __init__(self, main, screen): """"Dans ce constructeur on initialise les variables de classe et on appelle la méthode new(self)""" self.main = main self.screen = screen self.new() def new(self): """cette méthode sert a ajouter les bouttons et textes au menu en fonction des variables de classe dans le constructeur""" self.ruleMenu = Menu(self.screen, self.main, 16)\ .addText('Rules', 60)\ .addText("")\ .addText("")\ .addText("Masterbeer is a game whose goal is to knock out the computer or the opponent (who will be representedby a bar pillar", 20)\ .addText("in history) by making him swallow as much beer as possible. To do so, the player (s) must try to find the secret", 20)\ .addText("combination of the opponent's different beer caps. The closer you get to the correct answer and the higher the dose of beer,", 20)\ .addText("the further you go and the smaller it will be. The game has two game modes, a single player mode where the player’s", 20)\ .addText("objective will be to challenge the biggest drinkers to get one of the different exotic beers over the levels which", 20)\ .addText("will increase in difficulty to collect them. As well as a two players mode which will consist in finding the secret", 20)\ .addText("combination before the other player, the number of beer busses is then counted for the two players for the winner.", 20)\ .addText("Finding the combination directly wins the game and suddenly make the loser drink", 20)\ .addText("", 20)\ .addText("")\ .addText("")\ .addButton('Menu', 'm') """les 3 méthodes suivantes sont les méthodes dans lesquelles les tacks sont gérés, ces méthodes sont appellée depuis la méthode run du main""" def update(self): pass def draw(self): """cette méthode permet de placer les element a render""" bg = self.main.background_image_b if self.main.getTask('settingsMenu')[2].biere else self.main.background_image self.screen.blit(bg, (0, 0)) self.ruleMenu.render() def events(self, event): """cette méthode gere les input du clavier et les traite en conséquence""" res = self.ruleMenu.update(event) if res == 'm': self.main.change = 'mainMenu'
class ScoreMenu(object): """docstring for ScoreMenu.""" def __init__(self, main, screen): """"Dans ce constructeur on initialise les variables de classe et on appelle la méthode new(self)""" self.main = main self.screen = screen self.start = time.time() self.file = "./score.txt" self.file2 = "./bottle.txt" self.score = 0 self.score = self.read_file(self.file) self.bottle = 0 self.bottle = self.read_file(self.file2) self.new() def addScore(self, i = 1): self.score += i self.new() self.write_file() def addBottle(self, i = 1): if self.bottle + i == 6: return else: self.bottle += i self.new() self.write_file() def write_file(self): prev = self.read_file(self.file) if prev < self.score: with open(self.file, 'w') as fp: fp.write(str(self.score)) with open(self.file2, 'w') as fp: fp.write(str(self.bottle)) def read_file(self, file): with open(file) as fp: score = int(fp.read()) return score def new(self): """cette méthode sert a ajouter les bouttons et textes au menu en fonction des variables de classe dans le constructeur""" self.scoreMenu = Menu(self.screen, self.main, 6).addText('High score', 60).addText(str(self.score), 40).addText('Special unlock', 50).addText('').addText('').addButton('Menu', 'm') """les 3 méthodes suivantes sont les méthodes dans lesquelles les tacks sont gérés, ces méthodes sont appellée depuis la méthode run du main""" def update(self): pass def draw(self): """cette méthode permet de placer les element a render""" bg = self.main.background_image_b if self.main.getTask('settingsMenu')[2].biere else self.main.background_image self.screen.blit(bg, (0, 0)) for i in range(self.bottle): self.screen.blit(self.main.bottle[i], ((((WIDTH - 200) //4) + i * ((WIDTH - 200) //4)) - 150, 320)) self.scoreMenu.render() def events(self, event): """cette méthode gere les input du clavier et les traite en conséquence""" res = self.scoreMenu.update(event) if res == 'm': self.main.change = 'mainMenu'
class MainMenu(object): """docstring for MainMenu. Cette classe est la classe responsable de la creation et personnalisatioon du mainMenu""" def __init__(self, main, screen): """"Dans ce constructeur on initialise les variables de classe et on appelle la méthode new(self)""" self.main = main self.screen = screen self.new() #handles the falling pawn anim self.isPawnFalling = False self.fallingPawnX = 0 self.fallingPawnY = -80 self.falling = self.main.falling self.currentFallingPawn = self.falling[0] self.currentFalling = 0 def new(self): """cette méthode sert a ajouter les bouttons et textes au menu en fonction des variables de classe dans le constructeur""" self.falling = self.main.falling_b if self.main.getTask( 'settingsMenu')[2].biere else self.main.falling self.currentFallingPawn = self.falling[0] self.menu = Menu(self.screen, self.main, 7) self.menu.addText('MasterBeer', 60) self.menu.addButton('Play', 'p').addButton('Game Mode', 'o').addButton( 'Settings', 's').addButton('Rules', 'r').addButton('High score', 'h').addButton('Quit', 'q') """les 3 méthodes suivantes sont les méthodes dans lesquelles les tacks sont gérés, ces méthodes sont appellée depuis la méthode run du main""" def update(self): pass def draw(self): """cette méthode permet de placer les element a render""" bg = self.main.background_image_b if self.main.getTask( 'settingsMenu')[2].biere else self.main.background_image self.screen.blit(bg, (0, 0)) self.drawFallingPawn() self.menu.render() def events(self, event): """cette méthode gere les input du clavier et les traite en conséquence""" res = self.menu.update(event) if res == 'q': self.main.running = False elif res == 'p': self.main.change = 'difficultyMenu' elif res == 'o': self.main.change = 'gameModeMenu' elif res == 'h': self.main.change = 'scoreMenu' elif res == 'r': self.main.change = 'ruleMenu' elif res == 's': self.main.change = 'settingsMenu' """les 3 prochaines méthodes gèrent la création et animation de la bille qui tombe dans le menu""" def handleFallingPawnSpawn(self): """cette méthode crée une bille a positionner si il y en a pas encore (il alterne entre rouge et blanc) et la positionne, si il y a déja une bille il appelle la méthode fallingPawnUpdatePos()""" if not self.isPawnFalling: if self.currentFalling == 12: #len liste -1 self.currentFallingPawn = self.falling[0] self.currentFalling = 0 else: self.currentFallingPawn = self.falling[self.currentFalling + 1] self.currentFalling += 1 self.fallingPawnX = random.randint(1, WIDTH - 81) self.fallingPawnY = -80 self.isPawnFalling = True else: self.fallingPawnUpdatePos() def fallingPawnUpdatePos(self): """cette méthode rajoute 2 de coord y a la pos de la bille (ca donne un illusion d'animation) . Si la bille n'est plus du tout sur l'écran alors on set isPawnFalling a false""" if self.fallingPawnY < HEIGHT + 80: self.fallingPawnY = self.fallingPawnY + 4 else: self.isPawnFalling = False def drawFallingPawn(self): """c'est cette méthode qui update sur l'écran la position de bille avec les paramètres fallingPawnX et Y""" self.handleFallingPawnSpawn() self.screen.blit(self.currentFallingPawn, (self.fallingPawnX, self.fallingPawnY))