Class: JeuLibreControleur

Inherits:
Controller show all
Defined in:
app/controller/JeuLibreControleur.rb

Overview

Classe permettant de créer un contrôleur pour la vue FenetreJeuLibre

Instance Method Summary collapse

Methods inherited from Controller

inherited, #loadFile, #loadModel, #render, #set_properties

Constructor Details

#initializeJeuLibreControleur

Initialize



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/controller/JeuLibreControleur.rb', line 18

def initialize()
	#charge le modèle grille
	loadModel("Configuration")
	loadModel("Grille")
	loadModel("Score")
	loadModel("Jeu")
	loadModel("Utilisateur")

	#paramètres fenêtre
	@title  = "Sudoku - Jeu Libre"
	@content = {"grille" => nil}
	@height   = 720

end

Instance Method Details

#finPartie?Boolean

Vérifie si la partie est terminée c'est à dire grille complète et correcte.

Returns:

  • (Boolean)


80
81
82
# File 'app/controller/JeuLibreControleur.rb', line 80

def finPartie?()
	return self.getNbVides == 0  && self.grilleCorrecte()
end

#getCandidatsObject

Calcule les candidats possibles pour chaque case

Returns:

  • Hash de tableau avec coordonnées des possibilités pour chaque chiffre



195
196
197
198
199
200
201
202
203
204
# File 'app/controller/JeuLibreControleur.rb', line 195

def getCandidats

	candidats = Hash.new()

	for i in 1..9
		candidats[i.to_s] = self.possibilites(i)
	end

	return candidats
end

#getNbVidesObject

Récupère le nombre de cases encore vides

Returns:

  • Nombre de cases vides



89
90
91
# File 'app/controller/JeuLibreControleur.rb', line 89

def getNbVides()
	return @Grille.nbVides
end

#grilleCorrecteObject

Vérifie que la grille est correcte

Returns:

  • True si correcte sinon false



61
62
63
64
65
66
67
68
69
70
71
72
# File 'app/controller/JeuLibreControleur.rb', line 61

def grilleCorrecte()
	
	@content["grille"].each_with_index do | ligne, ligneIndex |
		ligne.each_with_index do | colonne, colonneIndex |
			if(!@Grille.valeurUnique(colonne["value"], ligneIndex, colonneIndex))
				return false
			end
		end
	end

	return true
end

#partieTermineeObject

Action lorsque la partie est terminée, sauvegarde du score de l'utilisateur.

Returns:

  • self



116
117
118
119
120
121
122
123
# File 'app/controller/JeuLibreControleur.rb', line 116

def partieTerminee()
	Header.pause = true
	@Score.creer(@content["pseudo"], @Score.difficulte, Header.score)

	if(@Utilisateur.partieUtilisateur?(@content["pseudo"]))
		@Jeu.supprimerPartie(@content["pseudo"])
	end
end

#possibilites(valeur) ⇒ Object

Calcule les endroits possible pour une valeur

Parameters:

  • valeur

    La valeur

Returns:

  • self



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'app/controller/JeuLibreControleur.rb', line 149

def possibilites(valeur)
		
	possibilites = Array.new()

	## Calcule les coordonnées des cases qui permettent l'unicité sur la valeur
	## passée en paramètre
	for i in 0..8
		for j in 0..8
			if (@content["grille"][i][j]["editable"] && @Grille.valeurUnique(valeur, i, j) )
				possibilites << [i, j]
			end
		end
	end
	

	return possibilites
end

#reinitialiserObject

Réinitialise la grille

Returns:

  • self



172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
# File 'app/controller/JeuLibreControleur.rb', line 172

def reinitialiser()

	grille = @content["grille"]

	for i in 0..8
		for j in 0..8
			if(grille[i][j]["editable"])
				grille[i][j]["value"] = nil
			end
		end
	end

	@content["grille"] = grille
	return self
end

#runObject

Méthode à définir dans tous les cas !

Returns:

  • self



211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
# File 'app/controller/JeuLibreControleur.rb', line 211

def run()

	## Reprends la grille dans son état (singleton pattern) si on viens
	## d'une fenêtre par le biais d'un bouton retour 
	if(@Grille.grille != nil && !@content.has_key?("charger"))
		@content["grille"] = @Grille.grille

	## Reprends les configurations d'un fichier
	elsif(@content.has_key?("charger"))
		donnees = @Jeu.chargerPartie(@content["pseudo"])

		@content["difficulte"] = donnees["niveau"]
		Header.score           = donnees["score"]
		Header.temps           = donnees["chrono"]
		@content["grille"]     = donnees["grille"]
		@Grille.grille         = donnees["grille"]

	## Reggénère une grille
	else
		@content["grille"] = @Grille.generer(@content["difficulte"])
	end
	
	@content["config"] = @Configuration.getConfiguration(@content["pseudo"])
	
	if(@Score.difficulte == nil)
		@Score.difficulte = @content["difficulte"]
	end

	@Grille.countNbVides
	@content["Techniques"] = TechniqueUsine.new()
	
	return self
end

#sauvegarderObject

Sauvegarde la partie dans un fichier yaml

Returns:

  • self



130
131
132
133
134
135
136
137
138
139
140
# File 'app/controller/JeuLibreControleur.rb', line 130

def sauvegarder()
	@Jeu.chrono = Header.temps
	@Jeu.score = Header.score
	@Jeu.grille = @content["grille"]
	@Jeu.niveau = @Score.difficulte

	## Sauvegarde la partie dans un fichier yaml au nom de l'utilisateur
	@Jeu.creerPartie (@content["pseudo"])

	return self
end

#updateGrille(x, y, value) ⇒ Object

Met à jour la grille de données

Parameters:

  • x

    Position x de la case

  • y

    Position y de la case

  • value

    La valeur

Returns:

  • self



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/controller/JeuLibreControleur.rb', line 42

def updateGrille(x, y, value)
			
		## Met à jour le compteur
		if(@content["grille"][x][y]["value"] == nil && value != nil)
			@Grille.nbVides -= 1
		elsif(@content["grille"][x][y]["value"] != nil && value == nil)
			@Grille.nbVides += 1
		end

		@content["grille"][x][y]["value"] = value

		return self
end

#valeursGrilleObject

Récupère seulement les valeurs de la grille

Returns:

  • La grille que sous forme de valeur



98
99
100
101
102
103
104
105
106
107
108
# File 'app/controller/JeuLibreControleur.rb', line 98

def valeursGrille()
	grille = Array.new()

	@content["grille"].each_with_index do |ligne, index|
		grille << Array.new()
		ligne.each do |c|
			grille[index] << c["value"]
		end
	end

end