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.
Files changed (259) hide show
  1. checksums.yaml +7 -0
  2. data/bin/Hashiparmentier +3 -0
  3. data/launcher.command +3 -0
  4. data/lib/Hashiparmentier.rb +8 -0
  5. data/lib/Hashiparmentier/BDD/BDDDPQADSAHASHIPARMENTIER.db +0 -0
  6. data/lib/Hashiparmentier/BDD/Base.sqlite +0 -0
  7. data/lib/Hashiparmentier/Base.sqlite +0 -0
  8. data/lib/Hashiparmentier/CSS/Style.rb +184 -0
  9. data/lib/Hashiparmentier/Core/Action.rb +48 -0
  10. data/lib/Hashiparmentier/Core/Aide.rb +28 -0
  11. data/lib/Hashiparmentier/Core/Case.rb +92 -0
  12. data/lib/Hashiparmentier/Core/Chrono.rb +96 -0
  13. data/lib/Hashiparmentier/Core/Compte.rb +137 -0
  14. data/lib/Hashiparmentier/Core/ConnectSqlite3.rb +19 -0
  15. data/lib/Hashiparmentier/Core/Couleur.rb +94 -0
  16. data/lib/Hashiparmentier/Core/DonnerTechnique.rb +70 -0
  17. data/lib/Hashiparmentier/Core/Grille.rb +804 -0
  18. data/lib/Hashiparmentier/Core/Hypothese.rb +43 -0
  19. data/lib/Hashiparmentier/Core/Ile.rb +330 -0
  20. data/lib/Hashiparmentier/Core/Jeu.rb +177 -0
  21. data/lib/Hashiparmentier/Core/Pile.rb +85 -0
  22. data/lib/Hashiparmentier/Core/Pont.rb +300 -0
  23. data/lib/Hashiparmentier/Core/Sauvegarde.rb +176 -0
  24. data/lib/Hashiparmentier/Core/UndoRedo.rb +93 -0
  25. data/lib/Hashiparmentier/Core/VerifierGrille.rb +51 -0
  26. data/lib/Hashiparmentier/Data/Golden Bridge.jpg +0 -0
  27. data/lib/Hashiparmentier/Data/Pont Gaulois.jpg +0 -0
  28. data/lib/Hashiparmentier/Data/Zubi Zuri.jpg +0 -0
  29. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-0-001.txt +12 -0
  30. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-0-002.txt +12 -0
  31. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-0-003.txt +12 -0
  32. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-1-001.txt +12 -0
  33. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-1-002.txt +12 -0
  34. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-1-003.txt +12 -0
  35. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-2-001.txt +12 -0
  36. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-2-002.txt +12 -0
  37. data/lib/Hashiparmentier/NouvellesGrilles/map-1010-2-003.txt +12 -0
  38. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-0-001.txt +17 -0
  39. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-0-002.txt +17 -0
  40. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-0-003.txt +17 -0
  41. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-1-001.txt +17 -0
  42. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-1-002.txt +17 -0
  43. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-1-003.txt +17 -0
  44. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-2-001.txt +17 -0
  45. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-2-002.txt +17 -0
  46. data/lib/Hashiparmentier/NouvellesGrilles/map-1515-2-003.txt +17 -0
  47. data/lib/Hashiparmentier/NouvellesGrilles/map-77-0-001.txt +9 -0
  48. data/lib/Hashiparmentier/NouvellesGrilles/map-77-0-002.txt +9 -0
  49. data/lib/Hashiparmentier/NouvellesGrilles/map-77-0-003.txt +9 -0
  50. data/lib/Hashiparmentier/NouvellesGrilles/map-77-1-001.txt +9 -0
  51. data/lib/Hashiparmentier/NouvellesGrilles/map-77-1-002.txt +9 -0
  52. data/lib/Hashiparmentier/NouvellesGrilles/map-77-1-003.txt +9 -0
  53. data/lib/Hashiparmentier/NouvellesGrilles/map-77-2-001.txt +9 -0
  54. data/lib/Hashiparmentier/NouvellesGrilles/map-77-2-002.txt +9 -0
  55. data/lib/Hashiparmentier/NouvellesGrilles/map-77-2-003.txt +9 -0
  56. data/lib/Hashiparmentier/Test/Gemfile +3 -0
  57. data/lib/Hashiparmentier/Test/MajBDDGrille.rb +10 -0
  58. data/lib/Hashiparmentier/Test/NotAMalwareDefinitiveEdition +3 -0
  59. data/lib/Hashiparmentier/Test/NotAMalwareDefinitiveEdition~ +2 -0
  60. data/lib/Hashiparmentier/Test/NotAMalware~ +2 -0
  61. data/lib/Hashiparmentier/Test/TestChargerGrille.rb +7 -0
  62. data/lib/Hashiparmentier/Test/TestCompte.rb +51 -0
  63. data/lib/Hashiparmentier/Test/TestFenetre.rb +10 -0
  64. data/lib/Hashiparmentier/Test/TestGrille.rb +27 -0
  65. data/lib/Hashiparmentier/Test/TestJeu.rb +47 -0
  66. data/lib/Hashiparmentier/Test/TestPont.rb +73 -0
  67. data/lib/Hashiparmentier/Test/TestSauvegarde.rb +53 -0
  68. data/lib/Hashiparmentier/Test/execLinux.sh +8 -0
  69. data/lib/Hashiparmentier/Test/icone/Custom-Icon-Design-2014-World-Cup-Flags-Japan.ico +0 -0
  70. data/lib/Hashiparmentier/Test/test.bat +1 -0
  71. data/lib/Hashiparmentier/Test/testExec +2 -0
  72. data/lib/Hashiparmentier/Test/testTestExec.rb +3 -0
  73. data/lib/Hashiparmentier/UI/AideJeuUI.rb +22 -0
  74. data/lib/Hashiparmentier/UI/AideUI.rb +22 -0
  75. data/lib/Hashiparmentier/UI/AstucesUI.rb +23 -0
  76. data/lib/Hashiparmentier/UI/CaseUI.rb +70 -0
  77. data/lib/Hashiparmentier/UI/ChoixDifficulteUI.rb +45 -0
  78. data/lib/Hashiparmentier/UI/ChoixGrilleScrollUI.rb +37 -0
  79. data/lib/Hashiparmentier/UI/ChoixGrilleUI.rb +80 -0
  80. data/lib/Hashiparmentier/UI/ChoixNomUI.rb +39 -0
  81. data/lib/Hashiparmentier/UI/ChoixTailleUI.rb +44 -0
  82. data/lib/Hashiparmentier/UI/Fenetre.rb +32 -0
  83. data/lib/Hashiparmentier/UI/FenetreFinUI.rb +71 -0
  84. data/lib/Hashiparmentier/UI/FenetreJeuUI.rb +193 -0
  85. data/lib/Hashiparmentier/UI/FenetreReglesUI.rb +28 -0
  86. data/lib/Hashiparmentier/UI/FinUI.rb +91 -0
  87. data/lib/Hashiparmentier/UI/GrilleJouableUI.rb +47 -0
  88. data/lib/Hashiparmentier/UI/GrilleUI.rb +140 -0
  89. data/lib/Hashiparmentier/UI/IleUI.rb +87 -0
  90. data/lib/Hashiparmentier/UI/JeuUI.rb +161 -0
  91. data/lib/Hashiparmentier/UI/Menu.rb +322 -0
  92. data/lib/Hashiparmentier/UI/MenuUI.rb +107 -0
  93. data/lib/Hashiparmentier/UI/PontUI.rb +135 -0
  94. data/lib/Hashiparmentier/UI/RacineUI.rb +142 -0
  95. data/lib/Hashiparmentier/UI/ReglesUI.rb +22 -0
  96. data/lib/Hashiparmentier/doc/Action.html +259 -0
  97. data/lib/Hashiparmentier/doc/Aide.html +229 -0
  98. data/lib/Hashiparmentier/doc/AideUI.html +168 -0
  99. data/lib/Hashiparmentier/doc/Case.html +473 -0
  100. data/lib/Hashiparmentier/doc/CaseUI.html +343 -0
  101. data/lib/Hashiparmentier/doc/ChoixDifficulteUI.html +209 -0
  102. data/lib/Hashiparmentier/doc/ChoixGrilleScrollUI.html +239 -0
  103. data/lib/Hashiparmentier/doc/ChoixGrilleUI.html +276 -0
  104. data/lib/Hashiparmentier/doc/ChoixNomUI.html +215 -0
  105. data/lib/Hashiparmentier/doc/ChoixTailleUI.html +210 -0
  106. data/lib/Hashiparmentier/doc/Chrono.html +420 -0
  107. data/lib/Hashiparmentier/doc/Compte.html +514 -0
  108. data/lib/Hashiparmentier/doc/Couleur.html +422 -0
  109. data/lib/Hashiparmentier/doc/DonnerTechnique.html +245 -0
  110. data/lib/Hashiparmentier/doc/Fenetre.html +179 -0
  111. data/lib/Hashiparmentier/doc/FenetreJeuUI.html +274 -0
  112. data/lib/Hashiparmentier/doc/FenetreReglesUI.html +167 -0
  113. data/lib/Hashiparmentier/doc/FinUI.html +274 -0
  114. data/lib/Hashiparmentier/doc/Grille.html +2153 -0
  115. data/lib/Hashiparmentier/doc/GrilleJouableUI.html +229 -0
  116. data/lib/Hashiparmentier/doc/GrilleUI.html +477 -0
  117. data/lib/Hashiparmentier/doc/Hypothese.html +248 -0
  118. data/lib/Hashiparmentier/doc/Ile.html +1103 -0
  119. data/lib/Hashiparmentier/doc/IleUI.html +244 -0
  120. data/lib/Hashiparmentier/doc/Jeu.html +179 -0
  121. data/lib/Hashiparmentier/doc/JeuUI.html +471 -0
  122. data/lib/Hashiparmentier/doc/Menu.html +667 -0
  123. data/lib/Hashiparmentier/doc/MenuUI.html +416 -0
  124. data/lib/Hashiparmentier/doc/Pile.html +383 -0
  125. data/lib/Hashiparmentier/doc/Pont.html +943 -0
  126. data/lib/Hashiparmentier/doc/PontUI.html +307 -0
  127. data/lib/Hashiparmentier/doc/RacineUI.html +387 -0
  128. data/lib/Hashiparmentier/doc/ReglesUI.html +203 -0
  129. data/lib/Hashiparmentier/doc/Sauvegarde.html +672 -0
  130. data/lib/Hashiparmentier/doc/UndoRedo.html +389 -0
  131. data/lib/Hashiparmentier/doc/VerifierGrille.html +225 -0
  132. data/lib/Hashiparmentier/doc/created.rid +46 -0
  133. data/lib/Hashiparmentier/doc/css/fonts.css +167 -0
  134. data/lib/Hashiparmentier/doc/css/rdoc.css +590 -0
  135. data/lib/Hashiparmentier/doc/fonts/Lato-Light.ttf +0 -0
  136. data/lib/Hashiparmentier/doc/fonts/Lato-LightItalic.ttf +0 -0
  137. data/lib/Hashiparmentier/doc/fonts/Lato-Regular.ttf +0 -0
  138. data/lib/Hashiparmentier/doc/fonts/Lato-RegularItalic.ttf +0 -0
  139. data/lib/Hashiparmentier/doc/fonts/SourceCodePro-Bold.ttf +0 -0
  140. data/lib/Hashiparmentier/doc/fonts/SourceCodePro-Regular.ttf +0 -0
  141. data/lib/Hashiparmentier/doc/images/add.png +0 -0
  142. data/lib/Hashiparmentier/doc/images/arrow_up.png +0 -0
  143. data/lib/Hashiparmentier/doc/images/brick.png +0 -0
  144. data/lib/Hashiparmentier/doc/images/brick_link.png +0 -0
  145. data/lib/Hashiparmentier/doc/images/bug.png +0 -0
  146. data/lib/Hashiparmentier/doc/images/bullet_black.png +0 -0
  147. data/lib/Hashiparmentier/doc/images/bullet_toggle_minus.png +0 -0
  148. data/lib/Hashiparmentier/doc/images/bullet_toggle_plus.png +0 -0
  149. data/lib/Hashiparmentier/doc/images/date.png +0 -0
  150. data/lib/Hashiparmentier/doc/images/delete.png +0 -0
  151. data/lib/Hashiparmentier/doc/images/find.png +0 -0
  152. data/lib/Hashiparmentier/doc/images/loadingAnimation.gif +0 -0
  153. data/lib/Hashiparmentier/doc/images/macFFBgHack.png +0 -0
  154. data/lib/Hashiparmentier/doc/images/package.png +0 -0
  155. data/lib/Hashiparmentier/doc/images/page_green.png +0 -0
  156. data/lib/Hashiparmentier/doc/images/page_white_text.png +0 -0
  157. data/lib/Hashiparmentier/doc/images/page_white_width.png +0 -0
  158. data/lib/Hashiparmentier/doc/images/plugin.png +0 -0
  159. data/lib/Hashiparmentier/doc/images/ruby.png +0 -0
  160. data/lib/Hashiparmentier/doc/images/tag_blue.png +0 -0
  161. data/lib/Hashiparmentier/doc/images/tag_green.png +0 -0
  162. data/lib/Hashiparmentier/doc/images/transparent.png +0 -0
  163. data/lib/Hashiparmentier/doc/images/wrench.png +0 -0
  164. data/lib/Hashiparmentier/doc/images/wrench_orange.png +0 -0
  165. data/lib/Hashiparmentier/doc/images/zoom.png +0 -0
  166. data/lib/Hashiparmentier/doc/index.html +154 -0
  167. data/lib/Hashiparmentier/doc/js/darkfish.js +161 -0
  168. data/lib/Hashiparmentier/doc/js/jquery.js +4 -0
  169. data/lib/Hashiparmentier/doc/js/navigation.js +141 -0
  170. data/lib/Hashiparmentier/doc/js/navigation.js.gz +0 -0
  171. data/lib/Hashiparmentier/doc/js/search.js +109 -0
  172. data/lib/Hashiparmentier/doc/js/search_index.js +1 -0
  173. data/lib/Hashiparmentier/doc/js/search_index.js.gz +0 -0
  174. data/lib/Hashiparmentier/doc/js/searcher.js +229 -0
  175. data/lib/Hashiparmentier/doc/js/searcher.js.gz +0 -0
  176. data/lib/Hashiparmentier/doc/table_of_contents.html +1197 -0
  177. data/lib/Hashiparmentier/glade/Fin.glade +222 -0
  178. data/lib/Hashiparmentier/glade/aide.glade +127 -0
  179. data/lib/Hashiparmentier/glade/aideJeu.glade +143 -0
  180. data/lib/Hashiparmentier/glade/astuces.glade +1558 -0
  181. data/lib/Hashiparmentier/glade/fonts/VINERITC.TTF +0 -0
  182. data/lib/Hashiparmentier/glade/images/18790.ico +0 -0
  183. data/lib/Hashiparmentier/glade/images/1stars.png +0 -0
  184. data/lib/Hashiparmentier/glade/images/2stars.png +0 -0
  185. data/lib/Hashiparmentier/glade/images/3stars.png +0 -0
  186. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-07 11-48-54.png +0 -0
  187. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 17-54-16.png +0 -0
  188. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-00-00.png +0 -0
  189. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-01-25.png +0 -0
  190. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-17-16.png +0 -0
  191. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-17-40.png +0 -0
  192. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-18-01.png +0 -0
  193. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-18-23.png +0 -0
  194. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-19-00.png +0 -0
  195. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-19-17.png +0 -0
  196. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-13 18-19-54.png +0 -0
  197. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-24-24.png +0 -0
  198. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-24-44.png +0 -0
  199. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-24-58.png +0 -0
  200. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-25-16.png +0 -0
  201. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-25-36.png +0 -0
  202. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-25-51.png +0 -0
  203. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-26-04.png +0 -0
  204. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 14-26-15.png +0 -0
  205. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-01-40.png +0 -0
  206. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-02-08.png +0 -0
  207. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-02-33.png +0 -0
  208. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-02-54.png +0 -0
  209. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-03-13.png +0 -0
  210. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-03-39.png +0 -0
  211. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-03-55.png +0 -0
  212. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-04-10.png +0 -0
  213. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-33-07.png +0 -0
  214. data/lib/Hashiparmentier/glade/images/Capture du 2020-02-18 15-36-05.png +0 -0
  215. data/lib/Hashiparmentier/glade/images/LOGO.png +0 -0
  216. data/lib/Hashiparmentier/glade/images/LOGpR.png +0 -0
  217. data/lib/Hashiparmentier/glade/images/LOGpR2.png +0 -0
  218. data/lib/Hashiparmentier/glade/images/bg.jpg +0 -0
  219. data/lib/Hashiparmentier/glade/images/ex111.png +0 -0
  220. data/lib/Hashiparmentier/glade/images/ex112.png +0 -0
  221. data/lib/Hashiparmentier/glade/images/ex211.png +0 -0
  222. data/lib/Hashiparmentier/glade/images/ex212.png +0 -0
  223. data/lib/Hashiparmentier/glade/images/ex221.png +0 -0
  224. data/lib/Hashiparmentier/glade/images/ex222.png +0 -0
  225. data/lib/Hashiparmentier/glade/images/ex231.png +0 -0
  226. data/lib/Hashiparmentier/glade/images/ex232.png +0 -0
  227. data/lib/Hashiparmentier/glade/images/ex241.png +0 -0
  228. data/lib/Hashiparmentier/glade/images/ex242.png +0 -0
  229. data/lib/Hashiparmentier/glade/images/ex251.png +0 -0
  230. data/lib/Hashiparmentier/glade/images/ex252.png +0 -0
  231. data/lib/Hashiparmentier/glade/images/ex311.png +0 -0
  232. data/lib/Hashiparmentier/glade/images/ex312.png +0 -0
  233. data/lib/Hashiparmentier/glade/images/ex321.png +0 -0
  234. data/lib/Hashiparmentier/glade/images/ex322.png +0 -0
  235. data/lib/Hashiparmentier/glade/images/ex331.png +0 -0
  236. data/lib/Hashiparmentier/glade/images/ex332.png +0 -0
  237. data/lib/Hashiparmentier/glade/images/ex341.png +0 -0
  238. data/lib/Hashiparmentier/glade/images/ex342.png +0 -0
  239. data/lib/Hashiparmentier/glade/images/ex411.png +0 -0
  240. data/lib/Hashiparmentier/glade/images/ex412.png +0 -0
  241. data/lib/Hashiparmentier/glade/images/ex413.png +0 -0
  242. data/lib/Hashiparmentier/glade/images/ex421.png +0 -0
  243. data/lib/Hashiparmentier/glade/images/ex422.png +0 -0
  244. data/lib/Hashiparmentier/glade/images/ex423.png +0 -0
  245. data/lib/Hashiparmentier/glade/images/ex431.png +0 -0
  246. data/lib/Hashiparmentier/glade/images/ex432.png +0 -0
  247. data/lib/Hashiparmentier/glade/images/ex433.png +0 -0
  248. data/lib/Hashiparmentier/glade/images/ex441.png +0 -0
  249. data/lib/Hashiparmentier/glade/images/ex442.png +0 -0
  250. data/lib/Hashiparmentier/glade/images/ex443.png +0 -0
  251. data/lib/Hashiparmentier/glade/images/icone.png +0 -0
  252. data/lib/Hashiparmentier/glade/images/puzzle-solvation.gif +0 -0
  253. data/lib/Hashiparmentier/glade/images/wJapStylePlusNet.jpg +0 -0
  254. data/lib/Hashiparmentier/glade/images/wJapStylePlusNet15.jpg +0 -0
  255. data/lib/Hashiparmentier/glade/jeu.glade +539 -0
  256. data/lib/Hashiparmentier/glade/menu.glade +511 -0
  257. data/lib/Hashiparmentier/glade/regles.glade +856 -0
  258. data/lib/Hashiparmentier/map.txt +316 -0
  259. 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