Hashiparmentier 0.4.0
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/bin/Hashiparmentier +3 -0
- data/launcher.command +3 -0
- data/lib/Hashiparmentier.rb +8 -0
- data/lib/Hashiparmentier/BDD/BDDDPQADSAHASHIPARMENTIER.db +0 -0
- data/lib/Hashiparmentier/BDD/Base.sqlite +0 -0
- data/lib/Hashiparmentier/Base.sqlite +0 -0
- data/lib/Hashiparmentier/CSS/Style.rb +184 -0
- data/lib/Hashiparmentier/Core/Action.rb +48 -0
- data/lib/Hashiparmentier/Core/Aide.rb +28 -0
- data/lib/Hashiparmentier/Core/Case.rb +92 -0
- data/lib/Hashiparmentier/Core/Chrono.rb +96 -0
- data/lib/Hashiparmentier/Core/Compte.rb +137 -0
- data/lib/Hashiparmentier/Core/ConnectSqlite3.rb +19 -0
- data/lib/Hashiparmentier/Core/Couleur.rb +94 -0
- data/lib/Hashiparmentier/Core/DonnerTechnique.rb +70 -0
- data/lib/Hashiparmentier/Core/Grille.rb +804 -0
- data/lib/Hashiparmentier/Core/Hypothese.rb +43 -0
- data/lib/Hashiparmentier/Core/Ile.rb +330 -0
- data/lib/Hashiparmentier/Core/Jeu.rb +177 -0
- data/lib/Hashiparmentier/Core/Pile.rb +85 -0
- data/lib/Hashiparmentier/Core/Pont.rb +300 -0
- data/lib/Hashiparmentier/Core/Sauvegarde.rb +176 -0
- data/lib/Hashiparmentier/Core/UndoRedo.rb +93 -0
- data/lib/Hashiparmentier/Core/VerifierGrille.rb +51 -0
- data/lib/Hashiparmentier/Data/Golden Bridge.jpg +0 -0
- data/lib/Hashiparmentier/Data/Pont Gaulois.jpg +0 -0
- data/lib/Hashiparmentier/Data/Zubi Zuri.jpg +0 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-0-001.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-0-002.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-0-003.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-1-001.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-1-002.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-1-003.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-2-001.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-2-002.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1010-2-003.txt +12 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-0-001.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-0-002.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-0-003.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-1-001.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-1-002.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-1-003.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-2-001.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-2-002.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-1515-2-003.txt +17 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-0-001.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-0-002.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-0-003.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-1-001.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-1-002.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-1-003.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-2-001.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-2-002.txt +9 -0
- data/lib/Hashiparmentier/NouvellesGrilles/map-77-2-003.txt +9 -0
- data/lib/Hashiparmentier/Test/Gemfile +3 -0
- data/lib/Hashiparmentier/Test/MajBDDGrille.rb +10 -0
- data/lib/Hashiparmentier/Test/NotAMalwareDefinitiveEdition +3 -0
- data/lib/Hashiparmentier/Test/NotAMalwareDefinitiveEdition~ +2 -0
- data/lib/Hashiparmentier/Test/NotAMalware~ +2 -0
- data/lib/Hashiparmentier/Test/TestChargerGrille.rb +7 -0
- data/lib/Hashiparmentier/Test/TestCompte.rb +51 -0
- data/lib/Hashiparmentier/Test/TestFenetre.rb +10 -0
- data/lib/Hashiparmentier/Test/TestGrille.rb +27 -0
- data/lib/Hashiparmentier/Test/TestJeu.rb +47 -0
- data/lib/Hashiparmentier/Test/TestPont.rb +73 -0
- data/lib/Hashiparmentier/Test/TestSauvegarde.rb +53 -0
- data/lib/Hashiparmentier/Test/execLinux.sh +8 -0
- data/lib/Hashiparmentier/Test/icone/Custom-Icon-Design-2014-World-Cup-Flags-Japan.ico +0 -0
- data/lib/Hashiparmentier/Test/test.bat +1 -0
- data/lib/Hashiparmentier/Test/testExec +2 -0
- data/lib/Hashiparmentier/Test/testTestExec.rb +3 -0
- data/lib/Hashiparmentier/UI/AideJeuUI.rb +22 -0
- data/lib/Hashiparmentier/UI/AideUI.rb +22 -0
- data/lib/Hashiparmentier/UI/AstucesUI.rb +23 -0
- data/lib/Hashiparmentier/UI/CaseUI.rb +70 -0
- data/lib/Hashiparmentier/UI/ChoixDifficulteUI.rb +45 -0
- data/lib/Hashiparmentier/UI/ChoixGrilleScrollUI.rb +37 -0
- data/lib/Hashiparmentier/UI/ChoixGrilleUI.rb +80 -0
- data/lib/Hashiparmentier/UI/ChoixNomUI.rb +39 -0
- data/lib/Hashiparmentier/UI/ChoixTailleUI.rb +44 -0
- data/lib/Hashiparmentier/UI/Fenetre.rb +32 -0
- data/lib/Hashiparmentier/UI/FenetreFinUI.rb +71 -0
- data/lib/Hashiparmentier/UI/FenetreJeuUI.rb +193 -0
- data/lib/Hashiparmentier/UI/FenetreReglesUI.rb +28 -0
- data/lib/Hashiparmentier/UI/FinUI.rb +91 -0
- data/lib/Hashiparmentier/UI/GrilleJouableUI.rb +47 -0
- data/lib/Hashiparmentier/UI/GrilleUI.rb +140 -0
- data/lib/Hashiparmentier/UI/IleUI.rb +87 -0
- data/lib/Hashiparmentier/UI/JeuUI.rb +161 -0
- data/lib/Hashiparmentier/UI/Menu.rb +322 -0
- data/lib/Hashiparmentier/UI/MenuUI.rb +107 -0
- data/lib/Hashiparmentier/UI/PontUI.rb +135 -0
- data/lib/Hashiparmentier/UI/RacineUI.rb +142 -0
- data/lib/Hashiparmentier/UI/ReglesUI.rb +22 -0
- data/lib/Hashiparmentier/doc/Action.html +259 -0
- data/lib/Hashiparmentier/doc/Aide.html +229 -0
- data/lib/Hashiparmentier/doc/AideUI.html +168 -0
- data/lib/Hashiparmentier/doc/Case.html +473 -0
- data/lib/Hashiparmentier/doc/CaseUI.html +343 -0
- data/lib/Hashiparmentier/doc/ChoixDifficulteUI.html +209 -0
- data/lib/Hashiparmentier/doc/ChoixGrilleScrollUI.html +239 -0
- data/lib/Hashiparmentier/doc/ChoixGrilleUI.html +276 -0
- data/lib/Hashiparmentier/doc/ChoixNomUI.html +215 -0
- data/lib/Hashiparmentier/doc/ChoixTailleUI.html +210 -0
- data/lib/Hashiparmentier/doc/Chrono.html +420 -0
- data/lib/Hashiparmentier/doc/Compte.html +514 -0
- data/lib/Hashiparmentier/doc/Couleur.html +422 -0
- data/lib/Hashiparmentier/doc/DonnerTechnique.html +245 -0
- data/lib/Hashiparmentier/doc/Fenetre.html +179 -0
- data/lib/Hashiparmentier/doc/FenetreJeuUI.html +274 -0
- data/lib/Hashiparmentier/doc/FenetreReglesUI.html +167 -0
- data/lib/Hashiparmentier/doc/FinUI.html +274 -0
- data/lib/Hashiparmentier/doc/Grille.html +2153 -0
- data/lib/Hashiparmentier/doc/GrilleJouableUI.html +229 -0
- data/lib/Hashiparmentier/doc/GrilleUI.html +477 -0
- data/lib/Hashiparmentier/doc/Hypothese.html +248 -0
- data/lib/Hashiparmentier/doc/Ile.html +1103 -0
- data/lib/Hashiparmentier/doc/IleUI.html +244 -0
- data/lib/Hashiparmentier/doc/Jeu.html +179 -0
- data/lib/Hashiparmentier/doc/JeuUI.html +471 -0
- data/lib/Hashiparmentier/doc/Menu.html +667 -0
- data/lib/Hashiparmentier/doc/MenuUI.html +416 -0
- data/lib/Hashiparmentier/doc/Pile.html +383 -0
- data/lib/Hashiparmentier/doc/Pont.html +943 -0
- data/lib/Hashiparmentier/doc/PontUI.html +307 -0
- data/lib/Hashiparmentier/doc/RacineUI.html +387 -0
- data/lib/Hashiparmentier/doc/ReglesUI.html +203 -0
- data/lib/Hashiparmentier/doc/Sauvegarde.html +672 -0
- data/lib/Hashiparmentier/doc/UndoRedo.html +389 -0
- data/lib/Hashiparmentier/doc/VerifierGrille.html +225 -0
- data/lib/Hashiparmentier/doc/created.rid +46 -0
- data/lib/Hashiparmentier/doc/css/fonts.css +167 -0
- data/lib/Hashiparmentier/doc/css/rdoc.css +590 -0
- data/lib/Hashiparmentier/doc/fonts/Lato-Light.ttf +0 -0
- data/lib/Hashiparmentier/doc/fonts/Lato-LightItalic.ttf +0 -0
- data/lib/Hashiparmentier/doc/fonts/Lato-Regular.ttf +0 -0
- data/lib/Hashiparmentier/doc/fonts/Lato-RegularItalic.ttf +0 -0
- data/lib/Hashiparmentier/doc/fonts/SourceCodePro-Bold.ttf +0 -0
- data/lib/Hashiparmentier/doc/fonts/SourceCodePro-Regular.ttf +0 -0
- data/lib/Hashiparmentier/doc/images/add.png +0 -0
- data/lib/Hashiparmentier/doc/images/arrow_up.png +0 -0
- data/lib/Hashiparmentier/doc/images/brick.png +0 -0
- data/lib/Hashiparmentier/doc/images/brick_link.png +0 -0
- data/lib/Hashiparmentier/doc/images/bug.png +0 -0
- data/lib/Hashiparmentier/doc/images/bullet_black.png +0 -0
- data/lib/Hashiparmentier/doc/images/bullet_toggle_minus.png +0 -0
- data/lib/Hashiparmentier/doc/images/bullet_toggle_plus.png +0 -0
- data/lib/Hashiparmentier/doc/images/date.png +0 -0
- data/lib/Hashiparmentier/doc/images/delete.png +0 -0
- data/lib/Hashiparmentier/doc/images/find.png +0 -0
- data/lib/Hashiparmentier/doc/images/loadingAnimation.gif +0 -0
- data/lib/Hashiparmentier/doc/images/macFFBgHack.png +0 -0
- data/lib/Hashiparmentier/doc/images/package.png +0 -0
- data/lib/Hashiparmentier/doc/images/page_green.png +0 -0
- data/lib/Hashiparmentier/doc/images/page_white_text.png +0 -0
- data/lib/Hashiparmentier/doc/images/page_white_width.png +0 -0
- data/lib/Hashiparmentier/doc/images/plugin.png +0 -0
- data/lib/Hashiparmentier/doc/images/ruby.png +0 -0
- data/lib/Hashiparmentier/doc/images/tag_blue.png +0 -0
- data/lib/Hashiparmentier/doc/images/tag_green.png +0 -0
- data/lib/Hashiparmentier/doc/images/transparent.png +0 -0
- data/lib/Hashiparmentier/doc/images/wrench.png +0 -0
- data/lib/Hashiparmentier/doc/images/wrench_orange.png +0 -0
- data/lib/Hashiparmentier/doc/images/zoom.png +0 -0
- data/lib/Hashiparmentier/doc/index.html +154 -0
- data/lib/Hashiparmentier/doc/js/darkfish.js +161 -0
- data/lib/Hashiparmentier/doc/js/jquery.js +4 -0
- data/lib/Hashiparmentier/doc/js/navigation.js +141 -0
- data/lib/Hashiparmentier/doc/js/navigation.js.gz +0 -0
- data/lib/Hashiparmentier/doc/js/search.js +109 -0
- data/lib/Hashiparmentier/doc/js/search_index.js +1 -0
- data/lib/Hashiparmentier/doc/js/search_index.js.gz +0 -0
- data/lib/Hashiparmentier/doc/js/searcher.js +229 -0
- data/lib/Hashiparmentier/doc/js/searcher.js.gz +0 -0
- data/lib/Hashiparmentier/doc/table_of_contents.html +1197 -0
- data/lib/Hashiparmentier/glade/Fin.glade +222 -0
- data/lib/Hashiparmentier/glade/aide.glade +127 -0
- data/lib/Hashiparmentier/glade/aideJeu.glade +143 -0
- data/lib/Hashiparmentier/glade/astuces.glade +1558 -0
- data/lib/Hashiparmentier/glade/fonts/VINERITC.TTF +0 -0
- data/lib/Hashiparmentier/glade/images/18790.ico +0 -0
- data/lib/Hashiparmentier/glade/images/1stars.png +0 -0
- data/lib/Hashiparmentier/glade/images/2stars.png +0 -0
- data/lib/Hashiparmentier/glade/images/3stars.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-07 11-48-54.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 17-54-16.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-00-00.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-01-25.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-17-16.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-17-40.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-18-01.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-18-23.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-19-00.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-19-17.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-19-54.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-24-24.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-24-44.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-24-58.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-25-16.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-25-36.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-25-51.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-26-04.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-26-15.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-01-40.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-02-08.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-02-33.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-02-54.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-03-13.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-03-39.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-03-55.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-04-10.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-33-07.png +0 -0
- data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-36-05.png +0 -0
- data/lib/Hashiparmentier/glade/images/LOGO.png +0 -0
- data/lib/Hashiparmentier/glade/images/LOGpR.png +0 -0
- data/lib/Hashiparmentier/glade/images/LOGpR2.png +0 -0
- data/lib/Hashiparmentier/glade/images/bg.jpg +0 -0
- data/lib/Hashiparmentier/glade/images/ex111.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex112.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex211.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex212.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex221.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex222.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex231.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex232.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex241.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex242.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex251.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex252.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex311.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex312.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex321.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex322.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex331.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex332.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex341.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex342.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex411.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex412.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex413.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex421.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex422.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex423.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex431.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex432.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex433.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex441.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex442.png +0 -0
- data/lib/Hashiparmentier/glade/images/ex443.png +0 -0
- data/lib/Hashiparmentier/glade/images/icone.png +0 -0
- data/lib/Hashiparmentier/glade/images/puzzle-solvation.gif +0 -0
- data/lib/Hashiparmentier/glade/images/wJapStylePlusNet.jpg +0 -0
- data/lib/Hashiparmentier/glade/images/wJapStylePlusNet15.jpg +0 -0
- data/lib/Hashiparmentier/glade/jeu.glade +539 -0
- data/lib/Hashiparmentier/glade/menu.glade +511 -0
- data/lib/Hashiparmentier/glade/regles.glade +856 -0
- data/lib/Hashiparmentier/map.txt +316 -0
- metadata +347 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
|
4
|
+
##
|
5
|
+
# Auteur:: Brabant Mano
|
6
|
+
# Version:: 0.1
|
7
|
+
# Date:: 09/04/2020
|
8
|
+
#
|
9
|
+
#Cette classe représente une hypothèse (une sauvegarde de la grille à un certain moment)
|
10
|
+
class Hypothese
|
11
|
+
|
12
|
+
#@grille => La grille supposé()
|
13
|
+
|
14
|
+
|
15
|
+
##
|
16
|
+
#Ce constructeur permet de créer une nouvelle hyoothèse
|
17
|
+
#param::
|
18
|
+
# * grille La grille que l'on suppose
|
19
|
+
def Hypothese.creer(grille)
|
20
|
+
new(grille)
|
21
|
+
end
|
22
|
+
|
23
|
+
#:nodoc:
|
24
|
+
def initialize(grille)
|
25
|
+
@grille = Marshal.dump(grille) #copie profonde
|
26
|
+
end
|
27
|
+
#:doc:
|
28
|
+
|
29
|
+
##
|
30
|
+
#Cette méthode permet d'afficher l'hypothèse
|
31
|
+
def to_s
|
32
|
+
@grille.to_s()
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
#Cette méthode permet de récuperer la grille
|
37
|
+
#return::
|
38
|
+
# * La grille que l'on a supposé
|
39
|
+
def getGrille()
|
40
|
+
return Marshal.load(@grille)
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,330 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
require_relative "../Core/Case.rb"
|
4
|
+
|
5
|
+
|
6
|
+
##
|
7
|
+
# Auteur:: Brabant Mano
|
8
|
+
# Version:: 0.1
|
9
|
+
# Date:: 09/04/2020
|
10
|
+
#
|
11
|
+
#Cette classe représente les iles de la grille
|
12
|
+
#
|
13
|
+
#Hérite de Case
|
14
|
+
class Ile < Case
|
15
|
+
|
16
|
+
#Cette constante représente l'une des directions dans laquelle peut se trouver un voisin
|
17
|
+
HAUT = 0
|
18
|
+
|
19
|
+
#Cette constante représente l'une des directions dans laquelle peut se trouver un voisin
|
20
|
+
DROITE = 1
|
21
|
+
|
22
|
+
#Cette constante représente l'une des directions dans laquelle peut se trouver un voisin
|
23
|
+
BAS = 2
|
24
|
+
|
25
|
+
#Cette constante représente l'une des directions dans laquelle peut se trouver un voisin
|
26
|
+
GAUCHE = 3
|
27
|
+
|
28
|
+
#Cette constante représente l'ensemble des directions dans laquelle peut se trouver un voisin
|
29
|
+
DIRECTIONS = [HAUT, DROITE, BAS, GAUCHE]
|
30
|
+
|
31
|
+
#@valeur => Le nombre de lien que doit possèder l'ile pour être valide
|
32
|
+
attr_reader :valeur
|
33
|
+
|
34
|
+
#@dernier => true si l'ile est la derniere ile séléctionnée
|
35
|
+
attr_accessor :dernier
|
36
|
+
|
37
|
+
#@nbPont => Le nombre de pont que possède l'ile dans chaque direction [HAUT, DROITE, BAS, GAUCHE]
|
38
|
+
|
39
|
+
include Comparable
|
40
|
+
private_class_method :new
|
41
|
+
|
42
|
+
##
|
43
|
+
#Ce constructeur permet de créer une nouvelle ile
|
44
|
+
#param::
|
45
|
+
# * posX La position en abscisse
|
46
|
+
# * posY La position en ordonnée
|
47
|
+
# * nbLien Le nombre de lien que doit possèder l'ile pour être valide
|
48
|
+
# * grille La grille sur laquelle se trouve l'ile
|
49
|
+
def Ile.creer(posX, posY, nbLien, grille)
|
50
|
+
new(posX, posY, nbLien, grille)
|
51
|
+
end
|
52
|
+
|
53
|
+
#:nodoc:
|
54
|
+
def initialize(posX, posY, nbLien, grille)
|
55
|
+
|
56
|
+
super(posX, posY, grille)
|
57
|
+
@valeur = nbLien
|
58
|
+
@nbPont = [0, 0, 0, 0]
|
59
|
+
@dernier = false
|
60
|
+
|
61
|
+
end
|
62
|
+
#:doc:
|
63
|
+
|
64
|
+
##
|
65
|
+
#Cette méthode permet de recuperer le nombre de lien nécéssaire pour être valide
|
66
|
+
#return::
|
67
|
+
# * Le nombre de lien nécéssaire pour être valide
|
68
|
+
def getValeur()
|
69
|
+
return @valeur
|
70
|
+
end
|
71
|
+
|
72
|
+
##
|
73
|
+
#Cette méthode permet de recuperer le nombre de lien actuel
|
74
|
+
#return::
|
75
|
+
# * Le nombre de lien actuel
|
76
|
+
def getNombrePont()
|
77
|
+
return @nbPont[HAUT] + @nbPont[DROITE] + @nbPont[BAS] + @nbPont[GAUCHE]
|
78
|
+
end
|
79
|
+
|
80
|
+
##
|
81
|
+
#Cette méthode permet d'ajouter un pont entre cette ile et une autre
|
82
|
+
#param::
|
83
|
+
# * ile L'autre ile
|
84
|
+
def ajouteNombrePont(ile)
|
85
|
+
|
86
|
+
for direction in DIRECTIONS
|
87
|
+
if(aVoisin?(direction))
|
88
|
+
if(getVoisin(direction) == ile)
|
89
|
+
@nbPont[direction] += 1
|
90
|
+
@nbPont[direction] %= (Pont::MAX_LIGNE + 1)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
|
97
|
+
##
|
98
|
+
#Cette méthode permet de retirer un pont entre cette ile et une autre
|
99
|
+
#param::
|
100
|
+
# * ile L'autre ile
|
101
|
+
def retireNombrePont(ile)
|
102
|
+
|
103
|
+
for direction in DIRECTIONS
|
104
|
+
if(aVoisin?(direction))
|
105
|
+
if(getVoisin(direction) == ile)
|
106
|
+
@nbPont[direction] += Pont::MAX_LIGNE
|
107
|
+
@nbPont[direction] %= (Pont::MAX_LIGNE + 1)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
##
|
115
|
+
#Cette méthode permet d'appeler clickOnIle de la grille dans laquelle se trouve l'ile
|
116
|
+
def clickOn()
|
117
|
+
@grille.clickOnIle(self)
|
118
|
+
end
|
119
|
+
|
120
|
+
##
|
121
|
+
#Cette méthode permet de savoir si cette ile est la dernière ile séléctionné
|
122
|
+
#return::
|
123
|
+
# * true Si l'ile est la dernière séléctionné
|
124
|
+
# * false Sinon
|
125
|
+
def estDernierIle()
|
126
|
+
return @dernier
|
127
|
+
end
|
128
|
+
|
129
|
+
|
130
|
+
|
131
|
+
##
|
132
|
+
#Cette méthode permet de savoir si l'ile est connécté à autant de pont que son objectif
|
133
|
+
#return::
|
134
|
+
# * true Si l'ile est connécté à autant de pont que son objectif
|
135
|
+
# * false Sinon
|
136
|
+
def estValide?()
|
137
|
+
return getNombrePont() == getValeur()
|
138
|
+
end
|
139
|
+
|
140
|
+
|
141
|
+
##
|
142
|
+
#Cette méthode permet de savoir combien il reste de pont à connécter pour que l'ile soit valide
|
143
|
+
#return::
|
144
|
+
# * Combien il reste de pont à connécter pour que l'ile soit valide
|
145
|
+
def getCapaciteResiduelle()
|
146
|
+
return getValeur() - getNombrePont()
|
147
|
+
end
|
148
|
+
|
149
|
+
##
|
150
|
+
#Cette méthode permet de savoir le nombre de ponts qui peuvent être connecté à l'ile
|
151
|
+
#return::
|
152
|
+
# * Le nombre de ponts qui peuvent être connecté à l'ile
|
153
|
+
def getNombreCheminDisponible()
|
154
|
+
|
155
|
+
ret = 0
|
156
|
+
for direction in DIRECTIONS
|
157
|
+
if(aVoisinDisponible?(direction))
|
158
|
+
voisin = getVoisin(direction)
|
159
|
+
ret += [2 - @grille.valeurPont(voisin, self), voisin.getCapaciteResiduelle()].min()
|
160
|
+
end
|
161
|
+
end
|
162
|
+
return ret
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
##
|
167
|
+
#Cette méthode permet d'afficher l'ile dans un terminal
|
168
|
+
def to_s()
|
169
|
+
return getCapaciteResiduelle().to_s()
|
170
|
+
end
|
171
|
+
|
172
|
+
##
|
173
|
+
#Cette méthode permet d'afficher les infos utiles de l'ile
|
174
|
+
def afficheInfo()
|
175
|
+
return @valeur, @posX, @posY, getCapaciteResiduelle()
|
176
|
+
end
|
177
|
+
|
178
|
+
##
|
179
|
+
#Cette méthode permet de connaitre le nombre de directions dans laquelle on peut ajouter un pont
|
180
|
+
#return::
|
181
|
+
# * Le nombre de directions dans laquelle on peut ajouter un pont
|
182
|
+
def getNombreDirectionConstructible()
|
183
|
+
|
184
|
+
ret = 0
|
185
|
+
for direction in DIRECTIONS
|
186
|
+
if(aVoisinDisponible?(direction))
|
187
|
+
if(@grille.valeurPont(self, getVoisin(direction)) != Pont::MAX_LIGNE && getVoisin(direction).getCapaciteResiduelle > 0)
|
188
|
+
ret += 1
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
return ret
|
193
|
+
|
194
|
+
end
|
195
|
+
|
196
|
+
##
|
197
|
+
#Cette méthode permet de connaitre le nombre de direction dans laquelle un voisin est disponible
|
198
|
+
#return::
|
199
|
+
# * Le nombre de direction dans laquelle un voisin est disponible
|
200
|
+
def getNombreDirectionDisponible()
|
201
|
+
|
202
|
+
ret = 0
|
203
|
+
for direction in DIRECTIONS
|
204
|
+
if(aVoisinDisponible?(direction))
|
205
|
+
ret += 1
|
206
|
+
end
|
207
|
+
end
|
208
|
+
return ret
|
209
|
+
|
210
|
+
end
|
211
|
+
|
212
|
+
##
|
213
|
+
#Cette méthode permet de comparer des iles entre-elles
|
214
|
+
#param::
|
215
|
+
# * autre L'autre ile à comparer
|
216
|
+
#return::
|
217
|
+
# * 0 si les iles sont égales
|
218
|
+
# * un nombre négatif si la première ile est inférieure à la deuxième
|
219
|
+
# * un nombre positif si la première ile est supérieure à la deuxième
|
220
|
+
def <=>(autre)
|
221
|
+
|
222
|
+
return 1 if(!autre.estIle?())
|
223
|
+
return @valeur <=> autre.valeur if(@valeur != autre.valeur)
|
224
|
+
return @posX <=> autre.posX if(@posX != autre.posX)
|
225
|
+
return @posY <=> autre.posY if(@posY != autre.posY)
|
226
|
+
return 0
|
227
|
+
|
228
|
+
end
|
229
|
+
|
230
|
+
##
|
231
|
+
#Cette méthode permet de connaitre un voisin dans une direction
|
232
|
+
#param::
|
233
|
+
# * direction La direction dans laquelle on cherche le voisin
|
234
|
+
#return::
|
235
|
+
# * Le voisin dans cette direction s'il existe
|
236
|
+
# * raiseException Sinon
|
237
|
+
def getVoisin(direction)
|
238
|
+
|
239
|
+
indiceX, indiceY = getIncrementDirection(direction)
|
240
|
+
indiceAddX = indiceX
|
241
|
+
indiceAddY = indiceY
|
242
|
+
until(@grille.sortLimite?(@posX + indiceX, @posY + indiceY) || @grille.getCase(@posX + indiceX, @posY + indiceY).estIle?())
|
243
|
+
indiceX += indiceAddX
|
244
|
+
indiceY += indiceAddY
|
245
|
+
end
|
246
|
+
posX = @posX + indiceX
|
247
|
+
posY = @posY + indiceY
|
248
|
+
if(@grille.sortLimite?(posX, posY))
|
249
|
+
raise("Cette ile n'a pas de voisins dans cette direction : " + direction.to_s())
|
250
|
+
else
|
251
|
+
return @grille.getCase(posX, posY)
|
252
|
+
end
|
253
|
+
|
254
|
+
end
|
255
|
+
|
256
|
+
##
|
257
|
+
#Cette méthode permet de savoir si l'ile a un voisin dans une direction
|
258
|
+
#param::
|
259
|
+
# * direction La direction dans laquelle on cherche le voisin
|
260
|
+
#return::
|
261
|
+
# * true Si l'ile a un voisin dans cette direction
|
262
|
+
# * false Sinon
|
263
|
+
def aVoisin?(direction)
|
264
|
+
|
265
|
+
begin
|
266
|
+
return getVoisin(direction).estIle?()
|
267
|
+
rescue => e
|
268
|
+
#puts e.message()
|
269
|
+
return false
|
270
|
+
end
|
271
|
+
|
272
|
+
end
|
273
|
+
|
274
|
+
private def getIncrementDirection(direction)
|
275
|
+
|
276
|
+
if(direction == Ile::HAUT)
|
277
|
+
indiceX = -1
|
278
|
+
indiceY = 0
|
279
|
+
elsif (direction == Ile::BAS)
|
280
|
+
indiceX = 1
|
281
|
+
indiceY = 0
|
282
|
+
elsif (direction == Ile::GAUCHE)
|
283
|
+
indiceX = 0
|
284
|
+
indiceY = -1
|
285
|
+
elsif (direction == Ile::DROITE)
|
286
|
+
indiceX = 0
|
287
|
+
indiceY = 1
|
288
|
+
else
|
289
|
+
raise("La direction n'est pas bonne")
|
290
|
+
end
|
291
|
+
return indiceX, indiceY
|
292
|
+
|
293
|
+
end
|
294
|
+
|
295
|
+
|
296
|
+
##
|
297
|
+
#Cette méthode permet de savoir si l'ile a un voisin disponible dans une direction (s'il n'a pas de pont qui les sépares)
|
298
|
+
#param::
|
299
|
+
# * direction La direction dans laquelle on cherche le voisin
|
300
|
+
#return::
|
301
|
+
# * true Si l'ile a un voisin disponible dans cette direction
|
302
|
+
# * false Sinon
|
303
|
+
def aVoisinDisponible?(direction)
|
304
|
+
|
305
|
+
begin
|
306
|
+
ile2 = self.getVoisin(direction)
|
307
|
+
return @grille.routeDisponible?(self, ile2)
|
308
|
+
rescue => e
|
309
|
+
#puts e.message()
|
310
|
+
return false
|
311
|
+
end
|
312
|
+
|
313
|
+
end
|
314
|
+
|
315
|
+
##
|
316
|
+
#Cette méthode retourne vrai
|
317
|
+
#return::
|
318
|
+
# * true
|
319
|
+
def estIle?()
|
320
|
+
return true
|
321
|
+
end
|
322
|
+
|
323
|
+
##
|
324
|
+
#Cette méthode permet de remettre à zéro l'ile
|
325
|
+
def raz
|
326
|
+
@nbPont = [0, 0, 0, 0]
|
327
|
+
@dernier = false
|
328
|
+
end
|
329
|
+
|
330
|
+
end
|
@@ -0,0 +1,177 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
##
|
4
|
+
# Auteur Brabant Mano, Serelle Erwan
|
5
|
+
# Version 0.1 : Date : 07/02/2020
|
6
|
+
|
7
|
+
|
8
|
+
require_relative "../Core/Grille.rb"
|
9
|
+
require_relative "../Core/Aide.rb"
|
10
|
+
require_relative "../Core/Sauvegarde.rb"
|
11
|
+
require_relative "../Core/Compte.rb"
|
12
|
+
#require_relative "../Core/Checkpoint.rb"
|
13
|
+
require_relative "../Core/DonnerTechnique.rb"
|
14
|
+
require_relative "../Core/VerifierGrille.rb"
|
15
|
+
require_relative "../Core/Action.rb"
|
16
|
+
require_relative "../Core/Hypothese.rb"
|
17
|
+
require_relative "../Core/Chrono.rb"
|
18
|
+
|
19
|
+
#require_relative '../class/JeuUI.rb'
|
20
|
+
|
21
|
+
##
|
22
|
+
#Cette classe permet de s'occuper du déroulement d'une partie
|
23
|
+
class Jeu
|
24
|
+
|
25
|
+
private_class_method :new
|
26
|
+
|
27
|
+
@compte #le compte Darcula
|
28
|
+
@grille #la grille ou se deroule la partie
|
29
|
+
@grilleSolution #la grille complétée
|
30
|
+
@tech #objet qui fournit des aides techniques
|
31
|
+
@verif # objet qui vérifie la grille
|
32
|
+
@checkpoints #objet qui gere les hypotheses
|
33
|
+
@jeuUI
|
34
|
+
@scoreCourant
|
35
|
+
|
36
|
+
attr_accessor :grille
|
37
|
+
|
38
|
+
#Ce constructeur permet de creer un nouveau Jeu
|
39
|
+
#
|
40
|
+
#:arg: difficulte
|
41
|
+
#:arg: tailleGrille : Entier
|
42
|
+
#:arg: compte : Compte
|
43
|
+
def Jeu.creer(difficulte, tailleGrille, compte, jeuUI, labelChrono, labelScore)
|
44
|
+
new(difficulte, tailleGrille, compte, jeuUI, labelChrono, labelScore)
|
45
|
+
end
|
46
|
+
|
47
|
+
#:nodoc:
|
48
|
+
def initialize(difficulte, tailleGrille, compte, jeuUI, labelChrono, labelScore)
|
49
|
+
@labelChrono = labelChrono
|
50
|
+
@labelScore = labelScore
|
51
|
+
@grille = chargerGrille(difficulte, tailleGrille, compte)
|
52
|
+
@jeuUI = jeuUI
|
53
|
+
@compte = compte
|
54
|
+
@scoreCourant = 500 * tailleGrille
|
55
|
+
@labelScore.set_label(@scoreCourant.to_s)
|
56
|
+
@checkpoints = Pile.creer()
|
57
|
+
@verifGrille = VerifierGrille.creer(@grille)
|
58
|
+
@donnerTech = DonnerTechnique.creer(@grille)
|
59
|
+
@chronoGrille = Chrono.new(self, @labelChrono)
|
60
|
+
@threadChrono = Thread.new{@chronoGrille.lancerChrono()}
|
61
|
+
end
|
62
|
+
#:doc
|
63
|
+
|
64
|
+
##
|
65
|
+
#charge une grille pour une partie
|
66
|
+
#:arg: difficulte
|
67
|
+
#:arg: tailleGrille : Entier
|
68
|
+
#:arg: compte : Compte
|
69
|
+
#@return Grille
|
70
|
+
def chargerGrille(difficulte, tailleGrille, compte)
|
71
|
+
lst = Sauvegarde.liste(compte, tailleGrille, difficulte)
|
72
|
+
if(lst.count() == 0)
|
73
|
+
raise("Y a pas de sauvegarde")
|
74
|
+
end
|
75
|
+
lst.each_with_index do |s, index|
|
76
|
+
print "\n", index, ":", "\n"
|
77
|
+
s.getGrille().afficheToi()
|
78
|
+
end
|
79
|
+
res = -1
|
80
|
+
while(res < 0 || res >= lst.length)
|
81
|
+
res = gets.chomp().to_i()
|
82
|
+
end
|
83
|
+
return lst[res].getGrille()
|
84
|
+
end
|
85
|
+
|
86
|
+
##
|
87
|
+
#algorithme du jeu
|
88
|
+
#:arg: grille : Grille
|
89
|
+
#:arg: compte : Compte
|
90
|
+
#@return win : Boolean
|
91
|
+
def lanceToi()
|
92
|
+
win = false #T'es mauvais Jack
|
93
|
+
@jeuUI.AfficherGrille()
|
94
|
+
while(!win)
|
95
|
+
@grille.afficheToi
|
96
|
+
|
97
|
+
case action()
|
98
|
+
when 1
|
99
|
+
begin
|
100
|
+
ile2 = demandeCoord()
|
101
|
+
@grille.clickOnIle(ile2)
|
102
|
+
rescue => e
|
103
|
+
puts "Erreur : " + e.message()
|
104
|
+
end
|
105
|
+
self.modifScore(-1000)
|
106
|
+
when 2
|
107
|
+
@grille.undo()
|
108
|
+
when 3
|
109
|
+
@grille.redo()
|
110
|
+
when 4
|
111
|
+
Sauvegarde.recuperer(@compte, @grille).setGrille(@grille).sauvegarder()
|
112
|
+
when 5
|
113
|
+
@grille.creerHypothese()
|
114
|
+
when 6
|
115
|
+
@grille.valideHypothese()
|
116
|
+
when 7
|
117
|
+
@grille.supprimeHypothese(self)
|
118
|
+
when 8
|
119
|
+
@verifGrille.aider()
|
120
|
+
when 9
|
121
|
+
@donnerTech.aider()
|
122
|
+
else
|
123
|
+
#puts "puts"
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
|
130
|
+
##
|
131
|
+
#affichage de l'aide
|
132
|
+
#:arg: aide : String
|
133
|
+
def afficherAide(aide)
|
134
|
+
puts aide
|
135
|
+
end
|
136
|
+
|
137
|
+
def modifScore(val)
|
138
|
+
@scoreCourant += val
|
139
|
+
@labelScore.set_label(@scoreCourant.to_s)
|
140
|
+
end
|
141
|
+
|
142
|
+
##
|
143
|
+
#decide de l'action du joueur
|
144
|
+
#@return Entier
|
145
|
+
def action
|
146
|
+
puts "1 : pose/supprime un pont\n"
|
147
|
+
puts "2 : undo\n"
|
148
|
+
puts "3 : redo\n"
|
149
|
+
puts "4 : Sauvegarder la grille\n"
|
150
|
+
puts "5 : Creer hypothese\n"
|
151
|
+
puts "6 : Valider hypothese\n"
|
152
|
+
puts "7 : Supprimer hypothese\n"
|
153
|
+
puts "8 : Verifier grille\n"
|
154
|
+
puts "9 : Donner technique\n"
|
155
|
+
return gets.chomp.to_i
|
156
|
+
end
|
157
|
+
|
158
|
+
##
|
159
|
+
#demande des coordonnées à l'utilisateur pour la sélection d'une case dans la grille
|
160
|
+
#@return Case
|
161
|
+
def demandeCoord
|
162
|
+
puts "Saisir coordonnées d'une ile :"
|
163
|
+
puts "coordonnée en x : "
|
164
|
+
x = gets.chomp.to_i
|
165
|
+
puts "coordonnée en y : "
|
166
|
+
y = gets.chomp.to_i
|
167
|
+
if(@grille.sortLimite?(x, y))
|
168
|
+
raise("Les coordonnée ne sont pas correctes")
|
169
|
+
end
|
170
|
+
if(!@grille.getCase(x, y).estIle?())
|
171
|
+
raise("La case n'est pas une ile")
|
172
|
+
end
|
173
|
+
return @grille.getCase(x, y)
|
174
|
+
end
|
175
|
+
|
176
|
+
|
177
|
+
end
|