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.
Files changed (134) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +39 -0
  4. data/app/Historique/Action.rb +29 -0
  5. data/app/Historique/ChangerCase.rb +44 -0
  6. data/app/Historique/HistoriqueAction.rb +114 -0
  7. data/app/components/CaseDessin.rb +325 -0
  8. data/app/components/GrilleDessin.rb +235 -0
  9. data/app/components/Header.rb +194 -0
  10. data/app/config/app.yml +0 -0
  11. data/app/config/database.yml +2 -0
  12. data/app/controller/ApprentissageControleur.rb +75 -0
  13. data/app/controller/ChargerControleur.rb +41 -0
  14. data/app/controller/JeuLibreControleur.rb +244 -0
  15. data/app/controller/MenuControleur.rb +57 -0
  16. data/app/controller/NiveauControleur.rb +54 -0
  17. data/app/controller/NouvellePartieControleur.rb +34 -0
  18. data/app/controller/PrincipaleControleur.rb +30 -0
  19. data/app/controller/PseudoControleur.rb +95 -0
  20. data/app/controller/ReglagesControleur.rb +86 -0
  21. data/app/controller/ReglesControleur.rb +34 -0
  22. data/app/controller/ScoresControleur.rb +42 -0
  23. data/app/controller/StatistiquesControleur.rb +64 -0
  24. data/app/core/Conf.rb +26 -0
  25. data/app/core/Controller.rb +180 -0
  26. data/app/core/Core.rb +186 -0
  27. data/app/core/Model.rb +159 -0
  28. data/app/core/View.rb +56 -0
  29. data/app/db/main.sqlite3 +0 -0
  30. data/app/model/Configuration.rb +180 -0
  31. data/app/model/Grille.rb +180 -0
  32. data/app/model/Jeu.rb +74 -0
  33. data/app/model/Score.rb +100 -0
  34. data/app/model/Utilisateur.rb +113 -0
  35. data/app/utils/DSubset.rb +98 -0
  36. data/app/utils/Generateur.rb +171 -0
  37. data/app/utils/HPTriple.rb +75 -0
  38. data/app/utils/Peche.rb +46 -0
  39. data/app/utils/SCandidate.rb +86 -0
  40. data/app/utils/SCell.rb +73 -0
  41. data/app/utils/Technique.rb +202 -0
  42. data/app/utils/TechniqueUsine.rb +25 -0
  43. data/app/utils/XWing.rb +203 -0
  44. data/app/view/Fenetre.rb +424 -0
  45. data/app/view/FenetreApprentissage.rb +272 -0
  46. data/app/view/FenetreCharger.rb +31 -0
  47. data/app/view/FenetreJeuLibre.rb +468 -0
  48. data/app/view/FenetreMenu.rb +198 -0
  49. data/app/view/FenetreNiveau.rb +105 -0
  50. data/app/view/FenetreNouvellePartie.rb +92 -0
  51. data/app/view/FenetrePrincipale.rb +45 -0
  52. data/app/view/FenetrePseudo.rb +115 -0
  53. data/app/view/FenetreReglages.rb +209 -0
  54. data/app/view/FenetreRegles.rb +111 -0
  55. data/app/view/FenetreScores.rb +120 -0
  56. data/app/view/FenetreStatistiques.rb +134 -0
  57. data/assets/css/style.css +69 -0
  58. data/assets/img/eraser.png +0 -0
  59. data/assets/img/fond.jpg +0 -0
  60. data/assets/img/iconApp.png +0 -0
  61. data/assets/img/logoS.jpeg +0 -0
  62. data/assets/img/sudokuIntro.jpg +0 -0
  63. data/assets/img/user.png +0 -0
  64. data/bin/dogeku +19 -0
  65. data/doc/Action.html +309 -0
  66. data/doc/ApprentissageControleur.html +568 -0
  67. data/doc/CaseDessin.html +2405 -0
  68. data/doc/ChangerCase.html +405 -0
  69. data/doc/ChargerControleur.html +342 -0
  70. data/doc/Conf.html +378 -0
  71. data/doc/Configuration.html +1115 -0
  72. data/doc/Controller.html +1008 -0
  73. data/doc/Core.html +1191 -0
  74. data/doc/DSubset.html +647 -0
  75. data/doc/Fenetre.html +2631 -0
  76. data/doc/FenetreApprentissage.html +1175 -0
  77. data/doc/FenetreCharger.html +343 -0
  78. data/doc/FenetreJeuLibre.html +1859 -0
  79. data/doc/FenetreMenu.html +900 -0
  80. data/doc/FenetreNiveau.html +626 -0
  81. data/doc/FenetreNouvellePartie.html +602 -0
  82. data/doc/FenetrePrincipale.html +371 -0
  83. data/doc/FenetrePseudo.html +695 -0
  84. data/doc/FenetreReglages.html +946 -0
  85. data/doc/FenetreRegles.html +636 -0
  86. data/doc/FenetreScores.html +650 -0
  87. data/doc/FenetreStatistiques.html +672 -0
  88. data/doc/Generateur.html +1015 -0
  89. data/doc/Grille.html +1348 -0
  90. data/doc/GrilleDessin.html +1281 -0
  91. data/doc/HPTriple.html +593 -0
  92. data/doc/Header.html +1253 -0
  93. data/doc/HistoriqueAction.html +792 -0
  94. data/doc/Jeu.html +923 -0
  95. data/doc/JeuLibreControleur.html +1445 -0
  96. data/doc/MenuControleur.html +522 -0
  97. data/doc/Model.html +996 -0
  98. data/doc/NiveauControleur.html +451 -0
  99. data/doc/NouvellePartieControleur.html +330 -0
  100. data/doc/Peche.html +396 -0
  101. data/doc/PrincipaleControleur.html +320 -0
  102. data/doc/PseudoControleur.html +695 -0
  103. data/doc/ReglagesControleur.html +747 -0
  104. data/doc/ReglesControleur.html +330 -0
  105. data/doc/SCandidate.html +617 -0
  106. data/doc/SCell.html +587 -0
  107. data/doc/Score.html +926 -0
  108. data/doc/ScoresControleur.html +346 -0
  109. data/doc/StatistiquesControleur.html +390 -0
  110. data/doc/Technique.html +543 -0
  111. data/doc/TechniqueUsine.html +252 -0
  112. data/doc/Utilisateur.html +806 -0
  113. data/doc/View.html +844 -0
  114. data/doc/XWing.html +1031 -0
  115. data/doc/_index.html +478 -0
  116. data/doc/class_list.html +51 -0
  117. data/doc/css/common.css +1 -0
  118. data/doc/css/full_list.css +58 -0
  119. data/doc/css/style.css +492 -0
  120. data/doc/file.README.html +141 -0
  121. data/doc/file_list.html +56 -0
  122. data/doc/frames.html +17 -0
  123. data/doc/index.html +141 -0
  124. data/doc/js/app.js +243 -0
  125. data/doc/js/full_list.js +216 -0
  126. data/doc/js/jquery.js +4 -0
  127. data/doc/method_list.html +2523 -0
  128. data/doc/top-level-namespace.html +112 -0
  129. data/test/Generateur/grilleCorrecte.rb +198 -0
  130. data/test/Model/scoreCorrecte.rb +55 -0
  131. data/test/Model/utilisateurCorrecte.rb +68 -0
  132. data/test/test_helper.rb +2 -0
  133. data/test/unitTest.rb +72 -0
  134. 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
File without changes
@@ -0,0 +1,2 @@
1
+ development:
2
+ database: main.sqlite3
@@ -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