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
data/app/model/Grille.rb
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
require Core::ROOT + "utils/Generateur.rb"
|
|
2
|
+
# Author:: Nikuto
|
|
3
|
+
# Version:: 0.1
|
|
4
|
+
# Copyright:: © 2017
|
|
5
|
+
# License:: Distributes under the same terms as Ruby
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
## Méthodes permettant de manager la grille et de faire des vérifications de la validité d'une valeur
|
|
9
|
+
## Modèle de la grille
|
|
10
|
+
##
|
|
11
|
+
class Grille < Model
|
|
12
|
+
|
|
13
|
+
attr_accessor :nbVides, :grille
|
|
14
|
+
|
|
15
|
+
##
|
|
16
|
+
## Initialisation
|
|
17
|
+
##
|
|
18
|
+
def initialize()
|
|
19
|
+
@grille = nil
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
##
|
|
24
|
+
## Génère une grille avec un niveau donné
|
|
25
|
+
##
|
|
26
|
+
## @param niveau Le niveau souhaité
|
|
27
|
+
##
|
|
28
|
+
## @return La grille génerée
|
|
29
|
+
##
|
|
30
|
+
def generer(niveau)
|
|
31
|
+
# Niveau + 1 car constante de 0 à 2 passée en paramètre
|
|
32
|
+
|
|
33
|
+
@gen = Generateur.new(niveau + 1)
|
|
34
|
+
@grille = @gen.generer()
|
|
35
|
+
|
|
36
|
+
return @grille
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
##
|
|
40
|
+
## Compte le nombre de cases vides
|
|
41
|
+
##
|
|
42
|
+
## @return Nombre de cases vides.
|
|
43
|
+
##
|
|
44
|
+
def countNbVides()
|
|
45
|
+
@nbVides = 0
|
|
46
|
+
|
|
47
|
+
@grille.each do |ligne|
|
|
48
|
+
ligne.each do |c|
|
|
49
|
+
if( c["value"] == nil)
|
|
50
|
+
@nbVides += 1
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
##
|
|
57
|
+
## Charge la partie du pseudo donnée
|
|
58
|
+
##
|
|
59
|
+
## @param pseudo Le pseudo du joueur qui charge
|
|
60
|
+
##
|
|
61
|
+
## @return La grille chargée
|
|
62
|
+
##
|
|
63
|
+
def charger(pseudo)
|
|
64
|
+
donnees = YAML.load_file(Core::ROOTPROJECT + "assets/save/" + pseudo.to_s + ".yml")
|
|
65
|
+
@grille=donnees["grille"]
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
## Sauvegarde la partie du joueur
|
|
70
|
+
##
|
|
71
|
+
## @param pseudo Le pseudo du joueur qui sauvegarde
|
|
72
|
+
##
|
|
73
|
+
## @return Retourne vrai quand la sauvegarde s'est faite
|
|
74
|
+
##
|
|
75
|
+
def sauvegarder(pseudo)
|
|
76
|
+
donnees=Hash.new()
|
|
77
|
+
File.open(Core::ROOTPROJECT + "assets/save/" + pseudo.to_s + ".yml", "w") do |fichier|
|
|
78
|
+
donnees["grille"] = @grille
|
|
79
|
+
fichier.write(donnees.to_yaml)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
return true
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
##
|
|
86
|
+
## Récupère la valeur de la case de la grille
|
|
87
|
+
##
|
|
88
|
+
## @param x Abscisse de la grille
|
|
89
|
+
## @param y Ordonnée de la grille
|
|
90
|
+
##
|
|
91
|
+
## @return la valeur
|
|
92
|
+
##
|
|
93
|
+
def getValue(x, y)
|
|
94
|
+
return @grille[x][y]["value"]
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
## Vérifie à partir de coordonnées que la valeur est unique
|
|
98
|
+
##
|
|
99
|
+
## @param valeur Valeur de la case
|
|
100
|
+
## @param x Abscisse de la case
|
|
101
|
+
## @param y Ordonnée de la case
|
|
102
|
+
##
|
|
103
|
+
## @return true si la cellule est bien unique false sinon
|
|
104
|
+
##
|
|
105
|
+
def valeurUnique(valeur, x ,y)
|
|
106
|
+
ligneUnique = self.valeurUniqueLigne(valeur, x, y, "ligne")
|
|
107
|
+
colonneUnique =self.valeurUniqueLigne(valeur, x, y, "colonne")
|
|
108
|
+
|
|
109
|
+
if(ligneUnique == false || colonneUnique == false)
|
|
110
|
+
return false
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# Position x et y de la région
|
|
114
|
+
rX = x
|
|
115
|
+
rY = y
|
|
116
|
+
|
|
117
|
+
## Récupère les cordonnées de la première case de la région
|
|
118
|
+
while(rX % 3 != 0 || rY % 3 != 0)
|
|
119
|
+
if(rX % 3 != 0)
|
|
120
|
+
rX -= 1
|
|
121
|
+
end
|
|
122
|
+
if(rY % 3 != 0)
|
|
123
|
+
rY -=1
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
## Parcourt la région et vérifie l'unicité
|
|
128
|
+
for i in 0..2
|
|
129
|
+
for j in 0..2
|
|
130
|
+
## Case vérifiée exclue
|
|
131
|
+
if(rX + i != x || rY + j != y)
|
|
132
|
+
if(valeur == self.getValue(rX+i, rY+j))
|
|
133
|
+
return false
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
return true
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
## Vérifie les valeurs d'une ligne en se basant sur des coordonées initiales
|
|
143
|
+
##
|
|
144
|
+
## @param valeur Valeur de la case
|
|
145
|
+
## @param x Ordonnée de la case à vérifier
|
|
146
|
+
## @param y Abscisse de la case à vérifier
|
|
147
|
+
## @param type Type de la recherche
|
|
148
|
+
##
|
|
149
|
+
## @return True si valeur unique sinon false
|
|
150
|
+
##
|
|
151
|
+
def valeurUniqueLigne(valeur, x, y, type)
|
|
152
|
+
## Parcours ligne ou colonne à la recherche de valeur unique
|
|
153
|
+
if(type == "ligne")
|
|
154
|
+
|
|
155
|
+
for i in 0..8
|
|
156
|
+
# On exclue la case vérifiée
|
|
157
|
+
if(i != y)
|
|
158
|
+
if(valeur == @grille[x][i]["value"])
|
|
159
|
+
return false
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
else
|
|
165
|
+
|
|
166
|
+
for i in 0..8
|
|
167
|
+
## On exclue la case vérifiée
|
|
168
|
+
if(i != x)
|
|
169
|
+
if(valeur == @grille[i][y]["value"])
|
|
170
|
+
return false
|
|
171
|
+
end
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
return true
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
end
|
data/app/model/Jeu.rb
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
## Author:: Nikuto
|
|
2
|
+
## Version:: 0.1
|
|
3
|
+
## Copyright:: © 2017
|
|
4
|
+
## License:: Distributes under the same terms as Ruby
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
##
|
|
8
|
+
## Modèle du jeu
|
|
9
|
+
##
|
|
10
|
+
class Jeu < Model
|
|
11
|
+
|
|
12
|
+
attr_accessor :grille, :chrono, :score, :niveau
|
|
13
|
+
|
|
14
|
+
#Définit le niveau Facile à 0
|
|
15
|
+
FACILE=0
|
|
16
|
+
#Définit le niveau Moyen à 1
|
|
17
|
+
MOYEN=1
|
|
18
|
+
#Définit le niveau Difficile à 2
|
|
19
|
+
DIFFICILE=2
|
|
20
|
+
|
|
21
|
+
##Initialisation
|
|
22
|
+
def initialize
|
|
23
|
+
@grille = nil
|
|
24
|
+
@score = 0
|
|
25
|
+
@score_id = 0
|
|
26
|
+
@chrono = 0
|
|
27
|
+
@niveau = 1
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
##
|
|
31
|
+
## Crée une partie appartenant à un pseudo donné au format YAML
|
|
32
|
+
##
|
|
33
|
+
## @param pseudo Pseudo de l'utilisateur
|
|
34
|
+
##
|
|
35
|
+
## @return self
|
|
36
|
+
##
|
|
37
|
+
def creerPartie(pseudo)
|
|
38
|
+
donnees=Hash.new()
|
|
39
|
+
File.open(Core::ROOTPROJECT + "assets/save/" + pseudo.to_s + ".yml", "w") do |fichier|
|
|
40
|
+
donnees["grille"] = @grille
|
|
41
|
+
donnees["score"] = @score
|
|
42
|
+
donnees["chrono"] = @chrono
|
|
43
|
+
donnees["niveau"] = @niveau
|
|
44
|
+
fichier.write(donnees.to_yaml)
|
|
45
|
+
|
|
46
|
+
return self
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
return true
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
##
|
|
53
|
+
## Charge la partie liée au pseudo de l'utilisateur
|
|
54
|
+
##
|
|
55
|
+
## @param pseudo Pseudo de l'utilisateur
|
|
56
|
+
##
|
|
57
|
+
## @return Données chargées
|
|
58
|
+
##
|
|
59
|
+
def chargerPartie(pseudo)
|
|
60
|
+
donnees = YAML.load_file(Core::ROOTPROJECT + "assets/save/" + pseudo.to_s + ".yml")
|
|
61
|
+
return donnees
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
##
|
|
65
|
+
## Supprime la partie d'u utilisateur précis
|
|
66
|
+
##
|
|
67
|
+
## @param pseudo Pseudo de l'utilisateur
|
|
68
|
+
##
|
|
69
|
+
## @return true si supprimé sinon false
|
|
70
|
+
##
|
|
71
|
+
def supprimerPartie(pseudo)
|
|
72
|
+
return File.delete(Core::ROOTPROJECT + "assets/save/" + pseudo.to_s + ".yml")
|
|
73
|
+
end
|
|
74
|
+
end
|
data/app/model/Score.rb
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
# Author:: AlexTAB
|
|
2
|
+
# Version:: 0.1
|
|
3
|
+
# Copyright:: © 2017
|
|
4
|
+
# License:: Distributes under the same terms as Ruby
|
|
5
|
+
|
|
6
|
+
##
|
|
7
|
+
## Modèle pour le score
|
|
8
|
+
##
|
|
9
|
+
class Score < Model
|
|
10
|
+
|
|
11
|
+
attr_accessor :difficulte
|
|
12
|
+
|
|
13
|
+
##
|
|
14
|
+
## Initialisation
|
|
15
|
+
##
|
|
16
|
+
def initialize()
|
|
17
|
+
|
|
18
|
+
## Crée la table Score
|
|
19
|
+
@@db.execute "CREATE TABLE IF NOT EXISTS score (
|
|
20
|
+
score_id integer primary key autoincrement,
|
|
21
|
+
niveau integer NOT NULL,
|
|
22
|
+
score integer NOT NULL,
|
|
23
|
+
utilisateur integer,
|
|
24
|
+
FOREIGN KEY(utilisateur) REFERENCES utilisateur(utilisateur_id)
|
|
25
|
+
);"
|
|
26
|
+
@difficulte = nil
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
##
|
|
30
|
+
## Récupère les scores de l'utilisateur
|
|
31
|
+
##
|
|
32
|
+
## @param pseudo Pseudo de l'utilisateur
|
|
33
|
+
##
|
|
34
|
+
## @return Les scores (tableau de hash)
|
|
35
|
+
##
|
|
36
|
+
def scoreUtilisateur(pseudo)
|
|
37
|
+
req = @@db.execute2 "SELECT * FROM utilisateur INNER JOIN score ON utilisateur=utilisateur_id WHERE pseudo=?;", pseudo
|
|
38
|
+
return self.to_h(req)
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
##
|
|
42
|
+
## Récupère les n meilleures scores
|
|
43
|
+
##
|
|
44
|
+
## @param n Nombre de scores à récupérer
|
|
45
|
+
##
|
|
46
|
+
## @return Les scores (tableau de hash)
|
|
47
|
+
##
|
|
48
|
+
def meilleursScores(n)
|
|
49
|
+
req = @@db.execute2 "SELECT * FROM utilisateur INNER JOIN score ON utilisateur=utilisateur_id ORDER BY score DESC LIMIT ?;", n
|
|
50
|
+
|
|
51
|
+
return self.to_h(req)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
##
|
|
55
|
+
## Crée un score dans la table score pour l'utilisateur
|
|
56
|
+
##
|
|
57
|
+
## @param pseudo Le pseudo utilisateur
|
|
58
|
+
## @param niveau Niveau de difficulté de la partie
|
|
59
|
+
## @param score Score
|
|
60
|
+
##
|
|
61
|
+
## @return Self
|
|
62
|
+
##
|
|
63
|
+
def creer(pseudo, niveau, score)
|
|
64
|
+
## Récupère id utilisateur
|
|
65
|
+
req = @@db.execute "SELECT utilisateur_id FROM utilisateur WHERE pseudo= ?", pseudo
|
|
66
|
+
|
|
67
|
+
insert(:utilisateur => req[0], :niveau => niveau, :score => score)
|
|
68
|
+
|
|
69
|
+
return self
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
##
|
|
73
|
+
## Met à jour le score d'un utilisateur
|
|
74
|
+
##
|
|
75
|
+
## @param score_id Id du score
|
|
76
|
+
## @param score Score
|
|
77
|
+
##
|
|
78
|
+
def mettreAJour(score_id, score)
|
|
79
|
+
@@db.execute "UPDATE score SET score= ? WHERE score_id = ?", score, score_id
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
##
|
|
83
|
+
## Calcule le score du joueur
|
|
84
|
+
##
|
|
85
|
+
## @param penalite Nombre de pénalités
|
|
86
|
+
## @param tempsChrono L'état du chrono
|
|
87
|
+
##
|
|
88
|
+
## @return Score de l'utilisateur
|
|
89
|
+
##
|
|
90
|
+
def calcul(penalite, tempsChrono)
|
|
91
|
+
|
|
92
|
+
tempsResoluMoy = 3*60
|
|
93
|
+
|
|
94
|
+
evolutionScore = (tempsResoluMoy - tempsChrono) + ((tempsResoluMoy/10)*(20 - penalite))
|
|
95
|
+
scoreCourant = (@difficulte)*evolutionScore
|
|
96
|
+
|
|
97
|
+
return scoreCourant
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
end
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
require Core::ROOT + "model/Configuration.rb"
|
|
2
|
+
require Core::ROOT + "model/Score.rb"
|
|
3
|
+
require Core::ROOT + "model/Jeu.rb"
|
|
4
|
+
|
|
5
|
+
## Author:: Nikuto, DanAurea
|
|
6
|
+
## Developers: Nikuto, DanAurea
|
|
7
|
+
## Version:: 0.1
|
|
8
|
+
## Copyright:: © 2016
|
|
9
|
+
## License:: Distributes under the same terms as Ruby
|
|
10
|
+
##
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
## Classe d'administration des utilisateurs
|
|
14
|
+
## Modèle utilisateur
|
|
15
|
+
##
|
|
16
|
+
class Utilisateur < Model
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
## Initialisation
|
|
20
|
+
##
|
|
21
|
+
def initialize()
|
|
22
|
+
|
|
23
|
+
## Crée la table utilisateur
|
|
24
|
+
@@db.execute "CREATE TABLE IF NOT EXISTS utilisateur (
|
|
25
|
+
utilisateur_id integer primary key autoincrement,
|
|
26
|
+
pseudo varchar(30) NOT NULL
|
|
27
|
+
);"
|
|
28
|
+
|
|
29
|
+
## Récupère les instances des tables configuration et score (Singleton pattern)
|
|
30
|
+
@configuration = Configuration.instance()
|
|
31
|
+
@score = Score.instance()
|
|
32
|
+
@jeu = Jeu.instance()
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
##
|
|
36
|
+
## Ajoute un utilisateur dans la base de données
|
|
37
|
+
##
|
|
38
|
+
## @param pseudo Le pseudo de l'utilisateur
|
|
39
|
+
##
|
|
40
|
+
## @return Retourne l'utilisateur créé
|
|
41
|
+
##
|
|
42
|
+
def creerUtilisateur(pseudo)
|
|
43
|
+
insert(:pseudo => pseudo)
|
|
44
|
+
|
|
45
|
+
@configuration.creerConfiguration(pseudo)
|
|
46
|
+
|
|
47
|
+
## Crée un score par défaut si mode débug
|
|
48
|
+
## Cela permet de pouvoir tester la création de score
|
|
49
|
+
## au chargement des utilisateurs.
|
|
50
|
+
if Core::DEBUG
|
|
51
|
+
@score.creer(pseudo, Jeu::FACILE, 600)
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
return self
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
##
|
|
58
|
+
## Supprime un utilisateur de la base de données
|
|
59
|
+
##
|
|
60
|
+
## @param pseudo Le pseudo de l'utilisateur à supprimer
|
|
61
|
+
##
|
|
62
|
+
## @return Retourne vrai si la suppression a eu lieu
|
|
63
|
+
##
|
|
64
|
+
def supprimerUtilisateur(pseudo)
|
|
65
|
+
@@db.execute "DELETE FROM utilisateur WHERE pseudo = ?;", pseudo
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
## Supprime tout les scores de l'utilisateur
|
|
70
|
+
##
|
|
71
|
+
## @param pseudo Pseudo de l'utilisateur
|
|
72
|
+
##
|
|
73
|
+
##
|
|
74
|
+
def reinitialiserUtilisateur(pseudo)
|
|
75
|
+
## Récupère id utilisateur
|
|
76
|
+
req = @@db.execute "SELECT utilisateur_id FROM utilisateur WHERE pseudo= ?", pseudo
|
|
77
|
+
|
|
78
|
+
utilisateur_id = req[0][0][0]
|
|
79
|
+
|
|
80
|
+
if(req.length > 0)
|
|
81
|
+
@@db.execute "DELETE FROM score WHERE utilisateur= ?", utilisateur_id
|
|
82
|
+
@@db.execute "DELETE FROM configuration WHERE utilisateur = ?", utilisateur_id
|
|
83
|
+
@configuration.creerConfiguration(pseudo)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
if(self.partieUtilisateur?(pseudo))
|
|
87
|
+
@jeu.supprimerPartie(pseudo)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
##
|
|
92
|
+
## Recherche un utilisateur dans la base de données
|
|
93
|
+
##
|
|
94
|
+
## @param pseudo Le pseudo de l'utilisateur à trouver
|
|
95
|
+
##
|
|
96
|
+
## @return Retourne 0 si pas trouvé sinon 1
|
|
97
|
+
##
|
|
98
|
+
def rechercherUtilisateur(pseudo)
|
|
99
|
+
resultat = @@db.execute "SELECT pseudo FROM utilisateur WHERE pseudo = ? LIMIT 1;", pseudo
|
|
100
|
+
return resultat.length >= 1 ? true : false;
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
##
|
|
104
|
+
## Vérifie si un utilisateur a une partie en cours
|
|
105
|
+
##
|
|
106
|
+
## @param pseudo Le pseudo de l'utilisateur à vérifier
|
|
107
|
+
##
|
|
108
|
+
## @return Retourne true si une partie est en cours
|
|
109
|
+
##
|
|
110
|
+
def partieUtilisateur?(pseudo)
|
|
111
|
+
return File.exist?(Core::ROOTPROJECT + "assets/save/" + pseudo + ".yml")
|
|
112
|
+
end
|
|
113
|
+
end
|