def play_game(level, life_num): ''' Here is the play_game function''' # -------- SET LEVEL DIFFICULTY ----------- # level = input("How many ennemies (0 to 10) ? ") # while int(level) not in range(11): # level = input("Ennemies must be between 0 and 10 : ") Sprite.LEVEL = int(level) # from 0 to 10 # -------- INITIALIZE ----------- # DEFINE MAP map_game = Map('structures/Structure' + str(level) + '.csv') # OPEN A NEW WINDOW size = (15 * map_game.SPRITE_WIDTH, 15 * map_game.SPRITE_WIDTH) screen = py.display.set_mode(size) py.display.set_caption("Mac Gyver escapes") # CLEAR THE SCREEN TO black. black = (0, 0, 0) white = (255, 255, 255) screen.fill(black) # DRAW MAP WITH TILES tiles = Sprite('floor-tiles-20x20', map_game, (5, 0), 20) map_game.draw(tiles, screen) font = py.font.Font('ressource/ARCADECLASSIC.ttf', 25) level_text = font.render('L ' + str(level), 0, white) level_text_rect = level_text.get_rect() # INITIALIZE PERSONS ON THE MAP macgyver = Person('macgyver', map_game) guardian = Person('guardian', map_game) ennemies = [] ennemies_images = Sprite('personnages', map_game, (0, 0), 32).surfs for i in range(len(ennemies_images)): ennemy = Person('ennemy', map_game) while ennemy.distance( macgyver) <= 1: # NOT TO LOOSE AT THE BEGINNING OF GAME ennemy = Person('ennemy', map_game) ennemy.image = ennemies_images[i] ennemies.append(ennemy) # INITIALIZE OBJECTS ON THE MAP objects = Objects(map_game) objects_pos = [object.position for object in objects.list] # THE LOOP WILL CARRY ON UNTIL THE USER EXIT THE GAME. carry_on = True # WHILE NOT QUIT playing = True # WHILE NOT WIN AND NOT LOOSE update = True # WHEN KEY PRESSED win = False loose = False # THE CLOCK WILL BE USED TO CONTROL HOW FAST THE SCREEN UPDATES clock = py.time.Clock() py.key.set_repeat(400, 30) # ----------------------------------- MAIN PROGRAM LOOP ----------- while carry_on: key_pressed = 0 for event in py.event.get(): # USER DID SOMETHING if event.type == py.QUIT or py.key.get_pressed()[ py.K_ESCAPE]: # IF USER CLICKED CLOSE carry_on = False # FLAG THAT WE ARE DONE SO WE EXIT THIS LOOP return 'quit' # LISTEN FOR PRESSED KEY if event.type == py.KEYDOWN: key_pressed = event.key update = True if win: return 'win' if loose: return 'loose' # ------------------------------- EVENTS ----- if update: # MOVE ENNEMIES ON THE MAP for ennemy in ennemies: (x_en, y_en) = ennemy.position seed(datetime.now()) ennemy_move = choice( [py.K_UP, py.K_DOWN, py.K_RIGHT, py.K_LEFT]) ennemy.move(ennemy_move, map_game) # UPDATE LAST POSITION tiles.draw_sprite(map_game.decoration[(x_en, y_en)], screen, x_en * map_game.SPRITE_WIDTH, y_en * map_game.SPRITE_WIDTH) # MOVE MACGYVER ON THE MAP (x_mac1, y_mac1) = macgyver.position if playing: macgyver.move(key_pressed, map_game) # UPDATE LAST POSITION tiles.draw_sprite(map_game.decoration[(x_mac1, y_mac1)], screen, x_mac1 * map_game.SPRITE_WIDTH, y_mac1 * map_game.SPRITE_WIDTH) # ----------------------------- DRAWING CODE GOES HERE ----- # DRAW OBJECT ON THE MAP for stuff in objects.list: stuff.draw_object(screen, stuff.position[0] * map_game.SPRITE_WIDTH, stuff.position[1] * map_game.SPRITE_WIDTH) # REDRAW PERSONS guardian.draw_person(screen, guardian.position[0] * map_game.SPRITE_WIDTH, guardian.position[1] * map_game.SPRITE_WIDTH) macgyver.draw_person(screen, macgyver.position[0] * map_game.SPRITE_WIDTH, macgyver.position[1] * map_game.SPRITE_WIDTH) for ennemy in ennemies: ennemy.draw_person(screen, ennemy.position[0] * map_game.SPRITE_WIDTH, ennemy.position[1] * map_game.SPRITE_WIDTH) # REDRAW LIVES & LEVEL heart = py.transform.scale(py.image.load('ressource/heart.png'), (int(map_game.SPRITE_WIDTH / 2), int(map_game.SPRITE_WIDTH / 2))) for i in range(life_num): screen.blit(heart, (20 * i + 10, 5)) screen.blit(level_text, (screen.get_width() - level_text_rect.width - 10, 5)) # MAC GYVER TAKE AN OBJECT ON THE MAP if macgyver.position in objects_pos: # GET INDEX OF OBJECT object_found_ind = objects_pos.index(macgyver.position) # CLEAR POSITION ON THE MAP del objects_pos[object_found_ind] # CLEAR OBJECT FROM OBJECTS LIST del objects.list[object_found_ind] # COMPUTE DISTANCE FROM ENNEMIES dist_from_ennemies = [ macgyver.distance(ennemy) for ennemy in ennemies ] dist_from_ennemies.append(macgyver.distance(guardian)) # MAC GYVER WIN OR DIE if min(dist_from_ennemies) <= 1.0: playing = False if objects.list == [] and macgyver.distance(guardian) == 1: py.display.set_caption("IT'S A WIN!") end_print('you_win', 'Press any key to continue', screen) win = True else: if life_num == 1: message = 'GAME OVER' else: message = 'Press any key to continue' py.display.set_caption("YOU DIE!") end_print('you_lose', message, screen) loose = True # --- GO AHEAD AND UPDATE THE SCREEN WITH WHAT WE'VE DRAWN. --- py.display.flip() update = False # --- LIMIT TO 60 FRAMES PER SECOND --- clock.tick(60)