def _doPost(self, dataObject): # The game creation should have no arguments. if self.arg is not None: return self._response({}, CODE.UNIMPLEMENTED) if "name" and "game_type_id" in dataObject: try: GTM = GameTypeMapper() if dataObject["game_type_id"] is not None and dataObject["game_type_id"].isdigit(): # Get the user by ID gametype = GTM.find(dataObject["game_type_id"]) if gametype is None: raise NotFound("The specified game type does not exist.") else: raise BadRequest("Argument provided for this game type is invalid.") GM = GameMapper() # Get the user by E-mail game = Game() game.setName(dataObject["name"]) game.setCreator(self.user) game.setGameType(gametype) GM.insert(game) return self._response(game.dict(3), CODE.CREATED) except mdb.DatabaseError, e: raise ServerError("Unable to search the user database (%s)" % e.args[1])
def main_menu(self, screen, font, mainClock): text1 = Figure() text2 = Figure() text3 = Figure() text4 = Figure() text5 = Figure() play = Game(0, 0) option = Options() click = False while True: screen.fill((0, 0, 0)) text1.draw_text('Main Menu', font, (255, 255, 255), screen, 20, 20) mx, my = pygame.mouse.get_pos() button_1 = pygame.Rect(50, 500, 200, 50) button_2 = pygame.Rect(50, 600, 200, 50) if button_1.collidepoint((mx, my)): if click: play.game(mainClock) if button_2.collidepoint((mx, my)): if click: option.options(screen, font, mainClock) pygame.draw.rect(screen, (255, 0, 0), button_1) pygame.draw.rect(screen, (255, 0, 0), button_2) text2.draw_text('Nom du Jeu', pygame.font.SysFont(None, 100), (255, 255, 255), screen, 60, 200) text3.draw_text('Play', pygame.font.SysFont(None, 50), (255, 255, 255), screen, 60, 510) text4.draw_text('Options', pygame.font.SysFont(None, 50), (255, 255, 255), screen, 60, 610) click = False for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() if event.type == KEYDOWN: if event.key == K_ESCAPE: pygame.quit() sys.exit() if event.type == MOUSEBUTTONDOWN: if event.button == 1: click = True pygame.display.update() mainClock.tick(60)
def _doPost(self, dataObject): # The game creation should have no arguments. if self.arg is not None: return self._response({}, CODE.UNIMPLEMENTED) if "name" and "game_type_id" in dataObject: try: GTM = GameTypeMapper() if dataObject["game_type_id"] is not None and dataObject[ "game_type_id"].isdigit(): # Get the user by ID gametype = GTM.find(dataObject["game_type_id"]) if gametype is None: raise NotFound( "The specified game type does not exist.") else: raise BadRequest( "Argument provided for this game type is invalid.") GM = GameMapper() # Get the user by E-mail game = Game() game.setName(dataObject["name"]) game.setCreator(self.user) game.setGameType(gametype) GM.insert(game) return self._response(game.dict(3), CODE.CREATED) except mdb.DatabaseError, e: raise ServerError("Unable to search the user database (%s)" % e.args[1])
def _doCreateObject(self, data): """Builds the game object given the draw data returned from the database query""" from Model.game import Game game_ = Game(data["id"]) # get creator User object umapper = UserMapper() game_.setCreator(umapper.find(data["creator"])) #query = "SELECT * FROM users WHERE id = %s" #params = (data["creator"],) #creator = DeferredUser(data["creator"], UserMapper, query, params) #game_.setCreator(creator) # Build the game type information gt_data = {} gt_data["id"] = data["game_type_id"] gt_data["name"] = data["game_type_name"] GTM = GameTypeMapper() gametype = GTM.createObject( gt_data ) # advantage is the object is added to the object watcher for future references print gametype print str(type(gametype)) game_.setGameType(gametype) # set the rest of the information game_.setName(data["name"]) game_.setTime(data["time"]) game_.setStartTime(data["start_time"]) game_.setEndTime(data["end_time"]) return game_
def _doCreateObject(self, data): """Builds the game object given the draw data returned from the database query""" from Model.game import Game game_ = Game(data["id"]) # get creator User object umapper = UserMapper() game_.setCreator(umapper.find(data["creator"])) #query = "SELECT * FROM users WHERE id = %s" #params = (data["creator"],) #creator = DeferredUser(data["creator"], UserMapper, query, params) #game_.setCreator(creator) # Build the game type information gt_data = {} gt_data["id"] = data["game_type_id"] gt_data["name"] = data["game_type_name"] GTM = GameTypeMapper() gametype = GTM.createObject(gt_data) # advantage is the object is added to the object watcher for future references print gametype print str(type(gametype)) game_.setGameType(gametype) # set the rest of the information game_.setName(data["name"]) game_.setTime(data["time"]) game_.setStartTime(data["start_time"]) game_.setEndTime(data["end_time"]) return game_
def launch(): # Creation d'un joueur au centre de la map player1 = Player(1, int(1024 / 2) - 40, int(768 / 2) - 40, 100) player_position = (player1.get_x(), player1.get_y()) quantitefuel = player1.get_fuel() #Creation d'une game game1 = Game(0, 0) # score et time #Creation plateforme plateformes = game1.generatePlateformes().copy() #Creation objet powerups = game1.generate_objet().copy() # Test des evenements pygame.init() screen = pygame.display.set_mode((1024, 768), RESIZABLE) # Background fond = pygame.image.load( "../Model/data/map_background.png").convert() #map jusqu'a 10000px defilmap = -14000 # Chargement et collage du personnage # convert alpha pour la transparance du png perso = pygame.image.load( "../Model/data/cosmonaut-idle-100.png") #image du perso de base background_objects = [[0.25, [120, 10, 70, 400]], [0.25, [280, 30, 40, 400]], [0.5, [30, 40, 40, 400]], [0.5, [130, 90, 100, 400]], [0.5, [300, 80, 120, 400]]] ## ici variables pour retenir en mémoire l’état des touches #variable deplacement droite = False gauche = False haut = False bas = False fall = True boost = False fuelHit = False niveauFall = 0 fallspeed = game1.get_diffculty_set() listekeypressed = [] fall = True # de base le perso chute #timeinsecond = int(time.time() % 60) timefuel = 0 nbboucle = 0 boucle = 0 true_scroll = [0, 0] launched = True powerup = False #powerup actif ou non propulsion = pygame.image.load("../Model/data/air_propulsion.png") estSurPlateforme = False new_game = True def crash(screen): crash = True while crash: text = pygame.font.Font('freesansbold.ttf', 75) carb = text.render('Game Over', True, (0, 0, 0)) screen.blit(carb, (295, 300)) for event in pygame.event.get(): # print(event) if event.type == pygame.KEYDOWN: crash = False pygame.display.flip() while launched: if (new_game): time_var = T.time() new_game = False fall = True # Pour le faire rechuter quand il quitte la plateforme for event in pygame.event.get(): if event.type == pygame.QUIT: launched = False elif event.type == pygame.KEYDOWN: #Si une touche est enfoncée listekeypressed.append( event.key) #insertion des touches enfoncées dans la liste if pygame.K_RIGHT in listekeypressed: perso = pygame.image.load( "../Model/data/cosmonaut-idle2-100.png") #Sprite droit droite = True if estSurPlateforme == True: perso = pygame.image.load( "../Model/data/cosmonaut-march-100.png") elif pygame.K_LEFT in listekeypressed: perso = pygame.image.load( "../Model/data/cosmonaut-idle-100-gauche.png") gauche = True if estSurPlateforme == True: perso = pygame.image.load( "../Model/data/cosmonaut-march-100-gauche.png") if pygame.K_UP in listekeypressed: perso = pygame.image.load( "../Model/data/cosmonaut-jump-wind-100-gauche.png") haut = True if estSurPlateforme == False: fall = True if pygame.K_LEFT in listekeypressed: perso = pygame.image.load( "../Model/data/cosmonaut-idle-100-gauche.png") elif pygame.K_RIGHT in listekeypressed: perso = pygame.image.load( "../Model/data/cosmonaut-idle2-100.png") else: perso = pygame.image.load( "../Model/data/cosmonaut-jump-100.png") elif pygame.K_DOWN in listekeypressed: perso = pygame.image.load( "../Model/data/cosmonaut-jump-100.png") bas = True elif event.type == pygame.KEYUP: #Si une touche est relachée if len(listekeypressed) != 0: listekeypressed.remove( event.key) ## supression de la touche relâchée if event.key == pygame.K_RIGHT: droite = False elif event.key == pygame.K_LEFT: gauche = False elif event.key == pygame.K_UP: haut = False elif event.key == pygame.K_DOWN: bas = False # calcul de la surface de l'image du player min_x = int(player1.get_x()) max_x = int(player1.get_x() + 65) min_y = int(player1.get_y()) max_y = int(player1.get_y() + 90) #Gestion des bords de l'ecran # Droite / Gauche if max_x >= 1060: droite = False elif min_x <= 0: gauche = False # Haut / Bas if min_y <= 5: haut = False elif max_y >= 768: launched = False file_highscore = open("../Model/highscore.txt", "a") file_highscore.write(str(game1.get_score()) + "\n") file_highscore.close() #pygame.mixer.init() #pygame.mixer.music.load('../Model/data/game_over.mp3') #pygame.mixer.music.play(0) effect = pygame.mixer.Sound('../Model/data/gameover.wav') effect.play() crash(screen) new_game = True # Gestion collision player-plateformes for plateforme in plateformes: # surface de la plateforme courante min_xplat = int(plateforme.get_x()) max_xplat = int(plateforme.get_x() + plateforme.get_long()) min_yplat = int(plateforme.get_y()) max_yplat = int(plateforme.get_y() + plateforme.get_larg()) if min_xplat <= max_x and min_x <= max_xplat and powerup == False: # Est sur la longueur de la plateforme if (max_yplat - 5) <= min_y <= (max_yplat + 5): # collision par le bas haut = False player_position = player1.movePositCourante( 0, fallspeed) # descends à la vitesse des plateformes if plateforme.get_type() == 'teleportation': effect = pygame.mixer.Sound( '../Model/data/telepotation2.wav') effect.play() player_position = player1.movePositTeleportation() if (min_yplat - 10) <= max_y <= (min_yplat + 10): # colisation par en haut if plateforme.get_type() == 'poison': launched = False file_highscore = open("../Model/highscore.txt", "a") file_highscore.write(str(game1.get_score()) + "\n") file_highscore.close() effect = pygame.mixer.Sound( '../Model/data/gameover.wav') effect.play() crash(screen) new_game = True elif plateforme.get_type() == 'teleportation': effect = pygame.mixer.Sound( '../Model/data/telepotation2.wav') effect.play() player_position = player1.movePositTeleportation() elif plateforme.get_type() == 'CarburantMoins': player1.remove_fuel() fuelHit = True bas = False fall = False player_position = player1.movePositCourante( 0, fallspeed) # descends à la vitesse des plateformes # Rechargement du fuel player1.add_fuel(0.2) quantitefuel = int(player1.get_fuel()) if min_y <= min_yplat and max_y >= max_yplat and powerup == False: # Est sur la largeur de la plateforme if (max_xplat - 5) <= min_x <= ( max_xplat + 5 ): # collision par la droite (petite marge pour eviter les bug de traversement) gauche = False if (min_xplat - 5) <= max_x <= (min_xplat + 5): # collision par la gauche droite = False if min_y <= min_yplat and max_y >= max_yplat and powerup == False and min_xplat <= max_x and min_x <= max_xplat: # Il est sur une plateforme fall = False estSurPlateforme = True else: estSurPlateforme = False # Re-collage du fond et du player defilmap += 1 # defilement de la map screen.blit(fond, (0, defilmap)) # recollage map # Re-collage defilmap += 1 #defilement de la map screen.blit(fond, (0, defilmap)) if defilmap == 0: screen.fill((0, 0, 0)) screen.blit(perso, player_position) if haut == True: #Affichage de la propulsion (rajouter le son de la propulsion ici) screen.blit(propulsion, ((min_x - 15), max_y)) # Fuel timefuel += 1 if ( timefuel % 20 ) == 0: #Retourne la duree depuis que pygame.init a été appeler en ms quantitefuel -= 1 #diminue de 1 le fuel à chaque boucle modulo 20 du timefuel player1.set_fuel(quantitefuel) if quantitefuel <= 0: launched = False file_highscore = open("../Model/highscore.txt", "a") file_highscore.write(str(game1.get_score()) + "\n") file_highscore.close() effect = pygame.mixer.Sound('../Model/data/gameover.wav') effect.play() crash(screen) new_game = True rect = pygame.Rect(740, 677, quantitefuel * 2, 25) pygame.draw.rect(screen, (255, 0, 0), rect) text = pygame.font.Font('freesansbold.ttf', 20) fuel = text.render('Carburant : {}'.format(int(player1.get_fuel())), True, (0, 0, 0)) screen.blit(fuel, (750, 680)) #Fuel reduit alert if fuelHit == True: text = pygame.font.Font('freesansbold.ttf', 85) carb = text.render('-75', True, (255, 0, 0)) screen.blit(carb, (900, 650)) fuelHit = False # Message alerte fuel if player1.get_fuel() <= 30: text = pygame.font.Font('freesansbold.ttf', 35) carb = text.render('Alerte ! Alerte ! Niveau carburant bas', True, (255, 0, 0)) screen.blit(carb, (195, 165)) # Score game1.set_time(int(pygame.time.get_ticks() / 1000)) #time in ms depuis pygame.init() if (timefuel % 50) == 0: # ajout de score vitesse de base game1.add_score(1) text = pygame.font.Font('freesansbold.ttf', 60) text2 = pygame.font.Font('freesansbold.ttf', 15) time_end = T.time() if niveauFall < 6: score = text.render('Score : {}'.format(game1.get_score()), True, (0, 0, 0)) time = text2.render( 'Temps : {} secondes'.format(int(time_end - time_var)), True, (0, 0, 0)) else: score = text.render('Score : {}'.format(game1.get_score()), True, (255, 255, 255)) time = text2.render( 'Temps : {} secondes'.format(int(time_end - time_var)), True, (255, 255, 255)) screen.blit(score, (15, 20)) screen.blit(time, (20, 70)) # Collage des plateformes sur l'ecran timesprite = 1000 for plateforme in plateformes: if plateforme.get_y() >= 0 and plateforme.get_y() <= 768: if (plateforme.get_type() == 'poison'): if plateforme.get_long() == 50: if (boucle % timesprite) == 0: pique = pygame.image.load( "../Model/data/plateformes/pike_50_1.png") else: pique = pygame.image.load( "../Model/data/plateformes/pike_50_2.png") elif plateforme.get_long() == 100: if (boucle % timesprite) == 0: pique = pygame.image.load( "../Model/data/plateformes/pike_100_1.png") else: pique = pygame.image.load( "../Model/data/plateformes/pike_100_2.png") elif plateforme.get_long() == 150: if (boucle % timesprite) == 0: pique = pygame.image.load( "../Model/data/plateformes/pike_150_1.png") else: pique = pygame.image.load( "../Model/data/plateformes/pike_150_2.png") screen.blit(pique, (plateforme.get_x(), plateforme.get_y())) elif (plateforme.get_type() == 'teleportation'): if plateforme.get_long() == 50: if (boucle % timesprite) == 0: portal = pygame.image.load( "../Model/data/plateformes/portal_50_1.png") else: portal = pygame.image.load( "../Model/data/plateformes/portal_50_2.png") elif plateforme.get_long() == 100: if (boucle % timesprite) == 0: portal = pygame.image.load( "../Model/data/plateformes/portal_100_1.png") else: portal = pygame.image.load( "../Model/data/plateformes/portal_100_2.png") elif plateforme.get_long() == 150: if (boucle % timesprite) == 0: portal = pygame.image.load( "../Model/data/plateformes/portal_150_1.png") else: portal = pygame.image.load( "../Model/data/plateformes/portal_150_3.png") screen.blit(portal, (plateforme.get_x(), plateforme.get_y())) elif (plateforme.get_type() == 'CarburantMoins'): if plateforme.get_long() == 50: if (boucle % timesprite) == 0: fire = pygame.image.load( "../Model/data/plateformes/fire_50_1.png") else: fire = pygame.image.load( "../Model/data/plateformes/fire_50_2.png") elif plateforme.get_long() == 100: if (boucle % timesprite) == 0: fire = pygame.image.load( "../Model/data/plateformes/fire_100_1.png") else: fire = pygame.image.load( "../Model/data/plateformes/fire_100_2.png") elif plateforme.get_long() == 150: if (boucle % timesprite) == 0: fire = pygame.image.load( "../Model/data/plateformes/fire_150_1.png") else: fire = pygame.image.load( "../Model/data/plateformes/fire_150_2.png") screen.blit(fire, (plateforme.get_x(), plateforme.get_y())) else: if plateforme.get_long() == 50: cloud = pygame.image.load( "../Model/data/plateformes/cloud_50.png") elif plateforme.get_long() == 100: cloud = pygame.image.load( "../Model/data/plateformes/cloud_100.png") elif plateforme.get_long() == 150: cloud = pygame.image.load( "../Model/data/plateformes/cloud_150.png") screen.blit(cloud, (plateforme.get_x(), plateforme.get_y())) #Chute des plateformes if plateforme.get_y() <= 800: plateforme.set_position(0, fallspeed) # screen.blit(perso, player_position) #Augmentation de difficulte if timefuel % 500 == 0: niveauFall += 1 fallspeed += 0.25 print(niveauFall) #Power up for objet in powerups: if objet.get_y() >= 0 and objet.get_y() <= 768: if (objet.get_name() == "carburant"): # pygame.draw.circle(screen, (255, 0, 0), (objet.get_x(), objet.get_y()), 40, False) fuelimg = pygame.image.load("../Model/data/fuel.png") screen.blit(fuelimg, (objet.get_x(), objet.get_y())) elif (objet.get_name() == "bouteille"): # pygame.draw.circle(screen, (128, 128, 128), (objet.get_x(), objet.get_y()), 20) bottleimg = pygame.image.load( "../Model/data/oxygen_tank.png") screen.blit(bottleimg, (objet.get_x(), objet.get_y())) # Verif si le player est sur le power up #surface de l'objet min_yobj = int(objet.get_y() - 20) # 20 == rayon du cercle max_yobj = int(objet.get_y() + 20) min_xobj = int(objet.get_x() - 20) max_xobj = int(objet.get_x() + 20) if min_yobj <= max_y and max_yobj >= min_y: #sur la largeur de l'objet if min_xobj <= max_x and max_xobj >= min_x: #Sur la longueur de l'objet # L'astronaute est sur l'objet if (objet.get_name() == "carburant" ): #Action des powerups effect = pygame.mixer.Sound( '../Model/data/bouteille.wav') effect.play() player1.add_fuel(objet.get_quantite()) quantitefuel = player1.get_fuel() if (objet.get_name() == "bouteille"): effect = pygame.mixer.Sound( '../Model/data/boost2.wav') effect.play() fallspeed = fallspeed + 4 fall = False powerup = True game1.add_score(40) nbboucle = boucle powerups.remove(objet) #Desactivation de l'effet du powerup if nbboucle <= ( boucle - 150 ) and powerup == True: # On remet la vitesse normal apres 200 boucles fallspeed = fallspeed - 4 fall = True powerup = False #chute des objets if objet.get_y() <= 800: objet.set_position(0, fallspeed) ## Traitement des deplacements # Droite / Gauche if droite: player_position = player1.movePositCourante(3.75, 0) player_position = player1.movePositCourante(0, 0.25) # chute elif gauche: player_position = player1.movePositCourante(-3.75, 0) player_position = player1.movePositCourante(0, 0.25) # chute # Haut / Bas if haut: if niveauFall == 0 or niveauFall == 1: player_position = player1.movePositCourante(0, -0.50) player_position = player1.movePositCourante(0, -1.5) player_position = player1.movePositCourante(0, -3.5) elif niveauFall == 2 or niveauFall == 3: player_position = player1.movePositCourante(0, -1.5) player_position = player1.movePositCourante(0, -2.5) player_position = player1.movePositCourante(0, -4.25) else: player_position = player1.movePositCourante(0, -2.25) player_position = player1.movePositCourante(0, -2.75) player_position = player1.movePositCourante(0, -4.75) elif bas: player_position = player1.movePositCourante(0, 5) # Chute if fall: if niveauFall == 0: player_position = player1.movePositCourante(0, 2.5) elif niveauFall == 1: player_position = player1.movePositCourante(0, 2.75) elif niveauFall == 2: player_position = player1.movePositCourante(0, 3) elif niveauFall == 3: player_position = player1.movePositCourante(0, 3.25) elif niveauFall == 4: player_position = player1.movePositCourante(0, 3.50) elif niveauFall == 5: player_position = player1.movePositCourante(0, 3.75) elif niveauFall == 6: player_position = player1.movePositCourante(0, 4) elif niveauFall == 7: player_position = player1.movePositCourante(0, 4.25) elif niveauFall == 8: player_position = player1.movePositCourante(0, 5.50) elif niveauFall > 8: player_position = player1.movePositCourante(0, 6) # recollage du pers screen.blit(perso, player_position) # Rafraichissement pygame.display.flip() boucle += 1