Class: Ile

Inherits:
Case show all
Includes:
Comparable
Defined in:
lib/Hashiparmentier/Core/Ile.rb

Overview

Auteur

Brabant Mano

Version

0.1

Date

09/04/2020

Cette classe représente les iles de la grille

Hérite de Case

Constant Summary collapse

HAUT =

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

0
DROITE =

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

1
BAS =

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

2
GAUCHE =

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

3
DIRECTIONS =

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

[HAUT, DROITE, BAS, GAUCHE]

Instance Attribute Summary collapse

Attributes inherited from Case

#grille, #posX, #posY

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Case

#estPont?

Constructor Details

#initialize(posX, posY, nbLien, grille) ⇒ Ile

:nodoc:



54
55
56
57
58
59
60
61
# File 'lib/Hashiparmentier/Core/Ile.rb', line 54

def initialize(posX, posY, nbLien, grille)

  super(posX, posY, grille)
  @valeur = nbLien
  @nbPont = [0, 0, 0, 0]
  @dernier = false

end

Instance Attribute Details

#dernierObject

Returns the value of attribute dernier.



35
36
37
# File 'lib/Hashiparmentier/Core/Ile.rb', line 35

def dernier
  @dernier
end

#valeurObject (readonly)

Returns the value of attribute valeur.



32
33
34
# File 'lib/Hashiparmentier/Core/Ile.rb', line 32

def valeur
  @valeur
end

Class Method Details

.creer(posX, posY, nbLien, grille) ⇒ Object

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



49
50
51
# File 'lib/Hashiparmentier/Core/Ile.rb', line 49

def Ile.creer(posX, posY, nbLien, grille)
  new(posX, posY, nbLien, grille)
end

Instance Method Details

#<=>(autre) ⇒ Object

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



220
221
222
223
224
225
226
227
228
# 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

#afficheInfoObject

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



174
175
176
# File 'lib/Hashiparmentier/Core/Ile.rb', line 174

def afficheInfo()
  return @valeur, @posX, @posY, getCapaciteResiduelle()
end

#ajouteNombrePont(ile) ⇒ Object

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

param
  • ile L’autre ile



84
85
86
87
88
89
90
91
92
93
94
95
# 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

#aVoisin?(direction) ⇒ Boolean

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

Returns:

  • (Boolean)


263
264
265
266
267
268
269
270
271
272
# 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) ⇒ Boolean

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

Returns:

  • (Boolean)


303
304
305
306
307
308
309
310
311
312
313
# 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

#clickOnObject

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



116
117
118
# File 'lib/Hashiparmentier/Core/Ile.rb', line 116

def clickOn()
  @grille.clickOnIle(self)
end

#estDernierIleObject

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



125
126
127
# File 'lib/Hashiparmentier/Core/Ile.rb', line 125

def estDernierIle()
  return @dernier
end

#estIle?Boolean

Cette méthode retourne vrai

return
  • true

Returns:

  • (Boolean)


319
320
321
# File 'lib/Hashiparmentier/Core/Ile.rb', line 319

def estIle?()
  return true
end

#estValide?Boolean

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

Returns:

  • (Boolean)


136
137
138
# File 'lib/Hashiparmentier/Core/Ile.rb', line 136

def estValide?()
  return getNombrePont() == getValeur()
end

#getCapaciteResiduelleObject

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



145
146
147
# File 'lib/Hashiparmentier/Core/Ile.rb', line 145

def getCapaciteResiduelle()
  return getValeur() - getNombrePont()
end

#getNombreCheminDisponibleObject

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



153
154
155
156
157
158
159
160
161
162
163
164
# 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

#getNombreDirectionConstructibleObject

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



182
183
184
185
186
187
188
189
190
191
192
193
194
# 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

#getNombreDirectionDisponibleObject

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



200
201
202
203
204
205
206
207
208
209
210
# 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

#getNombrePontObject

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

return
  • Le nombre de lien actuel



76
77
78
# File 'lib/Hashiparmentier/Core/Ile.rb', line 76

def getNombrePont()
  return @nbPont[HAUT] + @nbPont[DROITE] + @nbPont[BAS] + @nbPont[GAUCHE]
end

#getValeurObject

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



68
69
70
# File 'lib/Hashiparmentier/Core/Ile.rb', line 68

def getValeur()
    return @valeur
end

#getVoisin(direction) ⇒ Object

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



237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
# 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

#razObject

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



325
326
327
328
# File 'lib/Hashiparmentier/Core/Ile.rb', line 325

def raz
  @nbPont = [0, 0, 0, 0]
  @dernier = false
end

#retireNombrePont(ile) ⇒ Object

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

param
  • ile L’autre ile



101
102
103
104
105
106
107
108
109
110
111
112
# 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_sObject

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



168
169
170
# File 'lib/Hashiparmentier/Core/Ile.rb', line 168

def to_s()
  return getCapaciteResiduelle().to_s()
end