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 lib/Hashiparmentier/Core/Ile.rb, line 49
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 lib/Hashiparmentier/Core/Ile.rb, line 220
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 lib/Hashiparmentier/Core/Ile.rb, line 263
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 lib/Hashiparmentier/Core/Ile.rb, line 303
def aVoisinDisponible?(direction)

  begin
    ile2 = self.getVoisin(direction)
    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 lib/Hashiparmentier/Core/Ile.rb, line 174
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 lib/Hashiparmentier/Core/Ile.rb, line 84
def ajouteNombrePont(ile)

  for direction in DIRECTIONS
    if(aVoisin?(direction))
      if(getVoisin(direction) == ile)
        @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 lib/Hashiparmentier/Core/Ile.rb, line 116
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 lib/Hashiparmentier/Core/Ile.rb, line 125
def estDernierIle()
  return @dernier
end
estIle?() click to toggle source

Cette méthode retourne vrai

return
  • true

# File lib/Hashiparmentier/Core/Ile.rb, line 319
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 lib/Hashiparmentier/Core/Ile.rb, line 136
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 lib/Hashiparmentier/Core/Ile.rb, line 145
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 lib/Hashiparmentier/Core/Ile.rb, line 153
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 lib/Hashiparmentier/Core/Ile.rb, line 182
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 lib/Hashiparmentier/Core/Ile.rb, line 200
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 lib/Hashiparmentier/Core/Ile.rb, line 76
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 lib/Hashiparmentier/Core/Ile.rb, line 68
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 lib/Hashiparmentier/Core/Ile.rb, line 237
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 lib/Hashiparmentier/Core/Ile.rb, line 325
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 lib/Hashiparmentier/Core/Ile.rb, line 101
def retireNombrePont(ile)

  for direction in DIRECTIONS
    if(aVoisin?(direction))
      if(getVoisin(direction) == ile)
        @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 lib/Hashiparmentier/Core/Ile.rb, line 168
def to_s()
  return getCapaciteResiduelle().to_s()
end

Private Instance Methods

getIncrementDirection(direction) click to toggle source
# File lib/Hashiparmentier/Core/Ile.rb, line 274
        def getIncrementDirection(direction)

  if(direction == Ile::HAUT)
    indiceX = -1
    indiceY = 0
  elsif (direction == Ile::BAS)
    indiceX = 1
    indiceY = 0
  elsif (direction == Ile::GAUCHE)
    indiceX = 0
    indiceY = -1
  elsif (direction == Ile::DROITE)
    indiceX = 0
    indiceY = 1
  else
    raise("La direction n'est pas bonne")
  end
  return indiceX, indiceY

end