class Ile

Auteur:: Brabant Mano
Version:: 0.1
Date:: 09/04/2020

Cette classe représente les iles de la grille

Hérite de Case

Constants

BAS

Cette constante représente l'une des directions dans laquelle peut se trouver un voisin

DIRECTIONS

Cette constante représente l'ensemble des directions dans laquelle peut se trouver un voisin

DROITE

Cette constante représente l'une des directions dans laquelle peut se trouver un voisin

GAUCHE

Cette constante représente l'une des directions dans laquelle peut se trouver un voisin

HAUT

Cette constante représente l'une des directions dans laquelle peut se trouver un voisin

Attributes

dernier[RW]

@dernier => true si l'ile est la derniere ile séléctionnée

valeur[R]

@valeur => Le nombre de lien que doit possèder l'ile pour être valide

Public Class Methods

creer(posX, posY, nbLien, grille) click to toggle source

Ce constructeur permet de créer une nouvelle ile

param
  • posX La position en abscisse

  • posY La position en ordonnée

  • nbLien Le nombre de lien que doit possèder l'ile pour être valide

  • grille La grille sur laquelle se trouve l'ile

# File Core/Ile.rb, line 47
def Ile.creer(posX, posY, nbLien, grille)
    new(posX, posY, nbLien, grille)
end

Public Instance Methods

<=>(autre) click to toggle source

Cette méthode permet de comparer des iles entre-elles

param
  • autre L'autre ile à comparer

return
  • 0 si les iles sont égales

  • un nombre négatif si la première ile est inférieure à la deuxième

  • un nombre positif si la première ile est supérieure à la deuxième

# File Core/Ile.rb, line 212
def <=>(autre)

  return 1 if(!autre.estIle?())
  return @valeur <=> autre.valeur if(@valeur != autre.valeur)
  return @posX <=> autre.posX if(@posX != autre.posX)
  return @posY <=> autre.posY if(@posY != autre.posY)
  return 0

end
aVoisin?(direction) click to toggle source

Cette méthode permet de savoir si l'ile a un voisin dans une direction

param
  • direction La direction dans laquelle on cherche le voisin

return
  • true Si l'ile a un voisin dans cette direction

  • false Sinon

# File Core/Ile.rb, line 253
def aVoisin?(direction)
  begin
    return getVoisin(direction).estIle?()
  rescue => e
    puts e.message()
    return false
  end
end
aVoisinDisponible?(direction) click to toggle source

Cette méthode permet de savoir si l'ile a un voisin disponible dans une direction (s'il n'a pas de pont qui les sépares)

param
  • direction La direction dans laquelle on cherche le voisin

return
  • true Si l'ile a un voisin disponible dans cette direction

  • false Sinon

# File Core/Ile.rb, line 289
def aVoisinDisponible?(direction)
  begin
    ile2 = self.getVoisin(direction)
    puts "Allo ?" + ile2.to_s()
    return @grille.routeDisponible?(self, ile2)
  rescue => e
    puts e.message()
    return false
  end
end
afficheInfo() click to toggle source

Cette méthode permet d'afficher les infos utiles de l'ile

# File Core/Ile.rb, line 170
def afficheInfo()
    return @valeur, @posX, @posY, getCapaciteResiduelle()
end
ajouteNombrePont(ile) click to toggle source

Cette méthode permet d'ajouter un pont entre cette ile et une autre

param
  • ile L'autre ile

# File Core/Ile.rb, line 80
def ajouteNombrePont(ile)
  for direction in DIRECTIONS
    if(aVoisin?(direction))
      if(getVoisin(direction) == ile)
        puts "Ajoute : Direction : " + direction.to_s()
        @nbPont[direction] += 1
        @nbPont[direction] %= (Pont::MAX_LIGNE + 1)
      end
    end
  end
end
clickOn() click to toggle source

Cette méthode permet d'appeler clickOnIle de la grille dans laquelle se trouve l'ile

# File Core/Ile.rb, line 110
def clickOn()

  @grille.clickOnIle(self)

end
estDernierIle() click to toggle source

Cette méthode permet de savoir si cette ile est la dernière ile séléctionné

return
  • true Si l'ile est la dernière séléctionné

  • false Sinon

# File Core/Ile.rb, line 121
def estDernierIle()

  return @dernier

end
estIle?() click to toggle source

Cette méthode retourne vrai

return
  • true

# File Core/Ile.rb, line 304
def estIle?()
  return true
end
estValide?() click to toggle source

Cette méthode permet de savoir si l'ile est connécté à autant de pont que son objectif

return
  • true Si l'ile est connécté à autant de pont que son objectif

  • false Sinon

# File Core/Ile.rb, line 134
def estValide?()
    return getNombrePont() == getValeur()
end
getCapaciteResiduelle() click to toggle source

Cette méthode permet de savoir combien il reste de pont à connécter pour que l'ile soit valide

return
  • Combien il reste de pont à connécter pour que l'ile soit valide

# File Core/Ile.rb, line 143
def getCapaciteResiduelle()
  return getValeur() - getNombrePont()
end
getNombreCheminDisponible() click to toggle source

Cette méthode permet de savoir le nombre de ponts qui peuvent être connecté à l'ile

return
  • Le nombre de ponts qui peuvent être connecté à l'ile

# File Core/Ile.rb, line 151
def getNombreCheminDisponible()
  ret = 0
  for direction in DIRECTIONS
    if(aVoisinDisponible?(direction))
      voisin = getVoisin(direction)
      ret += [2 - @grille.valeurPont(voisin, self), voisin.getCapaciteResiduelle()].min()
    end
  end
  return ret
end
getNombreDirectionConstructible() click to toggle source

Cette méthode permet de connaitre le nombre de directions dans laquelle on peut ajouter un pont

return
  • Le nombre de directions dans laquelle on peut ajouter un pont

# File Core/Ile.rb, line 178
def getNombreDirectionConstructible()
  ret = 0
  for direction in DIRECTIONS
    if(aVoisinDisponible?(direction))
      if(@grille.valeurPont(self, getVoisin(direction)) != Pont::MAX_LIGNE && getVoisin(direction).getCapaciteResiduelle > 0)
        ret += 1
      end
    end
  end
  return ret
end
getNombreDirectionDisponible() click to toggle source

Cette méthode permet de connaitre le nombre de direction dans laquelle un voisin est disponible

return
  • Le nombre de direction dans laquelle un voisin est disponible

# File Core/Ile.rb, line 194
def getNombreDirectionDisponible()
  ret = 0
  for direction in DIRECTIONS
    if(aVoisinDisponible?(direction))
      ret += 1
    end
  end
  return ret
end
getNombrePont() click to toggle source

Cette méthode permet de recuperer le nombre de lien actuel

return
  • Le nombre de lien actuel

# File Core/Ile.rb, line 72
def getNombrePont()
  return @nbPont[HAUT] + @nbPont[DROITE] + @nbPont[BAS] + @nbPont[GAUCHE]
end
getValeur() click to toggle source

Cette méthode permet de recuperer le nombre de lien nécéssaire pour être valide

return
  • Le nombre de lien nécéssaire pour être valide

# File Core/Ile.rb, line 64
def getValeur()
    return @valeur
end
getVoisin(direction) click to toggle source

Cette méthode permet de connaitre un voisin dans une direction

param
  • direction La direction dans laquelle on cherche le voisin

return
  • Le voisin dans cette direction s'il existe

  • raiseException Sinon

# File Core/Ile.rb, line 229
def getVoisin(direction)
  indiceX, indiceY = getIncrementDirection(direction)
  indiceAddX = indiceX
  indiceAddY = indiceY
  until(@grille.sortLimite?(@posX + indiceX, @posY + indiceY) || @grille.getCase(@posX + indiceX, @posY + indiceY).estIle?())
    indiceX += indiceAddX
    indiceY += indiceAddY
  end
  posX = @posX + indiceX
  posY = @posY + indiceY
  if(@grille.sortLimite?(posX, posY))
    raise("Cette ile n'a pas de voisins dans cette direction : " + direction.to_s())
  else
    return @grille.getCase(posX, posY)
  end
end
raz() click to toggle source

Cette méthode permet de remettre à zéro l'ile

# File Core/Ile.rb, line 310
def raz
  @nbPont = [0, 0, 0, 0]
  @dernier = false
end
retireNombrePont(ile) click to toggle source

Cette méthode permet de retirer un pont entre cette ile et une autre

param
  • ile L'autre ile

# File Core/Ile.rb, line 96
def retireNombrePont(ile)
  for direction in DIRECTIONS
    if(aVoisin?(direction))
      if(getVoisin(direction) == ile)
        puts "Retire : Direction : " + direction.to_s()
        @nbPont[direction] += Pont::MAX_LIGNE
        @nbPont[direction] %= (Pont::MAX_LIGNE + 1)
      end
    end
  end
end
to_s() click to toggle source

Cette méthode permet d'afficher l'ile dans un terminal

# File Core/Ile.rb, line 164
def to_s()
    return getCapaciteResiduelle().to_s()
end