class MapWindow: def __init__(self): self.caption = None self.game_map = GameMap() def set_caption(self, language): pg.font.init() font = pg.font.SysFont('Arial', 35, True) if language == 'English': text = eng.ENG_MAPWINDOW_CAPTION else: text = rus.RUS_MAPWINDOW_CAPTION self.caption = font.render(text, True, WHITE) def reset_data(self): self.game_map.reset() def update(self, dt): self.game_map.update(dt) def draw(self, screen): screen.blit(self.caption, (365, 110)) self.game_map.draw(screen)
def scnene_game( gameDisplay ): # create game object # map play_map = GameMap(res.position_game_map, res.size_game_map, res.color_map, res.size_grid, res.game_map_grids, res.width_game_map_wall, res.color_wall) play_map.kit_reset( res.kit_max, res.kit_freq ) play_map.kit_gen() play_map.kit_gen() # player arrow arrow_p1 = Arrow(res.size_arrow, play_map.grid_center(res.grid_position_start_p1), (1,0), 2, res.speed_max, res.color_p1) arrow_p2 = Arrow(res.size_arrow, play_map.grid_center(res.grid_position_start_p2), (-1,0), 2, res.speed_max, res.color_p2) # player panel bar_p1 = PowerBar( res.position_panel_p1+res.size_panel_p1, res.speed_max, res.color_p1, (0,0,0) ) bar_p2 = PowerBar( res.position_panel_p2+res.size_panel_p2, res.speed_max, res.color_p2, (0,0,0) ) panel_p1 = PlayerPanel( res.position_panel_p1, res.size_panel_p1, res.color_p1 ) panel_p1.set_item_slot( res.slot_layout ) panel_p1.set_player( arrow_p1 ) panel_p1.set_power_bar( bar_p1 ) panel_p2 = PlayerPanel( res.position_panel_p2, res.size_panel_p2, res.color_p2 ) panel_p2.set_item_slot( res.slot_layout ) panel_p2.set_player( arrow_p2 ) panel_p2.set_power_bar( bar_p2 ) # add object to game gameArrowList = [] gameArrowList.append( ArrowInGame(arrow_p1) ) gameArrowList.append( ArrowInGame(arrow_p2) ) for gameArrow in gameArrowList: gameArrow.set_grid_position( play_map.detect_grid(gameArrow.arrow.position) ) # register key done event key_control = { res.control_p1['right']:lambda :game_map_turn_correct(arrow_p1, play_map, (1,0)), res.control_p1['left']: lambda :game_map_turn_correct(arrow_p1, play_map, (-1,0)), res.control_p1['up']: lambda :game_map_turn_correct(arrow_p1, play_map, (0,-1)), res.control_p1['down']: lambda :game_map_turn_correct(arrow_p1, play_map, (0,1)), res.control_p1['kit']: lambda :arrow_p1.kit_invoke(), res.control_p2['right']:lambda :game_map_turn_correct(arrow_p2, play_map, (1,0)), res.control_p2['left']: lambda :game_map_turn_correct(arrow_p2, play_map, (-1,0)), res.control_p2['up']: lambda :game_map_turn_correct(arrow_p2, play_map, (0,-1)), res.control_p2['down']: lambda :game_map_turn_correct(arrow_p2, play_map, (0,1)), res.control_p2['kit']: lambda :arrow_p2.kit_invoke() } game_over = False while not game_over: # handle event for event in pygame.event.get(): if event.type == pygame.QUIT: return False if event.type == pygame.KEYDOWN: for key in key_control: if key == event.key: key_control[key]() # print(event) # raise game event if (game_arrow_encounter(arrow_p1, arrow_p2) == res.game_brokeback): return True game_arrow_map_event( gameArrowList, play_map ) # progress game play_map.kit_progress() arrow_p1.progress() game_map_bump_correct( arrow_p1, play_map ) arrow_p2.progress() game_map_bump_correct( arrow_p2, play_map ) # render gameDisplay.fill(res.color_background) play_map.draw( gameDisplay ) panel_p1.draw( gameDisplay ) panel_p2.draw( gameDisplay ) arrow_p1.draw( gameDisplay ) arrow_p2.draw( gameDisplay ) pygame.display.update() res.clock.tick( res.tick_game )
class GameCanvas(tk.Canvas, Oriented, Positionable, Rectangular, KeyBoundWidget, MouseBoundWidget): def __init__(self, master, **kwargs): super().__init__(master, **kwargs) Oriented.__init__(self, 'north') Rectangular.__init__(self, (self.winfo_reqwidth(), self.winfo_reqheight())) Positionable.__init__(self, (0, 0)) self.images = {} self.sprites = {} self.key_pressed = False self.map = GameMap(GameMapConfig.size, self) self.map.place_rectangle(pos=(0, 0), dim=(500, 500), fill='green') self.map.draw() def __repr__(self): return f'{self.__class__.__name__}()' def init_key_binds(self): self.bind(KeyBindsConfig.character_move_north, lambda e: self.move_sprite('peasant', 'north')) self.bind(KeyBindsConfig.character_move_west, lambda e: self.move_sprite('peasant', 'west')) self.bind(KeyBindsConfig.character_move_south, lambda e: self.move_sprite('peasant', 'south')) self.bind(KeyBindsConfig.character_move_east, lambda e: self.move_sprite('peasant', 'east')) def init_mouse_binds(self): self.bind('<Enter>', lambda e: self.focus_set()) def save_image(self, name, image): self.images[name] = image def save_sprite(self, sprite): self.sprites[sprite.name] = sprite def move(self, direction): self.direction = direction if direction == 'north': self.position = (self.x, self.y - self.sprites['peasant'].speed) elif direction == 'west': self.position = (self.x - self.sprites['peasant'].speed, self.y) elif direction == 'south': self.position = (self.x, self.y + self.sprites['peasant'].speed) elif direction == 'east': self.position = (self.x + self.sprites['peasant'].speed, self.y) self.map.redraw() def move_sprite(self, name, direction): self.move(direction) self._lock_key_press(lambda: self.sprites[name].move(direction)) def _lock_key_press(self, command): ' Internal method to stop key events from spamming. ' if not self.key_pressed: self.key_pressed = True command() self.key_pressed = False
class Game(object): def __init__(self): # Configfile try: config = configparser.ConfigParser() config.read('config.cfg') default = config['DEFAULT'] self.name = default['name'] self.width = int(default['width']) self.height = int(default['height']) self.tps = int(default['tps']) filenames = config['FILENAMES'] self.background = pygame.image.load(os.path.join("game_assets", filenames['background'])) except KeyError: create_config() Game() # Initialization pygame.mixer.pre_init(44100, -16, 2, 512) pygame.init() self.resolution = (self.width, self.height) self.screen = pygame.display.set_mode(self.resolution) self.tps_clock = pygame.time.Clock() self.tps_delta = 0.0 self.game_map = GameMap(self) self.player = Player(self) self.magic_ball = MagicBall(self) # Sounds pygame.mixer.music.load('game_assets/sounds/game_sound.wav') pygame.mixer.music.set_volume(0.3) pygame.mixer.music.play(-1) # Run main loop self.run() def run(self): while True: # Handle events for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit(0) elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: sys.exit(0) # Ticking self.tps_delta += self.tps_clock.tick() / 1000.0 while self.tps_delta > 1 / self.tps: self.tick() self.tps_delta -= 1 / self.tps # Drawing self.draw() def tick(self): # self.game_map.tick(self.player.camera_scroll) self.player.tick() self.magic_ball.tick() def draw(self): self.screen.blit(self.background, (0, 0)) self.game_map.draw(self.player.camera_scroll) # tutaj trzeba przekazac wartosc self.player.camera_scroll self.player.draw() self.magic_ball.draw() pygame.display.flip()