Advertisement
Guest User

Untitled

a guest
Jan 17th, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.29 KB | None | 0 0
  1. def marquageDirect(plateau,calque,ancienneVal,nouvelleVal):
  2. """
  3. permet de marquer avec nouvelleVal les cases non marquées adjacentes à
  4. une case marquée par ancienneVal
  5. paramètres: plateau le plateau considéré
  6. calque une matrice de la même dimension que le plateau et qui porte le marquage
  7. ancienneVal la valeur de marquage recherchée
  8. nouvelleVal la valeur utilisée pour marquer les nouvelle case
  9. cette fonction ne retourne rien mais modifie le claque
  10. """
  11.  
  12. res = False
  13. for lig in range(matrice.getNbLignes(calque)):
  14. for col in range(matrice.getNbColonnes(calque)):
  15. if matrice.getVal(calque, lig, col) == 0 and matrice.getVal(plateau["plateau"], lig, col) != 1:
  16. # pas de mur et pas marquer#
  17. if lig != 0 and matrice.getVal(calque, lig - 1, col) == ancienneVal:
  18. # voisin du haut#
  19. setVal(calque, lig, col, nouvelleVal)
  20. res = True
  21. elif lig != getNbLignes(calque) - 1 and matrice.getVal(calque, lig + 1, col) == ancienneVal:
  22. # voisin du bas#
  23. setVal(calque, lig, col, nouvelleVal)
  24. res = True
  25. elif col != 0 and matrice.getVal(calque, lig, col - 1) == ancienneVal:
  26. # voisin de gauche#
  27. setVal(calque, lig, col, nouvelleVal)
  28. res = True
  29. elif col != getNbColonnes(calque) - 1 and matrice.getVal(calque, lig, col + 1) == ancienneVal:
  30. # voisin de droite#
  31. setVal(calque, lig, col, nouvelleVal)
  32. res = True
  33. return res
  34.  
  35. def casesAccessibles(plateau,listeDepart,distance):
  36. """
  37. retourne la liste des cases accessibles sous la forme de liste de couples
  38. de coordonnées (lig,col)
  39. paramètres: plateau le plateau considéré
  40. listeDepart: une liste de couples (lig,col) indiquant les points de départ de la recherche
  41. distance: un entier positif indiquant de combien de cases on a le droit de se déplacer
  42. résultat: la liste des case atteignable à partir d'un des départs en utilisant moins de distance déplacements
  43. """
  44. result = []
  45. mat = plateau["plateau"]
  46. calque = matrice.Matrice(matrice.getNbLignes(mat),matrice.getNbColonnes(mat),0)
  47. for depart in listeDepart:
  48. if case.getCategorie(matrice.getVal(mat,depart[0], depart[1])) is not None:
  49. matrice.setVal(calque, depart[0], depart[1])
  50.  
  51. cpt = 1
  52. nouvellesCasesMarquees = True
  53. while nouvellesCasesMarquees and cpt <= distance:
  54. nouvellesCasesMarquees = marquageDirect(calque,mat,cpt, cpt+1)
  55. cpt+=1
  56.  
  57. for lig in range(matrice.getNbLignes(calque)):
  58. for col in range(matrice.getNbColonnes(calque)):
  59. if matrice.getVal(calque,lig,col) > 0:
  60. result.append((lig,col,matrice.getVal(calque,lig,col)))
  61. return result
  62.  
  63.  
  64.  
  65.  
  66.  
  67. def distancePieces(plateau,lig,col):
  68. """
  69. retourne un dictionnaire dont les clés sont les identifiant des pièces et les valeurs la distance
  70. a parcourir pour atteindre la pièce à partir de la case de coordonnées (lig,col)
  71. paramètres: plateau le plateau considéré
  72. lig: le numéro de la ligne de la case considérée
  73. col: le numéro de la colonne de la case considérée
  74. résultat: le dictionnaire décrit plus haut
  75. """
  76. result = dict()
  77. mat = plateau["plateau"]
  78. calque = matrice.Matrice(matrice.getNbLignes(mat),matrice.getNbColonnes(mat),0)
  79.  
  80. if case.getCategorie(matrice.getVal(mat,lig, col)) is not None:
  81. matrice.setVal(calque, lig, col)
  82.  
  83. cpt = 1
  84. nouvellesCasesMarquees = True
  85.  
  86. while nouvellesCasesMarquees:
  87. nouvellesCasesMarquees = marquageDirect(calque,mat,cpt, cpt+1)
  88. cpt+=1
  89.  
  90. for room in getPieces(plateau):
  91. min = None
  92. for entry in piece.getListeEntrees(room):
  93. e_col = entree.getColonne(entry)
  94. e_lig = entree.getLigne(entry)
  95. if min is None or min > matrice.getVal(calque, e_lig, e_col):
  96. result[piece.getNumPiece(room)] = matrice.getVal(calque, e_lig, e_col)
  97.  
  98. return result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement