2012-07-18 3 views
4

Je crée un jeu simple avec quelques implémentations IA simples sur certains des joueurs steerd informatique. J'ai une liste de Point qui représentent des mouvements possibles pour le joueur. J'ai besoin d'écrire une méthode qui déplace le joueur vers le Point le plus éloigné des ennemis possibles dans cette liste. J'illustré avec l'image:déterminez le plus loin Point loin de d'autres points

Les chiffres représentent des points poistion liste

Ce que je veux pour le joueur (4) de se déplacer soit Point en position 2 ou 6 qui sont les plus éloignés de des ennemis. J'ai réussi à résoudre ceci s'il y a un ennemi en itérant la liste et en utilisant la méthode distance() de Point pour déterminer quel point est le plus éloigné. Mais le code doit fonctionner même s'il y a plusieurs ennemis dans la grille.

+0

Alors, cela a-t-il fonctionné? – HumanCatfood

Répondre

1

Hm, que diriez-vous que vous le faites dans l'autre sens:

1. Iterate over each point. 
2. Find out how close it is to its closest enemy. 
3. Choose the point that is furthest from its closest enemy. 

Il y a beaucoup de potentiel pour les premiers-outs:

Within the loop store the currently furthest point. 
If you are then inspecting another point and find out 
it has a closer enemy, you can immediately skip to the 
next point 

[modifier]: même si vous travaillez avec une grille comme ci-dessus, vous pouvez

1. Check if there's an enemy on the currently processed 
    point *before* iterating through other enemies. That way 
    you can exclude it as early as possible. 

2. If it's a densely populated grid, consider doing a breadth-first 
    flood-fill starting at the current point. That might find the closest 
    enemy much faster than iterating though all of them. 
+0

aussi: votez pour le diagramme drôle! – HumanCatfood

Questions connexes