Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- *Fonction recursive qui va rechercher les 4 voisins d'une case
- *Ou bien les voisins de ses voisins tant que MP > 1
- *
- *@param zone array qui comprend la case de départ pour la première itération puis
- *l'ensemble des cells
- *@param MP nombre de points de mouvements
- *@param color colore les cells si non null
- *@param needLos true pour garde uniquement les cases avec une ligne de vue avec startCell
- *
- *@return un tab de cells
- */
- function getZone(zone, MP, color) {
- var zoneTmpo = [];
- //Vérification si c'est la première itération
- if (typeOf(zone) != TYPE_ARRAY) {
- var startCell = zone;
- zone = [];
- zone[startCell] = false;
- }
- //Condition Sortie de la boucle
- //Si MP ==1 on renvoit juste le tableau avec les 4 cases adjacentes
- if (MP == 1) {
- //C'est la dernière étape, donc on renvoit juste les voisins de chacune des cases présents dans zone
- for (var cell: var value in zone) {
- for (var voisin in getNextCells(cell)) {
- if (zone[voisin] == null) {
- zoneTmpo[voisin] = false;
- }
- }
- }
- for (var cell: var value in zoneTmpo) {
- zone[cell] = value;
- }
- var finalZone = [];
- for (var cell: var value in zone) {
- push(finalZone, cell);
- }
- if (color != null) {
- mark(finalZone, color);
- }
- return finalZone;
- }
- for (var cell: var value in zone) {
- //On ne recherche les voisins que des cases qui n'ont pas encre été testées
- if (zone[cell] == false) {
- for (var voisin in getNextCells(cell)) {
- //Vérification que le voisin trouvé n'est pas déja dans le tableau
- if (zone[voisin] == null) {
- //on l'insère en l'initialisant a false qui signifie qu'on a pas encore recherché ses voisins'
- zoneTmpo[voisin] = false;
- }
- }
- //On passe a vrai ce qui indique qu'on a fini de chercher les voisins de cette case afin de ne pas recommencer plus tard
- zone[cell] = true;
- }
- }
- //On transfère tous les voisins trouvés dans le tableau zone originel
- for (var cell: var value in zoneTmpo) {
- zone[cell] = value;
- }
- //Puis on renvoit ce nouveau tableau a analyser avec 1 PM de moins
- return getZone(zone, MP - 1, color);
- }
- /**
- *Fonction recursive qui renvoit les 4 cases voisines d'une case
- *
- *@param cell cell de départ
- *@return un tab de cells
- */
- function getNextCells(cell) {
- var zone = [];
- var coordX = getCellX(cell);
- var coordY = getCellY(cell);
- var cell1 = getCellFromXY(coordX + 1, coordY);
- if (cell1 != null and!isObstacle(cell1)) {
- push(zone, cell1);
- }
- var cell2 = getCellFromXY(coordX - 1, coordY);
- if (cell2 != null and!isObstacle(cell2)) {
- push(zone, cell2);
- }
- var cell3 = getCellFromXY(coordX, coordY - 1);
- if (cell3 != null and!isObstacle(cell3)) {
- push(zone, cell3);
- }
- var cell4 = getCellFromXY(coordX, coordY + 1);
- if (cell4 != null and!isObstacle(cell4)) {
- push(zone, cell4);
- }
- return zone;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement