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,41 @@
1
+ # =>
2
+ # => Author:: Valentin, DanAurea
3
+ # => Version:: 0.1
4
+ # => Copyright:: © 2016
5
+ # => License:: Distributes under the same terms as Ruby
6
+ #
7
+
8
+ ##
9
+ ## Classe permettant de créer un controlleur pour la vue FenetreCharger
10
+ ##
11
+ class ChargerControleur < Controller
12
+
13
+ ##
14
+ ## Initialize
15
+ ##
16
+ def initialize()
17
+ #charge le modèle grille
18
+ loadModel("Grille")
19
+ #paramètres fenêtre
20
+ @title = "Sudoku - Partie chargée"
21
+ @content = {"grille" => nil}
22
+ end
23
+
24
+ ##
25
+ ## Méthode à définir dans tous les cas !
26
+ ##
27
+ ## @return self
28
+ ##
29
+ def run()
30
+
31
+ if(@content.has_key?(:niveau))
32
+ niveau = @content[:niveau]
33
+ else
34
+ niveau = 1
35
+ end
36
+
37
+ @content["grille"] = @Grille.generer(niveau)
38
+
39
+ return self
40
+ end
41
+ end
@@ -0,0 +1,244 @@
1
+ require Core::ROOT + "utils/TechniqueUsine.rb"
2
+
3
+ # => Author:: Valentin, DanAurea
4
+ # => Version:: 0.1
5
+ # => Copyright:: © 2016
6
+ # => License:: Distributes under the same terms as Ruby
7
+ #
8
+
9
+
10
+ ##
11
+ ## Classe permettant de créer un contrôleur pour la vue FenetreJeuLibre
12
+ ##
13
+ class JeuLibreControleur < Controller
14
+
15
+ ##
16
+ ## Initialize
17
+ ##
18
+ def initialize()
19
+ #charge le modèle grille
20
+ loadModel("Configuration")
21
+ loadModel("Grille")
22
+ loadModel("Score")
23
+ loadModel("Jeu")
24
+ loadModel("Utilisateur")
25
+
26
+ #paramètres fenêtre
27
+ @title = "Sudoku - Jeu Libre"
28
+ @content = {"grille" => nil}
29
+ @height = 720
30
+
31
+ end
32
+
33
+
34
+ ## Met à jour la grille de données
35
+ ##
36
+ ## @param x Position x de la case
37
+ ## @param y Position y de la case
38
+ ## @param value La valeur
39
+ ##
40
+ ## @return self
41
+ ##
42
+ def updateGrille(x, y, value)
43
+
44
+ ## Met à jour le compteur
45
+ if(@content["grille"][x][y]["value"] == nil && value != nil)
46
+ @Grille.nbVides -= 1
47
+ elsif(@content["grille"][x][y]["value"] != nil && value == nil)
48
+ @Grille.nbVides += 1
49
+ end
50
+
51
+ @content["grille"][x][y]["value"] = value
52
+
53
+ return self
54
+ end
55
+
56
+ ##
57
+ ## Vérifie que la grille est correcte
58
+ ##
59
+ ## @return True si correcte sinon false
60
+ ##
61
+ def grilleCorrecte()
62
+
63
+ @content["grille"].each_with_index do | ligne, ligneIndex |
64
+ ligne.each_with_index do | colonne, colonneIndex |
65
+ if(!@Grille.valeurUnique(colonne["value"], ligneIndex, colonneIndex))
66
+ return false
67
+ end
68
+ end
69
+ end
70
+
71
+ return true
72
+ end
73
+
74
+ ##
75
+ ## Vérifie si la partie est terminée c'est à dire
76
+ ## grille complète et correcte.
77
+ ##
78
+ ## @return
79
+ ##
80
+ def finPartie?()
81
+ return self.getNbVides == 0 && self.grilleCorrecte()
82
+ end
83
+
84
+ ##
85
+ ## Récupère le nombre de cases encore vides
86
+ ##
87
+ ## @return Nombre de cases vides
88
+ ##
89
+ def getNbVides()
90
+ return @Grille.nbVides
91
+ end
92
+
93
+ ##
94
+ ## Récupère seulement les valeurs de la grille
95
+ ##
96
+ ## @return La grille que sous forme de valeur
97
+ ##
98
+ def valeursGrille()
99
+ grille = Array.new()
100
+
101
+ @content["grille"].each_with_index do |ligne, index|
102
+ grille << Array.new()
103
+ ligne.each do |c|
104
+ grille[index] << c["value"]
105
+ end
106
+ end
107
+
108
+ end
109
+
110
+ ##
111
+ ## Action lorsque la partie est terminée,
112
+ ## sauvegarde du score de l'utilisateur.
113
+ ##
114
+ ## @return self
115
+ ##
116
+ def partieTerminee()
117
+ Header.pause = true
118
+ @Score.creer(@content["pseudo"], @Score.difficulte, Header.score)
119
+
120
+ if(@Utilisateur.partieUtilisateur?(@content["pseudo"]))
121
+ @Jeu.supprimerPartie(@content["pseudo"])
122
+ end
123
+ end
124
+
125
+ ##
126
+ ## Sauvegarde la partie dans un fichier yaml
127
+ ##
128
+ ## @return self
129
+ ##
130
+ def sauvegarder()
131
+ @Jeu.chrono = Header.temps
132
+ @Jeu.score = Header.score
133
+ @Jeu.grille = @content["grille"]
134
+ @Jeu.niveau = @Score.difficulte
135
+
136
+ ## Sauvegarde la partie dans un fichier yaml au nom de l'utilisateur
137
+ @Jeu.creerPartie (@content["pseudo"])
138
+
139
+ return self
140
+ end
141
+
142
+ ##
143
+ ## Calcule les endroits possible pour une valeur
144
+ ##
145
+ ## @param valeur La valeur
146
+ ##
147
+ ## @return self
148
+ ##
149
+ def possibilites(valeur)
150
+
151
+ possibilites = Array.new()
152
+
153
+ ## Calcule les coordonnées des cases qui permettent l'unicité sur la valeur
154
+ ## passée en paramètre
155
+ for i in 0..8
156
+ for j in 0..8
157
+ if (@content["grille"][i][j]["editable"] && @Grille.valeurUnique(valeur, i, j) )
158
+ possibilites << [i, j]
159
+ end
160
+ end
161
+ end
162
+
163
+
164
+ return possibilites
165
+ end
166
+
167
+ ##
168
+ ## Réinitialise la grille
169
+ ##
170
+ ## @return self
171
+ ##
172
+ def reinitialiser()
173
+
174
+ grille = @content["grille"]
175
+
176
+ for i in 0..8
177
+ for j in 0..8
178
+ if(grille[i][j]["editable"])
179
+ grille[i][j]["value"] = nil
180
+ end
181
+ end
182
+ end
183
+
184
+ @content["grille"] = grille
185
+ return self
186
+ end
187
+
188
+
189
+ ##
190
+ ## Calcule les candidats possibles pour chaque case
191
+ ##
192
+ ## @return Hash de tableau avec coordonnées des possibilités
193
+ ## pour chaque chiffre
194
+ ##
195
+ def getCandidats
196
+
197
+ candidats = Hash.new()
198
+
199
+ for i in 1..9
200
+ candidats[i.to_s] = self.possibilites(i)
201
+ end
202
+
203
+ return candidats
204
+ end
205
+
206
+ ##
207
+ ## Méthode à définir dans tous les cas !
208
+ ##
209
+ ## @return self
210
+ ##
211
+ def run()
212
+
213
+ ## Reprends la grille dans son état (singleton pattern) si on viens
214
+ ## d'une fenêtre par le biais d'un bouton retour
215
+ if(@Grille.grille != nil && !@content.has_key?("charger"))
216
+ @content["grille"] = @Grille.grille
217
+
218
+ ## Reprends les configurations d'un fichier
219
+ elsif(@content.has_key?("charger"))
220
+ donnees = @Jeu.chargerPartie(@content["pseudo"])
221
+
222
+ @content["difficulte"] = donnees["niveau"]
223
+ Header.score = donnees["score"]
224
+ Header.temps = donnees["chrono"]
225
+ @content["grille"] = donnees["grille"]
226
+ @Grille.grille = donnees["grille"]
227
+
228
+ ## Reggénère une grille
229
+ else
230
+ @content["grille"] = @Grille.generer(@content["difficulte"])
231
+ end
232
+
233
+ @content["config"] = @Configuration.getConfiguration(@content["pseudo"])
234
+
235
+ if(@Score.difficulte == nil)
236
+ @Score.difficulte = @content["difficulte"]
237
+ end
238
+
239
+ @Grille.countNbVides
240
+ @content["Techniques"] = TechniqueUsine.new()
241
+
242
+ return self
243
+ end
244
+ end
@@ -0,0 +1,57 @@
1
+ # => Author:: Valentin, DanAurea
2
+ # => Version:: 0.1
3
+ # => Copyright:: © 2016
4
+ # => License:: Distributes under the same terms as Ruby
5
+ #
6
+
7
+ ##
8
+ ## Classe permettant de créer un contrôleur pour la vue FenetreMenu
9
+ ##
10
+ class MenuControleur < Controller
11
+
12
+ ##
13
+ ## Initialize
14
+ ##
15
+ def initialize
16
+ #charge le modele utilisateur
17
+ loadModel("Utilisateur")
18
+ loadModel("Jeu")
19
+
20
+ #paramètres fenêtre
21
+ @title = "Sudoku - Menu"
22
+ @width = 600
23
+ @height = 550
24
+ @resizable = false
25
+ @position= "CENTER_ALWAYS"
26
+ end
27
+
28
+
29
+ ##
30
+ ## Charge la dernière partie utilisateur
31
+ ##
32
+ ## @return self
33
+ ##
34
+ def charger
35
+ Core::changeTo("JeuLibre", :pseudo => @content["pseudo"], :charger => true)
36
+ end
37
+
38
+ ##
39
+ ## Permet de connaître si une partie sauvegardée existe portant le nom du pseudo
40
+ ##
41
+ ## @param pseudo Le pseudo de l'utilisateur
42
+ ##
43
+ ## @return boolean
44
+ ##
45
+ def partieExiste(pseudo)
46
+ return @Utilisateur.partieUtilisateur?(pseudo)
47
+ end
48
+
49
+ ##
50
+ ## Méthode à définir dans tous les cas !
51
+ ##
52
+ ## @return self
53
+ ##
54
+ def run
55
+ return self
56
+ end
57
+ end
@@ -0,0 +1,54 @@
1
+ # => Author:: Valentin, DanAurea
2
+ # => Version:: 0.1
3
+ # => Copyright:: © 2016
4
+ # => License:: Distributes under the same terms as Ruby
5
+ #
6
+
7
+ ##
8
+ ## Classe permettant de créer un contrôleur pour la vue FenetreNiveau
9
+ ##
10
+ class NiveauControleur < Controller
11
+
12
+ ##
13
+ ## Initialize
14
+ ##
15
+ def initialize()
16
+ #charge le modèle utilisateur
17
+ loadModel("Utilisateur")
18
+ loadModel("Jeu")
19
+ loadModel("Grille")
20
+
21
+ #paramètres fenêtre
22
+ @title = "Sudoku - Choix difficulté"
23
+ @width = 600
24
+ @height = 550
25
+ @resizable = false
26
+ @position= "CENTER_ALWAYS"
27
+ end
28
+
29
+ ##
30
+ ## Supprime toute partie existante pour le joueur
31
+ ##
32
+ ## @param pseudo Pseudo utilisateur
33
+ ##
34
+ ## @return self
35
+ ##
36
+ def supprimerPartieExistante(pseudo)
37
+
38
+ if(@Utilisateur.partieUtilisateur?(pseudo))
39
+ @Jeu.supprimerPartie(pseudo)
40
+ end
41
+ @Grille.grille = nil
42
+
43
+ return self
44
+ end
45
+
46
+ ##
47
+ ## Méthode à définir dans tous les cas !
48
+ ##
49
+ ## @return self
50
+ ##
51
+ def run()
52
+ return self
53
+ end
54
+ end
@@ -0,0 +1,34 @@
1
+ # => Author:: Valentin, DanAurea
2
+ # => Version:: 0.1
3
+ # => Copyright:: © 2016
4
+ # => License:: Distributes under the same terms as Ruby
5
+ #
6
+
7
+ ##
8
+ ## Classe permettant de créer un contrôleur pour la vue FenetreNouvellePartie
9
+ ##
10
+ class NouvellePartieControleur < Controller
11
+
12
+ ##
13
+ ## Initialize
14
+ ##
15
+ def initialize()
16
+ #charge le modèle utilisateur
17
+ loadModel("Utilisateur")
18
+ #paramètres fenêtre
19
+ @title = "Sudoku - Nouvelle Partie"
20
+ @width = 600
21
+ @height = 550
22
+ @resizable = false
23
+ @position= "CENTER_ALWAYS"
24
+ end
25
+
26
+ ##
27
+ ## Méthode à définir dans tous les cas !
28
+ ##
29
+ ## @return self
30
+ ##
31
+ def run()
32
+ return self
33
+ end
34
+ end
@@ -0,0 +1,30 @@
1
+ # => Controlleur vue principale
2
+ # => Author:: Valentin, DanAurea
3
+ # => Version:: 0.1
4
+ # => Copyright:: © 2016
5
+ # => License:: Distributes under the same terms as Ruby
6
+ #
7
+
8
+ ##
9
+ ## Classe permettant de créer un contrôleur pour la vue FenetrePrincipale
10
+ ##
11
+ class PrincipaleControleur < Controller
12
+
13
+ ##
14
+ ## Initialize
15
+ ##
16
+ def initialize ()
17
+ #paramètres fenêtre
18
+ @title = "Sudoku"
19
+ @resizable = false
20
+ end
21
+
22
+ ##
23
+ ## Méthode à définir dans tous les cas !
24
+ ##
25
+ ## @return self
26
+ ##
27
+ def run()
28
+ return self
29
+ end
30
+ end