Class: Grille

Inherits:
Model show all
Defined in:
app/model/Grille.rb

Overview

Méthodes permettant de manager la grille et de faire des vérifications de la validité d'une valeur

Modèle de la grille

Instance Attribute Summary collapse

Attributes inherited from Model

#db

Instance Method Summary collapse

Methods inherited from Model

#connection, inherited, #insert, #mkDatabaseDir, #to_h

Constructor Details

#initializeGrille

Initialisation



18
19
20
# File 'app/model/Grille.rb', line 18

def initialize()
    @grille = nil
end

Instance Attribute Details

#grilleObject

Returns the value of attribute grille



13
14
15
# File 'app/model/Grille.rb', line 13

def grille
  @grille
end

#nbVidesObject

Returns the value of attribute nbVides



13
14
15
# File 'app/model/Grille.rb', line 13

def nbVides
  @nbVides
end

Instance Method Details

#charger(pseudo) ⇒ Object

Charge la partie du pseudo donnée

Parameters:

  • pseudo

    Le pseudo du joueur qui charge

Returns:

  • La grille chargée



63
64
65
66
# File 'app/model/Grille.rb', line 63

def charger(pseudo)
    donnees = YAML.load_file(Core::ROOTPROJECT + "assets/save/" + pseudo.to_s + ".yml")
    @grille=donnees["grille"]
end

#countNbVidesObject

Compte le nombre de cases vides

Returns:

  • Nombre de cases vides.



44
45
46
47
48
49
50
51
52
53
54
# File 'app/model/Grille.rb', line 44

def countNbVides()
    @nbVides = 0

    @grille.each do |ligne|
        ligne.each do |c|
            if( c["value"] == nil)
                @nbVides += 1
            end
        end
    end
end

#generer(niveau) ⇒ Object

Génère une grille avec un niveau donné

Parameters:

  • niveau

    Le niveau souhaité

Returns:

  • La grille génerée



30
31
32
33
34
35
36
37
# File 'app/model/Grille.rb', line 30

def generer(niveau)
    # Niveau + 1 car constante de 0 à 2 passée en paramètre
    
    @gen = Generateur.new(niveau + 1)
    @grille = @gen.generer()

    return @grille
end

#getValue(x, y) ⇒ Object

Récupère la valeur de la case de la grille

Parameters:

  • x

    Abscisse de la grille

  • y

    Ordonnée de la grille

Returns:

  • la valeur



93
94
95
# File 'app/model/Grille.rb', line 93

def getValue(x, y)
    return @grille[x][y]["value"]
end

#sauvegarder(pseudo) ⇒ Object

Sauvegarde la partie du joueur

Parameters:

  • pseudo

    Le pseudo du joueur qui sauvegarde

Returns:

  • Retourne vrai quand la sauvegarde s'est faite



75
76
77
78
79
80
81
82
83
# File 'app/model/Grille.rb', line 75

def sauvegarder(pseudo)
    donnees=Hash.new()
    File.open(Core::ROOTPROJECT + "assets/save/" + pseudo.to_s + ".yml", "w") do |fichier|
        donnees["grille"] = @grille
        fichier.write(donnees.to_yaml)
    end

    return true
end

#valeurUnique(valeur, x, y) ⇒ Object

Vérifie à partir de coordonnées que la valeur est unique

Parameters:

  • valeur

    Valeur de la case

  • x

    Abscisse de la case

  • y

    Ordonnée de la case

Returns:

  • true si la cellule est bien unique false sinon



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'app/model/Grille.rb', line 105

def valeurUnique(valeur, x ,y)
    ligneUnique = self.valeurUniqueLigne(valeur, x, y, "ligne")
    colonneUnique =self.valeurUniqueLigne(valeur, x, y, "colonne")

    if(ligneUnique == false || colonneUnique == false)
        return false
    end

    # Position x et y de la région
    rX = x
    rY = y

    ## Récupère les cordonnées de la première case de la région
    while(rX % 3 != 0 || rY % 3 != 0)
        if(rX % 3 != 0)
            rX -= 1
        end
        if(rY % 3 != 0)
            rY -=1
        end
    end

    ## Parcourt la région et vérifie l'unicité
    for i in 0..2
        for j in 0..2
            ## Case vérifiée exclue
            if(rX + i != x || rY + j != y)
                if(valeur == self.getValue(rX+i,  rY+j))
                    return false
                end
            end
        end
    end

    return true
end

#valeurUniqueLigne(valeur, x, y, type) ⇒ Object

Vérifie les valeurs d'une ligne en se basant sur des coordonées initiales

Parameters:

  • valeur

    Valeur de la case

  • x

    Ordonnée de la case à vérifier

  • y

    Abscisse de la case à vérifier

  • type

    Type de la recherche

Returns:

  • True si valeur unique sinon false



151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'app/model/Grille.rb', line 151

def valeurUniqueLigne(valeur, x, y, type)
    ## Parcours ligne ou colonne à la recherche de valeur unique
    if(type == "ligne")

        for i in 0..8
            # On exclue la case vérifiée
            if(i != y)
                if(valeur == @grille[x][i]["value"])
                    return false
                end
            end
        end

    else
        
        for i in 0..8
            ## On exclue la case vérifiée
            if(i != x)
                if(valeur == @grille[i][y]["value"])
                    return false
                end
            end
        end

    end
    
    return true
end