from game_util_objects import Player from games.crawler.scripts.crawler import ( DIR_EAST, DIR_NAMES, DIR_NORTH, DIR_SOUTH, DIR_WEST, LEFT_TURN_DIRS, OPPOSITE_DIRS, RIGHT_TURN_DIRS, ) class CrawlPlayer(Player): should_save = False # we are spawned by maze generate_art = True art_width, art_height = 1, 1 art_charset, art_palette = "jpetscii", "c64_pepto" art_off_pct_x, art_off_pct_y = 0, 0 # bespoke grid-based movement method physics_move = False handle_key_events = True view_range_tiles = 8 fg_color = 8 # yellow dir_chars = {DIR_NORTH: 147, DIR_SOUTH: 163, DIR_EAST: 181, DIR_WEST: 180} def pre_first_update(self): Player.pre_first_update(self) # top-down facing self.direction = DIR_NORTH self.maze.update_tile_visibilities() self.art.set_tile_at(0, 0, 0, 0, self.dir_chars[self.direction], self.fg_color) def handle_key_down(self, key, shift_pressed, alt_pressed, ctrl_pressed): # turning? if key == "left": self.direction = LEFT_TURN_DIRS[self.direction] elif key == "right": self.direction = RIGHT_TURN_DIRS[self.direction] # moving? elif key == "up" or key == "down": x, y = self.maze.get_tile_at_point(self.x, self.y) if key == "up": new_x = x + self.direction[0] new_y = y + self.direction[1] else: new_x = x - self.direction[0] new_y = y - self.direction[1] # is move valid? if self.maze.is_tile_solid(new_x, new_y): # TEMP negative feedback dir_name = ( DIR_NAMES[self.direction] if key == "up" else DIR_NAMES[OPPOSITE_DIRS[self.direction]] ) self.app.log("can't go {}!".format(dir_name)) else: self.x, self.y = self.maze.x + new_x, self.maze.y - new_y # update art to show facing self.art.set_char_index_at(0, 0, 0, 0, self.dir_chars[self.direction]) # update maze tiles self.maze.update_tile_visibilities()