Пример #1
0
    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
Пример #2
0
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)
Пример #3
0
            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
Пример #4
0
 def move(self, delta):
     GameObject.move(self, scale=delta*self.speed, angle=self.angle)