Dogeku 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +39 -0
- data/app/Historique/Action.rb +29 -0
- data/app/Historique/ChangerCase.rb +44 -0
- data/app/Historique/HistoriqueAction.rb +114 -0
- data/app/components/CaseDessin.rb +325 -0
- data/app/components/GrilleDessin.rb +235 -0
- data/app/components/Header.rb +194 -0
- data/app/config/app.yml +0 -0
- data/app/config/database.yml +2 -0
- data/app/controller/ApprentissageControleur.rb +75 -0
- data/app/controller/ChargerControleur.rb +41 -0
- data/app/controller/JeuLibreControleur.rb +244 -0
- data/app/controller/MenuControleur.rb +57 -0
- data/app/controller/NiveauControleur.rb +54 -0
- data/app/controller/NouvellePartieControleur.rb +34 -0
- data/app/controller/PrincipaleControleur.rb +30 -0
- data/app/controller/PseudoControleur.rb +95 -0
- data/app/controller/ReglagesControleur.rb +86 -0
- data/app/controller/ReglesControleur.rb +34 -0
- data/app/controller/ScoresControleur.rb +42 -0
- data/app/controller/StatistiquesControleur.rb +64 -0
- data/app/core/Conf.rb +26 -0
- data/app/core/Controller.rb +180 -0
- data/app/core/Core.rb +186 -0
- data/app/core/Model.rb +159 -0
- data/app/core/View.rb +56 -0
- data/app/db/main.sqlite3 +0 -0
- data/app/model/Configuration.rb +180 -0
- data/app/model/Grille.rb +180 -0
- data/app/model/Jeu.rb +74 -0
- data/app/model/Score.rb +100 -0
- data/app/model/Utilisateur.rb +113 -0
- data/app/utils/DSubset.rb +98 -0
- data/app/utils/Generateur.rb +171 -0
- data/app/utils/HPTriple.rb +75 -0
- data/app/utils/Peche.rb +46 -0
- data/app/utils/SCandidate.rb +86 -0
- data/app/utils/SCell.rb +73 -0
- data/app/utils/Technique.rb +202 -0
- data/app/utils/TechniqueUsine.rb +25 -0
- data/app/utils/XWing.rb +203 -0
- data/app/view/Fenetre.rb +424 -0
- data/app/view/FenetreApprentissage.rb +272 -0
- data/app/view/FenetreCharger.rb +31 -0
- data/app/view/FenetreJeuLibre.rb +468 -0
- data/app/view/FenetreMenu.rb +198 -0
- data/app/view/FenetreNiveau.rb +105 -0
- data/app/view/FenetreNouvellePartie.rb +92 -0
- data/app/view/FenetrePrincipale.rb +45 -0
- data/app/view/FenetrePseudo.rb +115 -0
- data/app/view/FenetreReglages.rb +209 -0
- data/app/view/FenetreRegles.rb +111 -0
- data/app/view/FenetreScores.rb +120 -0
- data/app/view/FenetreStatistiques.rb +134 -0
- data/assets/css/style.css +69 -0
- data/assets/img/eraser.png +0 -0
- data/assets/img/fond.jpg +0 -0
- data/assets/img/iconApp.png +0 -0
- data/assets/img/logoS.jpeg +0 -0
- data/assets/img/sudokuIntro.jpg +0 -0
- data/assets/img/user.png +0 -0
- data/bin/dogeku +19 -0
- data/doc/Action.html +309 -0
- data/doc/ApprentissageControleur.html +568 -0
- data/doc/CaseDessin.html +2405 -0
- data/doc/ChangerCase.html +405 -0
- data/doc/ChargerControleur.html +342 -0
- data/doc/Conf.html +378 -0
- data/doc/Configuration.html +1115 -0
- data/doc/Controller.html +1008 -0
- data/doc/Core.html +1191 -0
- data/doc/DSubset.html +647 -0
- data/doc/Fenetre.html +2631 -0
- data/doc/FenetreApprentissage.html +1175 -0
- data/doc/FenetreCharger.html +343 -0
- data/doc/FenetreJeuLibre.html +1859 -0
- data/doc/FenetreMenu.html +900 -0
- data/doc/FenetreNiveau.html +626 -0
- data/doc/FenetreNouvellePartie.html +602 -0
- data/doc/FenetrePrincipale.html +371 -0
- data/doc/FenetrePseudo.html +695 -0
- data/doc/FenetreReglages.html +946 -0
- data/doc/FenetreRegles.html +636 -0
- data/doc/FenetreScores.html +650 -0
- data/doc/FenetreStatistiques.html +672 -0
- data/doc/Generateur.html +1015 -0
- data/doc/Grille.html +1348 -0
- data/doc/GrilleDessin.html +1281 -0
- data/doc/HPTriple.html +593 -0
- data/doc/Header.html +1253 -0
- data/doc/HistoriqueAction.html +792 -0
- data/doc/Jeu.html +923 -0
- data/doc/JeuLibreControleur.html +1445 -0
- data/doc/MenuControleur.html +522 -0
- data/doc/Model.html +996 -0
- data/doc/NiveauControleur.html +451 -0
- data/doc/NouvellePartieControleur.html +330 -0
- data/doc/Peche.html +396 -0
- data/doc/PrincipaleControleur.html +320 -0
- data/doc/PseudoControleur.html +695 -0
- data/doc/ReglagesControleur.html +747 -0
- data/doc/ReglesControleur.html +330 -0
- data/doc/SCandidate.html +617 -0
- data/doc/SCell.html +587 -0
- data/doc/Score.html +926 -0
- data/doc/ScoresControleur.html +346 -0
- data/doc/StatistiquesControleur.html +390 -0
- data/doc/Technique.html +543 -0
- data/doc/TechniqueUsine.html +252 -0
- data/doc/Utilisateur.html +806 -0
- data/doc/View.html +844 -0
- data/doc/XWing.html +1031 -0
- data/doc/_index.html +478 -0
- data/doc/class_list.html +51 -0
- data/doc/css/common.css +1 -0
- data/doc/css/full_list.css +58 -0
- data/doc/css/style.css +492 -0
- data/doc/file.README.html +141 -0
- data/doc/file_list.html +56 -0
- data/doc/frames.html +17 -0
- data/doc/index.html +141 -0
- data/doc/js/app.js +243 -0
- data/doc/js/full_list.js +216 -0
- data/doc/js/jquery.js +4 -0
- data/doc/method_list.html +2523 -0
- data/doc/top-level-namespace.html +112 -0
- data/test/Generateur/grilleCorrecte.rb +198 -0
- data/test/Model/scoreCorrecte.rb +55 -0
- data/test/Model/utilisateurCorrecte.rb +68 -0
- data/test/test_helper.rb +2 -0
- data/test/unitTest.rb +72 -0
- metadata +187 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
require_relative "CaseDessin.rb"
|
|
2
|
+
require "observer"
|
|
3
|
+
|
|
4
|
+
## => Author:: DanAurea
|
|
5
|
+
## => version:: 0.1
|
|
6
|
+
## => copyright:: © 2016
|
|
7
|
+
## => license:: Distributes under the same terms as Ruby
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
## Classe permettant de dessiner la grille
|
|
11
|
+
##
|
|
12
|
+
class GrilleDessin < Gtk::Grid
|
|
13
|
+
include Observable
|
|
14
|
+
|
|
15
|
+
attr_accessor :cases
|
|
16
|
+
|
|
17
|
+
def initialize valeurs, config
|
|
18
|
+
|
|
19
|
+
super()
|
|
20
|
+
|
|
21
|
+
@size = 40
|
|
22
|
+
|
|
23
|
+
@nbCases = 9
|
|
24
|
+
@cases = Array.new(@nbCases)
|
|
25
|
+
|
|
26
|
+
@indices = false
|
|
27
|
+
|
|
28
|
+
set_margin_top(10);
|
|
29
|
+
set_margin_left(10);
|
|
30
|
+
|
|
31
|
+
valeurs.each_with_index do |ligne, ligneIndex|
|
|
32
|
+
|
|
33
|
+
@cases[ligneIndex] = Array.new()
|
|
34
|
+
|
|
35
|
+
ligne.each_with_index do |valeur, colonneIndex|
|
|
36
|
+
c = CaseDessin.new valeur, config
|
|
37
|
+
c.add_observer(self)
|
|
38
|
+
c.size = @size
|
|
39
|
+
|
|
40
|
+
c.x = ligneIndex
|
|
41
|
+
c.y = colonneIndex
|
|
42
|
+
|
|
43
|
+
@cases[ligneIndex] << c
|
|
44
|
+
|
|
45
|
+
attach c, colonneIndex, ligneIndex , 1, 1
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
##
|
|
52
|
+
## Réinitialise les indices de toutes les cases
|
|
53
|
+
##
|
|
54
|
+
def resetIndices()
|
|
55
|
+
@cases.each do |ligne|
|
|
56
|
+
ligne.each do |c|
|
|
57
|
+
c.resetIndices
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
##
|
|
63
|
+
## Définit l'état visuel des indices
|
|
64
|
+
##
|
|
65
|
+
## @return self
|
|
66
|
+
##
|
|
67
|
+
def indices=(bool)
|
|
68
|
+
|
|
69
|
+
@indices = bool
|
|
70
|
+
|
|
71
|
+
for i in 0..8
|
|
72
|
+
for j in 0..8
|
|
73
|
+
@cases[i][j].indice = bool
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
return self
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
##
|
|
81
|
+
## Renvoie l'état visuel des indices
|
|
82
|
+
##
|
|
83
|
+
## @return true si affiché sinon false
|
|
84
|
+
##
|
|
85
|
+
def indices?
|
|
86
|
+
return @indices
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
## Redessine la grille en mettant à jour les informations
|
|
91
|
+
##
|
|
92
|
+
##
|
|
93
|
+
## @return self
|
|
94
|
+
##
|
|
95
|
+
def redessiner()
|
|
96
|
+
|
|
97
|
+
for i in 0..8
|
|
98
|
+
for j in 0..8
|
|
99
|
+
@cases[i][j].redessiner
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
return self
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
##
|
|
107
|
+
## Réinitialise l'état de toutes les cases
|
|
108
|
+
##
|
|
109
|
+
## @return self
|
|
110
|
+
##
|
|
111
|
+
def reset()
|
|
112
|
+
for i in 0..8
|
|
113
|
+
for j in 0..8
|
|
114
|
+
@cases[i][j].state = ""
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
##
|
|
120
|
+
## Affiche les valeurs identiques en une couleur différente
|
|
121
|
+
##
|
|
122
|
+
## @param valeur La valeur à comparer
|
|
123
|
+
##
|
|
124
|
+
## @return self
|
|
125
|
+
##
|
|
126
|
+
def memeValeurs(valeur)
|
|
127
|
+
for i in 0..8
|
|
128
|
+
for j in 0..8
|
|
129
|
+
if(@cases[i][j].nombre == valeur)
|
|
130
|
+
@cases[i][j].state = "equal"
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
##
|
|
138
|
+
## Colorie la région aux cordonnéees rX et rY
|
|
139
|
+
##
|
|
140
|
+
## @param rX Coordonnée x de la région
|
|
141
|
+
## @param rY Coordonnée y de la région
|
|
142
|
+
## @param etat Etat à afficher
|
|
143
|
+
##
|
|
144
|
+
## @return self
|
|
145
|
+
##
|
|
146
|
+
def colorierRegion(rX, rY, etat)
|
|
147
|
+
## Colorie la région
|
|
148
|
+
for i in 0..2
|
|
149
|
+
for j in 0..2
|
|
150
|
+
|
|
151
|
+
@cases[rX + i][rY + j].set_state = etat
|
|
152
|
+
@cases[rX + i][rY + j].redessiner
|
|
153
|
+
end
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
return self
|
|
157
|
+
end
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
##
|
|
161
|
+
## Modifie les coordonnées pour donner les coordonnées de la première case
|
|
162
|
+
## du bloc.
|
|
163
|
+
##
|
|
164
|
+
## @param rX Coordonnée x
|
|
165
|
+
## @param rY Coordonnée y
|
|
166
|
+
##
|
|
167
|
+
## @return Retourne coordonnées mises à jour
|
|
168
|
+
##
|
|
169
|
+
def premiereCaseBloc!(rX, rY)
|
|
170
|
+
## Récupère les cordonnées de la première case de la région
|
|
171
|
+
while(rX % 3 != 0 || rY % 3 != 0)
|
|
172
|
+
if(rX % 3 != 0)
|
|
173
|
+
rX -= 1
|
|
174
|
+
end
|
|
175
|
+
if(rY % 3 != 0)
|
|
176
|
+
rY -=1
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
return rX, rY
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
##
|
|
184
|
+
## Met en surbillance la région
|
|
185
|
+
##
|
|
186
|
+
## @param x Position x d'une case
|
|
187
|
+
## @param y Position y d'une case
|
|
188
|
+
## @param etat Etat
|
|
189
|
+
##
|
|
190
|
+
## @return self
|
|
191
|
+
##
|
|
192
|
+
def colorierBloc(x, y, etat)
|
|
193
|
+
|
|
194
|
+
# Position x et y de la région
|
|
195
|
+
rX = x
|
|
196
|
+
rY = y
|
|
197
|
+
|
|
198
|
+
rX, rY = self.premiereCaseBloc!(rX, rY)
|
|
199
|
+
|
|
200
|
+
self.colorierRegion(rX, rY, etat)
|
|
201
|
+
|
|
202
|
+
return self
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
##
|
|
206
|
+
## Mise à jour de l'observateur
|
|
207
|
+
##
|
|
208
|
+
## @param x position x de la case sélectionnée
|
|
209
|
+
## @param y position y de la case sélectionnée
|
|
210
|
+
## @param etat L'état
|
|
211
|
+
##
|
|
212
|
+
## @return self
|
|
213
|
+
##
|
|
214
|
+
def update(x, y, etat)
|
|
215
|
+
|
|
216
|
+
for i in 0..@nbCases - 1
|
|
217
|
+
for j in 0..@nbCases - 1
|
|
218
|
+
@cases[x][j].set_state = etat
|
|
219
|
+
@cases[x][j].redessiner
|
|
220
|
+
@cases[i][y].set_state = etat
|
|
221
|
+
@cases[i][y].redessiner
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
self.colorierBloc(x, y, etat)
|
|
226
|
+
|
|
227
|
+
if(etat == "clicked" && Header.pause == false)
|
|
228
|
+
changed
|
|
229
|
+
notify_observers(x, y)
|
|
230
|
+
end
|
|
231
|
+
|
|
232
|
+
return self
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
end
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
# => Author:: Valentin, DanAurea
|
|
2
|
+
# => Version:: 0.1
|
|
3
|
+
# => Copyright:: © 2016
|
|
4
|
+
# => License:: Distributes under the same terms as Ruby
|
|
5
|
+
|
|
6
|
+
require Core::ROOT + "model/Score.rb"
|
|
7
|
+
|
|
8
|
+
##
|
|
9
|
+
## Module permettant de
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
module Header
|
|
13
|
+
|
|
14
|
+
@scoreModel = Score.instance()
|
|
15
|
+
|
|
16
|
+
@temps = 0
|
|
17
|
+
@pause = false
|
|
18
|
+
|
|
19
|
+
@tempsLabel = Gtk::Label.new("Temps: 00:00")
|
|
20
|
+
@scoreLabel = Gtk::Label.new("Score: 0")
|
|
21
|
+
|
|
22
|
+
@score = 0
|
|
23
|
+
@penalite = 0
|
|
24
|
+
@pseudo = ""
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
## Vide la header bar
|
|
29
|
+
##
|
|
30
|
+
## @return self
|
|
31
|
+
##
|
|
32
|
+
def Header.reset()
|
|
33
|
+
|
|
34
|
+
@temps = 0
|
|
35
|
+
@score = 0
|
|
36
|
+
|
|
37
|
+
Fenetre::enteteFenetre.children.each do |child|
|
|
38
|
+
Fenetre::enteteFenetre.remove(child)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
return self
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
##
|
|
45
|
+
## Définit le contenu de l'entête de la fenêtre
|
|
46
|
+
##
|
|
47
|
+
## @return Module
|
|
48
|
+
##
|
|
49
|
+
def Header.profil(pseudo)
|
|
50
|
+
|
|
51
|
+
self.reset()
|
|
52
|
+
|
|
53
|
+
## Création du bouton de profil
|
|
54
|
+
@boutonProfil = Gtk::Button.new
|
|
55
|
+
image = Gtk::Image.new(:file => Core::ROOTPROJECT + "assets/img/user.png")
|
|
56
|
+
|
|
57
|
+
box = Gtk::Box.new(:horizontal, 5)
|
|
58
|
+
|
|
59
|
+
@boutonProfil.signal_connect_after("clicked") do
|
|
60
|
+
@pause = true
|
|
61
|
+
Core::changeTo("Reglages", :pseudo => pseudo)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
@boutonProfil.set_name("profil")
|
|
65
|
+
@boutonProfil.add(image)
|
|
66
|
+
box.add(@boutonProfil)
|
|
67
|
+
|
|
68
|
+
@pseudo = pseudo
|
|
69
|
+
|
|
70
|
+
pseudoProfil = Gtk::Label.new(pseudo.capitalize).set_name("pseudo")
|
|
71
|
+
box.add(pseudoProfil)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## Ajout au début de l'entête
|
|
75
|
+
Fenetre::enteteFenetre.pack_start(box)
|
|
76
|
+
|
|
77
|
+
return self
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
##
|
|
81
|
+
## Définit un accesseur sur l'état de la pause
|
|
82
|
+
##
|
|
83
|
+
## @return L'état de la pause
|
|
84
|
+
##
|
|
85
|
+
def Header.pause()
|
|
86
|
+
return @pause
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
##
|
|
90
|
+
## Définit l'état de la pause
|
|
91
|
+
##
|
|
92
|
+
## @param bool Booléen de l'état
|
|
93
|
+
##
|
|
94
|
+
## @return L'état de la pause
|
|
95
|
+
##
|
|
96
|
+
def Header.pause=(bool)
|
|
97
|
+
@pause = bool
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
##
|
|
101
|
+
## Définit un accesseur pour le temps
|
|
102
|
+
##
|
|
103
|
+
## @return temps
|
|
104
|
+
##
|
|
105
|
+
def Header.temps()
|
|
106
|
+
return @temps
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
##
|
|
110
|
+
## Ajoute une pénalité
|
|
111
|
+
##
|
|
112
|
+
## @return self
|
|
113
|
+
##
|
|
114
|
+
def Header.penalite()
|
|
115
|
+
@penalite += 1
|
|
116
|
+
return self
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
##
|
|
120
|
+
## Définit un mutateur pour le temps
|
|
121
|
+
##
|
|
122
|
+
def Header.temps=(temps)
|
|
123
|
+
@temps = temps
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
##
|
|
127
|
+
## Définit un accesseur pour le score
|
|
128
|
+
##
|
|
129
|
+
## @return score
|
|
130
|
+
##
|
|
131
|
+
def Header.score()
|
|
132
|
+
return @score
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
##
|
|
136
|
+
## Définit un mutateur pour le score
|
|
137
|
+
##
|
|
138
|
+
def Header.score=(score)
|
|
139
|
+
@score = score
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
##
|
|
143
|
+
## Crée un chrono dans la header bar
|
|
144
|
+
##
|
|
145
|
+
## @return self
|
|
146
|
+
##
|
|
147
|
+
def Header.chrono()
|
|
148
|
+
|
|
149
|
+
Fenetre::enteteFenetre.children.each do |child|
|
|
150
|
+
if(child == @tempsLabel || child == @scoreLabel)
|
|
151
|
+
Fenetre::enteteFenetre.remove(child)
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
Fenetre::enteteFenetre.pack_end(@tempsLabel)
|
|
156
|
+
Fenetre::enteteFenetre.pack_end(@scoreLabel)
|
|
157
|
+
|
|
158
|
+
GLib::Timeout.add_seconds(1){
|
|
159
|
+
Header.addSecond
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return self
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
##
|
|
166
|
+
## Ajoute une seconde au chrono
|
|
167
|
+
##
|
|
168
|
+
## @return true
|
|
169
|
+
##
|
|
170
|
+
def Header.addSecond()
|
|
171
|
+
if(@pause == false)
|
|
172
|
+
@temps += 1
|
|
173
|
+
|
|
174
|
+
@tempsLabel.text = "Temps: " + Header.surDeuxChiffres(@temps / 60) + ":" + Header.surDeuxChiffres(@temps % 60)
|
|
175
|
+
@score = @scoreModel.calcul(@penalite, @temps)
|
|
176
|
+
@scoreLabel.text = "Score: " + @score.to_s
|
|
177
|
+
|
|
178
|
+
return true
|
|
179
|
+
end
|
|
180
|
+
|
|
181
|
+
return false
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
##
|
|
185
|
+
## Convertit le temps sur deux chiffres
|
|
186
|
+
##
|
|
187
|
+
## @param temps Le temps
|
|
188
|
+
##
|
|
189
|
+
## @return Temps sur deux chiffres
|
|
190
|
+
##
|
|
191
|
+
def Header.surDeuxChiffres(temps)
|
|
192
|
+
return temps.to_s.rjust(2, "0")
|
|
193
|
+
end
|
|
194
|
+
end
|
data/app/config/app.yml
ADDED
|
File without changes
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
require Core::ROOT + "utils/TechniqueUsine.rb"
|
|
2
|
+
# => Author:: Valentin, DanAurea
|
|
3
|
+
# => Version:: 0.1
|
|
4
|
+
# => Copyright:: © 2016
|
|
5
|
+
# => License:: Distributes under the same terms as Ruby
|
|
6
|
+
#
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
##
|
|
10
|
+
## Classe permettant de créer un controlleur pour la vue FenetreApprentissage
|
|
11
|
+
##
|
|
12
|
+
class ApprentissageControleur < Controller
|
|
13
|
+
|
|
14
|
+
##
|
|
15
|
+
## Initialize
|
|
16
|
+
##
|
|
17
|
+
def initialize()
|
|
18
|
+
#charge le modele grille
|
|
19
|
+
loadModel("Grille")
|
|
20
|
+
loadModel("Configuration")
|
|
21
|
+
loadModel("Jeu")
|
|
22
|
+
#paramètres fenêtre
|
|
23
|
+
@title = "Sudoku - Apprentissage"
|
|
24
|
+
@content = {"grille" => nil}
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
##
|
|
28
|
+
## Permet la mise à jour de la grille
|
|
29
|
+
##
|
|
30
|
+
## @param x Coordonnée x de la grille
|
|
31
|
+
## @param y Coordonnée y de la grille
|
|
32
|
+
## @param value La valeur pour la mise à jour
|
|
33
|
+
##
|
|
34
|
+
def updateGrille(x, y, value)
|
|
35
|
+
@grille[x][y]["value"] = value
|
|
36
|
+
puts "updated"
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
## Sauvegarde la partie dans un fichier yaml
|
|
41
|
+
##
|
|
42
|
+
## @return self
|
|
43
|
+
##
|
|
44
|
+
def sauvegarder()
|
|
45
|
+
@Jeu.chrono = Header.temps
|
|
46
|
+
@Jeu.score = Header.score
|
|
47
|
+
@Jeu.grille = @content["grille"]
|
|
48
|
+
|
|
49
|
+
## Sauvegarde la partie dans un fichier yaml au nom de l'utilisateur
|
|
50
|
+
@Jeu.creerPartie (@content["pseudo"])
|
|
51
|
+
|
|
52
|
+
return self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
##
|
|
56
|
+
## Méthode à définir dans tous les cas !
|
|
57
|
+
##
|
|
58
|
+
## @return self
|
|
59
|
+
##
|
|
60
|
+
def run()
|
|
61
|
+
|
|
62
|
+
if(@content.has_key?(:niveau))
|
|
63
|
+
niveau = @content[:niveau]
|
|
64
|
+
else
|
|
65
|
+
niveau = 1
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
@content["grille"] = @Grille.generer(niveau)
|
|
69
|
+
@content["Techniques"] = TechniqueUsine.new()
|
|
70
|
+
@content["config"] = @Configuration.getConfiguration(@content["pseudo"])
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
return self
|
|
74
|
+
end
|
|
75
|
+
end
|