def step(self, players, delta, timestamp): if len(players) == 0: return None if self.target is None: self.target = players.keys()[int(random.random() * len(players.keys()))] if self.target not in players or players[self.target].health <= 0: self.target = None return None self.rotate(vector=(players[self.target].x, players[self.target].y)) GameObject.move(self, angle=self.angle, scale=self.SPEED*delta) if self.next_shot < timestamp: self.next_shot = timestamp + self.FIRE_PERIOD dist = self.size + self.FIRE_DIST + Bullet.SIZE bullet = Bullet((self.x + math.cos(self.angle) * dist, self.y + math.sin(self.angle) * dist), self.angle, owner=self) return bullet return None
def main(): libtcod.console_set_custom_font('arial10x10.png', libtcod.FONT_TYPE_GREYSCALE | libtcod.FONT_LAYOUT_TCOD) libtcod.console_init_root(screen_width, screen_height, 'libtcod tutorial revised', False) con = libtcod.console_new(screen_width, screen_height) dialog_prompt = DialogPrompt(dialog_pos_x, dialog_pos_y, "npc_dialog", dialog_width, dialog_height, con) game_map = GameMap(map_width, map_height) game_map.switch_map(0) fov_recomputer = True game_entities = [] dialog_entities = [] player = GameObject(3, 3, '@', libtcod.white, "Hero", True) npc = GameObject(int(screen_width / 2 - 5), int(screen_height / 2), '@', libtcod.yellow, "Bad Guy", True) game_entities.append(player) game_entities.append(npc) key= libtcod.Key() mouse = libtcod.Mouse() libtcod.console_set_window_title(game_title+ " - " + game_map.map_name) while not libtcod.console_is_window_closed(): libtcod.sys_check_for_event(libtcod.EVENT_KEY_PRESS, key, mouse) draw_all(con, game_entities, game_map, screen_width, screen_height) libtcod.console_flush() clear_all(con, game_entities) if key.c == ord('a'): dialog_prompt.npc_dialog('main') action = handle_keys(key) move = action.get('move') exit = action.get('exit') if move: dx, dy = move if not game_map.is_blocked(player.x + dx, player.y + dy) and not game_map.is_transport(player.x + dx, player.y + dy): game_map.unblock(player.x, player.y) player.move(dx,dy) elif game_map.is_transport(player.x + dx, player.y + dy): transport = game_map.spaces[player.x + dx][player.y + dy].transport game_map.switch_map(transport.new_map_index) libtcod.console_set_window_title( game_title + " - " + game_map.map_name) game_map.unblock(player.x, player.y) player.move(dx , dy ) player.move(transport.dx, transport.dy) if key.vk == libtcod.KEY_ESCAPE: return True game_map.update_blocked(game_entities)
npc_dialog(dialog_tree, 'main') control = handle_keys(action) move = control.get('move') if move: dx, dy = move new_x = player.x + dx new_y = player.y + dy if game_map.is_transport(new_x, new_y): transport = game_map.spaces[new_x][new_y].transport load_map(terminal, player, game_objects, game_map, transport.new_map_index, dx + transport.dx, dy + transport.dy) elif not game_map.is_blocked(new_x, new_y): game_map.unblock(player.x, player.y) player.move(dx, dy) player.last_dx = dx player.last_dy = dy test_count += 1 draw_all(terminal, game_objects, map_width, map_height) updateui() terminal.close() ##layers: ##background 0 ##terrain 1 ##characters 2 ##ui 3
def move(self, delta): GameObject.move(self, scale=delta*self.speed, angle=self.angle)