Champ de vision en Java
Rikkel
-
ngounou25 Messages postés 96 Date d'inscription Statut Membre Dernière intervention -
ngounou25 Messages postés 96 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je code actuellement pour un projet d'écosystème et je bloque sur un truc assez trivial.
L'environnement est un monde torique 2D de longueur et largeur paramétrable, où se baladent des agents virtuels. Deux types d'agents, les prédateurs et proies, sont rangés dans une arraylist commune, tous deux héritent d'une classe Agent.
Chacun de mes prédateurs (proies également mais je préfère commencer par les prédateurs) ont un champ de vision, et lorsqu'une proie est à portée de vue, ils se mettent à pourchasser la cible la plus proche.
Bref je ne vais pas m'étaler là dessus en vous déballant tout le projet car ma question est en somme toute triviale.
Voilà à quoi doit ressembler le champ de vision : http://image.noelshack.com/fichiers/2013/09/1361809943-rayon-visibilite.jpg
Mon prédateur a donc une variable r qui est le rayon de ce champ de vision, et à partir de là je veux faire une double boucle for pour parcourir les cases au alentour de ce prédateur pour procéder à une analyse de la liste des proies qui vérifie si elles sont dans ce rayon.
Je fais donc une boucle :
for ( k = x - r ; k <= x + r ; k++ )
for ( l = y - r ; l <= y + r ; l ++)
A partir de là je vérifie toutes les cases en forme de carré de longueur r (je gèrerai les débordement d'indice avec un modulo dx/dy), mais c'est là que je bloque : comment avec un if, sélectionner uniquement les cases qui concordent avec ce rayon décrit par l'image?
Merci d'avant pour votre aide !
Je code actuellement pour un projet d'écosystème et je bloque sur un truc assez trivial.
L'environnement est un monde torique 2D de longueur et largeur paramétrable, où se baladent des agents virtuels. Deux types d'agents, les prédateurs et proies, sont rangés dans une arraylist commune, tous deux héritent d'une classe Agent.
Chacun de mes prédateurs (proies également mais je préfère commencer par les prédateurs) ont un champ de vision, et lorsqu'une proie est à portée de vue, ils se mettent à pourchasser la cible la plus proche.
Bref je ne vais pas m'étaler là dessus en vous déballant tout le projet car ma question est en somme toute triviale.
Voilà à quoi doit ressembler le champ de vision : http://image.noelshack.com/fichiers/2013/09/1361809943-rayon-visibilite.jpg
Mon prédateur a donc une variable r qui est le rayon de ce champ de vision, et à partir de là je veux faire une double boucle for pour parcourir les cases au alentour de ce prédateur pour procéder à une analyse de la liste des proies qui vérifie si elles sont dans ce rayon.
Je fais donc une boucle :
for ( k = x - r ; k <= x + r ; k++ )
for ( l = y - r ; l <= y + r ; l ++)
A partir de là je vérifie toutes les cases en forme de carré de longueur r (je gèrerai les débordement d'indice avec un modulo dx/dy), mais c'est là que je bloque : comment avec un if, sélectionner uniquement les cases qui concordent avec ce rayon décrit par l'image?
Merci d'avant pour votre aide !
A voir également:
- Champ de vision en Java
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel - Télécharger - Jeux vidéo
- Eclipse java - Télécharger - Langages
- Nero vision - Télécharger - Montage & Édition
- Java apk - Télécharger - Langages
1 réponse
Salut, je tombes sur ton SOS un peu tard :-) , mais j'espère que ce bout de code te sera quand même utile ;-)
// this ==> prédateur // cette méthode est donc propre à un prédateur public ArrayList<Proie> getProiesDansLeChampsDeVision() { ArrayList<Proie> proies = new ArrayList<Proie>(); for(int x = 0; x < r; x++) for(int y = r; y > 0; y--) { if((this.x - x) >= 0) { if((this.y - y + x) >= 0) if(mondeTorique[this.x - x][this.y - y + x] instanceof Proie) proies.add(mondeTorique[this.x - x][this.y - y + x]); if((this.y + y - x) < dy) if(mondeTorique[this.x - x][this.y + y - x] instanceof Proie) proies.add(mondeTorique[this.x - x][this.y - y + x]); } if(((this.x + x) < dx) && (x != 0)) { if((this.y - y + x) >= 0) if(mondeTorique[this.x + x][this.y - y + x] instanceof Proie) proies.add(mondeTorique[this.x - x][this.y - y + x]); if((this.y + y - x) < dy) if(mondeTorique[this.x + x][this.y + y - x] instanceof Proie) proies.add(mondeTorique[this.x - x][this.y - y + x]); } } return proies; }