hashi-ruby 1.0.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/assets/FlatColor/gtk-3.20/assets/blank.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check-mixed-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check-mixed.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/check.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/grid-selection-blank.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/grid-selection.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-checked-hover.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-checked-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-checked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-mixed-hover.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-mixed-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-checkbox-mixed.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-radio-checked-hover.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-radio-checked-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/menuitem-radio-checked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/pane-separator-grip-vertical.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/pane-separator-grip.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio-checked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio-unchecked.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/radio.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-above@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-horz-scale-has-marks-below@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-above@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive-dark.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive-dark@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below-insensitive@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider-vert-scale-has-marks-below@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/assets/slider@2.png +0 -0
- data/bin/assets/FlatColor/gtk-3.20/gnome-applications.css +429 -0
- data/bin/assets/FlatColor/gtk-3.20/gtk-widgets.css +786 -0
- data/bin/assets/FlatColor/gtk-3.20/gtk.css +113 -0
- data/bin/assets/FlatColor/gtk-3.20/gtk.css.base +108 -0
- data/bin/assets/FlatColor/gtk-3.20/settings.ini +7 -0
- data/bin/assets/FlatColor/gtk-3.20/unity.css +68 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/button.css +58 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/calendar.css +32 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/cell-row.css +25 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/check-radio.css +164 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/chrome.css +16 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/color-chooser.css +114 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/column-header.css +52 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/combobox.css +26 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/csd.css +125 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/entry.css +40 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/header-bar.css +27 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/infobar.css +90 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/linked-buttons.css +524 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/menu.css +127 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/notebook.css +200 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/osd.css +203 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/progress-scale.css +365 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/scrollbar.css +116 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/selection-mode.css +109 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/separator.css +24 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/sidebar.css +43 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/spinbutton.css +102 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/spinner.css +120 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/switch.css +63 -0
- data/bin/assets/FlatColor/gtk-3.20/widgets/toolbar.css +39 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked-selectionmode@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-checked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-mixed@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-selectionmode@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/checkbox-unchecked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-checked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-mixed@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/radio-unchecked@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-header@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-insensitive@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-selected.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch-selected@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/switch@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-close@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-maximize@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-minimize@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-active@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-backdrop@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover-dark.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover-dark@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore-hover@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/assets/titlebutton-restore@2.png +0 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/gtk-dark.css +10090 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/gtk.css +10100 -0
- data/bin/assets/Matcha-dark-aliz/gtk-3.0/thumbnail.png +0 -0
- data/bin/assets/Matcha-dark-aliz/index.theme +12 -0
- data/bin/assets/didacticiel/1.jpg +0 -0
- data/bin/assets/didacticiel/2.jpg +0 -0
- data/bin/assets/didacticiel/3.jpg +0 -0
- data/bin/assets/didacticiel/4.jpg +0 -0
- data/bin/assets/didacticiel/5.jpg +0 -0
- data/bin/assets/didacticiel/6.jpg +0 -0
- data/bin/assets/didacticiel/7.jpg +0 -0
- data/bin/assets/didacticiel/8.jpg +0 -0
- data/bin/assets/map.png +0 -0
- data/bin/db/Difficulte.rb +9 -0
- data/bin/db/GestionBase.rb +334 -0
- data/bin/db/GrilleDb.rb +15 -0
- data/bin/db/Joue.rb +10 -0
- data/bin/db/Joueur.rb +9 -0
- data/bin/db/Migration.rb +70 -0
- data/bin/db/Mode.rb +9 -0
- data/bin/db/PhrasesAventure.rb +4 -0
- data/bin/db/TestBase.rb +144 -0
- data/bin/db/base.sqlite +0 -0
- data/bin/hashi +5 -0
- data/bin/src/Action.rb +46 -0
- data/bin/src/Aides.rb +41 -0
- data/bin/src/Case.rb +410 -0
- data/bin/src/Grille.rb +914 -0
- data/bin/src/Grilles/grilles_site.txt +30 -0
- data/bin/src/Grilles/grilles_site_difficile.txt +90 -0
- data/bin/src/Grilles/grilles_site_facile.txt +90 -0
- data/bin/src/Grilles/grilles_site_moyen.txt +90 -0
- data/bin/src/Grilles/grilles_site_ser.txt +0 -0
- data/bin/src/Grilles/grilles_site_ser_difficile.txt +90 -0
- data/bin/src/Grilles/grilles_site_ser_facile.txt +90 -0
- data/bin/src/Grilles/grilles_site_ser_moyen.txt +90 -0
- data/bin/src/Hashi.rb +214 -0
- data/bin/src/Lien.rb +57 -0
- data/bin/src/Pile.rb +41 -0
- data/bin/src/Rakefile.rb +6 -0
- data/bin/src/SerGrille.rb +430 -0
- data/bin/src/Test.rb +24 -0
- data/bin/src/Test2.rb +135 -0
- data/bin/src/Utilitaire.rb +12 -0
- data/bin/src/testSerGrille.rb +21 -0
- data/bin/src/ui/AfficheurGrille.rb +385 -0
- data/bin/src/ui/AfficheurJeu.rb +209 -0
- data/bin/src/ui/AfficheurSelection.rb +38 -0
- data/bin/src/ui/Afrique.rb +38 -0
- data/bin/src/ui/AmeriqueNord.rb +38 -0
- data/bin/src/ui/AmeriqueSud.rb +38 -0
- data/bin/src/ui/Antarctique.rb +32 -0
- data/bin/src/ui/Asie.rb +38 -0
- data/bin/src/ui/Aventure.rb +132 -0
- data/bin/src/ui/Carte.rb +282 -0
- data/bin/src/ui/ChargementAventure.rb +61 -0
- data/bin/src/ui/Classement.rb +42 -0
- data/bin/src/ui/Connexion.rb +60 -0
- data/bin/src/ui/Didacticiel.rb +169 -0
- data/bin/src/ui/Etiquette.rb +24 -0
- data/bin/src/ui/Europe.rb +38 -0
- data/bin/src/ui/ListeClassement.rb +44 -0
- data/bin/src/ui/Menu.rb +74 -0
- data/bin/src/ui/Monde.rb +167 -0
- data/bin/src/ui/Oceanie.rb +38 -0
- data/bin/src/ui/SelecteurGrille.rb +58 -0
- data/bin/src/ui/SelectionDifficulte.rb +38 -0
- data/bin/src/ui/SelectionUtilisateur.rb +46 -0
- data/bin/src/ui/Timer.rb +29 -0
- metadata +479 -0
data/bin/src/Grille.rb
ADDED
@@ -0,0 +1,914 @@
|
|
1
|
+
require_relative "Case"
|
2
|
+
require_relative "Aides"
|
3
|
+
require_relative "Utilitaire"
|
4
|
+
require_relative "SerGrille"
|
5
|
+
require_relative "Pile"
|
6
|
+
require_relative "Action"
|
7
|
+
|
8
|
+
#Classe représentant une Grille
|
9
|
+
# Une grille peut :
|
10
|
+
# avoir une table des cases : méthode contientCaseAvecEtiquette
|
11
|
+
# avoir une table des liens entre les cases, et supprimer les liens
|
12
|
+
# commencer les hypotheses des liens, les valider ou annuler
|
13
|
+
|
14
|
+
class Grille
|
15
|
+
|
16
|
+
# @tabCase => tableau contenant les cases (objet Case)
|
17
|
+
# @tabLien => tableau contenant les liens (objet Lien)
|
18
|
+
# @hypothese => boolean correspondnant a l'état du jeu, en mode hypothese ou non
|
19
|
+
# @grilleRes => object Grille contenant la grille finie et correcte
|
20
|
+
# @hauteur => entier, hauteur de la grille
|
21
|
+
# @largeur => entier, largeur de la grille
|
22
|
+
# @timer => entier, temps déja passé sur la grille en seconde
|
23
|
+
# @grilleFini => boolean correspondant a l'état de la grille, si elle est fini ou non (et correcte)
|
24
|
+
# @nbAides => entier, représentant le nombre d'aides déja utilisées
|
25
|
+
|
26
|
+
|
27
|
+
# Méthodes d'accès en lecture/écriture de @tabCase
|
28
|
+
attr_accessor :tabCase
|
29
|
+
# Méthodes d'accès en lecture/écriture de @tabLien
|
30
|
+
attr_accessor :tabLien
|
31
|
+
# Méthodes d'accès en lecture/écriture de @hypothese
|
32
|
+
attr_accessor :hypothese
|
33
|
+
|
34
|
+
# Méthodes d'accès en lecture/écriture de @grilleRes
|
35
|
+
attr_accessor :grilleRes
|
36
|
+
|
37
|
+
# Méthode d'accès en lecture de @hauteur
|
38
|
+
attr_reader :hauteur
|
39
|
+
|
40
|
+
# Méthode d'accès en lecture de @largeur
|
41
|
+
attr_reader :largeur
|
42
|
+
|
43
|
+
# Méthodes d'accès en lecture/écriture de @timer
|
44
|
+
attr_accessor :timer
|
45
|
+
|
46
|
+
# Méthodes d'accès en lecture/écriture de @grilleFini
|
47
|
+
attr_accessor :grilleFinie
|
48
|
+
|
49
|
+
# Méthodes d'accès en lecture/écriture de @nbAides
|
50
|
+
attr_accessor :nbAides
|
51
|
+
|
52
|
+
# Rend la méthode new privée
|
53
|
+
private_class_method :new
|
54
|
+
|
55
|
+
# Initialisation de la grille
|
56
|
+
#
|
57
|
+
# === Paramètres
|
58
|
+
#
|
59
|
+
# * +tab+ => la table des cases
|
60
|
+
# * +hauteur+ => le nombre maximal des lignes de la grille
|
61
|
+
# * +largeur+ => le nombre maximal des colonnes de la grille
|
62
|
+
#
|
63
|
+
def initialize(tab,hauteur,largeur,grilleRes)
|
64
|
+
@hypothese=false
|
65
|
+
@tabLien=Array.new()
|
66
|
+
#@tabCase=Array.new() # Inutile avec la ligne d'en dessous
|
67
|
+
@tabCase=tab
|
68
|
+
@hauteur=hauteur
|
69
|
+
@largeur=largeur
|
70
|
+
@grilleFinie=false
|
71
|
+
@grilleRes=grilleRes
|
72
|
+
@pile=Pile.creer()
|
73
|
+
@pileRedo=Pile.creer()
|
74
|
+
@timer ||= 0
|
75
|
+
@nbAides ||= 0
|
76
|
+
|
77
|
+
|
78
|
+
for i in 0..@tabCase.length-1 do
|
79
|
+
for j in 0..@tabCase.length-1 do
|
80
|
+
if(i !=j)
|
81
|
+
#on récupère le voisin le plus proche dans la direction nord
|
82
|
+
if((@tabCase[i].tabVoisins[0]==false && @tabCase[i].ligne>@tabCase[j].ligne && @tabCase[i].colonne==@tabCase[j].colonne) || ( @tabCase[i].ligne>@tabCase[j].ligne && @tabCase[i].colonne==@tabCase[j].colonne && @tabCase[j].ligne>@tabCase[i].tabVoisins[0].ligne ) )
|
83
|
+
@tabCase[i].tabVoisins[0]=@tabCase[j]
|
84
|
+
@tabCase[i].tabTriangle[0]=true
|
85
|
+
end
|
86
|
+
#on récupère le voisin le plus proche dans la direction Sud
|
87
|
+
if((@tabCase[i].tabVoisins[2]==false && @tabCase[i].ligne<@tabCase[j].ligne && @tabCase[i].colonne==@tabCase[j].colonne) || ( @tabCase[i].ligne<@tabCase[j].ligne && @tabCase[i].colonne==@tabCase[j].colonne && @tabCase[j].ligne<@tabCase[i].tabVoisins[2].ligne ) )
|
88
|
+
@tabCase[i].tabVoisins[2]=@tabCase[j]
|
89
|
+
@tabCase[i].tabTriangle[2]=true
|
90
|
+
end
|
91
|
+
#on récupère le voisin le plus proche dans la direction ouest
|
92
|
+
if((@tabCase[i].tabVoisins[3]==false && @tabCase[i].colonne>@tabCase[j].colonne && @tabCase[i].ligne==@tabCase[j].ligne) || ( @tabCase[i].colonne>@tabCase[j].colonne && @tabCase[i].ligne==@tabCase[j].ligne && @tabCase[j].colonne>@tabCase[i].tabVoisins[3].colonne ) )
|
93
|
+
@tabCase[i].tabVoisins[3]=@tabCase[j]
|
94
|
+
@tabCase[i].tabTriangle[3]=true
|
95
|
+
end
|
96
|
+
#on récupère le voisin le plus proche dans la direction est
|
97
|
+
if((@tabCase[i].tabVoisins[1]==false && @tabCase[i].colonne<@tabCase[j].colonne && @tabCase[i].ligne==@tabCase[j].ligne) || ( @tabCase[i].colonne<@tabCase[j].colonne && @tabCase[i].ligne==@tabCase[j].ligne && @tabCase[j].colonne<@tabCase[i].tabVoisins[1].colonne ) )
|
98
|
+
@tabCase[i].tabVoisins[1]=@tabCase[j]
|
99
|
+
@tabCase[i].tabTriangle[1]=true
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
self.actuCroisement()
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
# Méthode de création d'une grille
|
110
|
+
#
|
111
|
+
# === Paramètres
|
112
|
+
#
|
113
|
+
# * +tab+ => la table des cases
|
114
|
+
# * +hauteur+ => le nombre maximal des lignes de la grille
|
115
|
+
# * +largeur+ => le nombre maximal des colonnes de la grille
|
116
|
+
#
|
117
|
+
def Grille.creer(tab,hauteur,largeur,grilleRes)
|
118
|
+
new(tab,hauteur,largeur,grilleRes)
|
119
|
+
end
|
120
|
+
|
121
|
+
# Méthode d'affichage de la table des cases
|
122
|
+
#
|
123
|
+
def tabCaseAfficher()
|
124
|
+
for i in 0..@tabCase.length-1
|
125
|
+
puts(tabCase[i])
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
# Méthode qui trouve une case selon ses coordonnées
|
130
|
+
#
|
131
|
+
# === Paramètres
|
132
|
+
#
|
133
|
+
# * +ligne+ => la position dans la grille
|
134
|
+
# * +colonne+ => la position dans la grille
|
135
|
+
#
|
136
|
+
# === Retour
|
137
|
+
#
|
138
|
+
# Retourne la case sinon retourne faux
|
139
|
+
#
|
140
|
+
def caseIci(ligne, colonne)
|
141
|
+
@tabCase.each do |c|
|
142
|
+
if(c.ligne==ligne && c.colonne==colonne)
|
143
|
+
return c
|
144
|
+
end
|
145
|
+
end
|
146
|
+
return false
|
147
|
+
end
|
148
|
+
|
149
|
+
# Méthode de suppression des liens entres les cases
|
150
|
+
#
|
151
|
+
# === Paramètres
|
152
|
+
#
|
153
|
+
# * +l+ => le lien à supprimer
|
154
|
+
#
|
155
|
+
def supprimerLien(l)
|
156
|
+
i=Utilitaire.index(@tabLien,l)
|
157
|
+
x=Utilitaire.index(@tabCase,@tabLien[i].case1)
|
158
|
+
y=Utilitaire.index(@tabCase,@tabLien[i].case2)
|
159
|
+
#on peut remplacer par l.case1 et l.case2 au lieu des indices
|
160
|
+
@tabLien.delete_at(i)
|
161
|
+
|
162
|
+
self.actuCroisement()
|
163
|
+
|
164
|
+
end
|
165
|
+
|
166
|
+
# Méthode pour remplir la table des cases avec une valeur
|
167
|
+
#
|
168
|
+
# === Paramètres
|
169
|
+
#
|
170
|
+
# * +ligne+ => entier correspondant la ligne d'une case de la grille
|
171
|
+
# * +colonne+ => entier correspondant la colonne d'une case de la grille
|
172
|
+
#
|
173
|
+
# === Retour
|
174
|
+
#
|
175
|
+
# Retourne la valeur de la case, sinon retourne faux
|
176
|
+
#
|
177
|
+
def contientCaseAvecEtiquette(ligne,colonne)
|
178
|
+
for i in 0..@tabCase.length-1 do
|
179
|
+
if(@tabCase[i].ligne==ligne && @tabCase[i].colonne==colonne)
|
180
|
+
return @tabCase[i]
|
181
|
+
end
|
182
|
+
end
|
183
|
+
return false
|
184
|
+
end
|
185
|
+
|
186
|
+
|
187
|
+
# Méthode lors d'un clic sur un cercle/une case
|
188
|
+
#
|
189
|
+
# === Paramètres
|
190
|
+
#
|
191
|
+
# * +case1+ => la case du clic
|
192
|
+
# * +tabLien2+ => le tableau qui va contenir les liens à mettre en surbrillance
|
193
|
+
#
|
194
|
+
# === Retour
|
195
|
+
#rien
|
196
|
+
#
|
197
|
+
def clicCercle(case1,tabLien2)
|
198
|
+
for i in 0..3 do
|
199
|
+
if(case1.tabVoisins[i]!=false)
|
200
|
+
if(case1.nbLienEntreDeuxCases(@tabLien,i) != 0 )
|
201
|
+
c=0
|
202
|
+
#on push le ou les lien(s) si ils ne sont pas dans le tabLien2
|
203
|
+
@tabLien.each do |lien|
|
204
|
+
if((lien.case1.ligne == case1.ligne && lien.case1.colonne == case1.colonne) && (lien.case2.ligne == case1.tabVoisins[i].ligne && lien.case2.colonne == case1.tabVoisins[i].colonne ) )
|
205
|
+
if( Utilitaire.index(tabLien2,lien)==-1 )
|
206
|
+
tabLien2.push(lien)
|
207
|
+
c +=1
|
208
|
+
end
|
209
|
+
elsif ((lien.case2.ligne == case1.ligne && lien.case2.colonne == case1.colonne) && (lien.case1.ligne == case1.tabVoisins[i].ligne && lien.case1.colonne == case1.tabVoisins[i].colonne ))
|
210
|
+
if( Utilitaire.index(tabLien2,lien)==-1 )
|
211
|
+
tabLien2.push(lien)
|
212
|
+
c +=1
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
|
218
|
+
if(c!=0)
|
219
|
+
clicCercle(case1.tabVoisins[i],tabLien2)
|
220
|
+
end
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
return
|
225
|
+
end
|
226
|
+
|
227
|
+
|
228
|
+
|
229
|
+
# test si une archipelle n'est pas complète(c'est a dire qu'il reste au moins un triangle dans l'archipelle))
|
230
|
+
#
|
231
|
+
# === Paramètres
|
232
|
+
#
|
233
|
+
# * +case1+ => la case du clic
|
234
|
+
# * +tabCase2+ => le tableau qui va contenir les case deja test
|
235
|
+
#
|
236
|
+
# === Retour
|
237
|
+
# boolean sur le test
|
238
|
+
#
|
239
|
+
def ArchiNonComplete(case1,tabCase2)
|
240
|
+
if(case1.nbVoisinsDispo()==0)
|
241
|
+
if(tabCase2.include?(case1)==false)
|
242
|
+
tabCase2.push(case1)
|
243
|
+
end
|
244
|
+
for i in 0..3 do
|
245
|
+
if(case1.tabVoisins[i]!=false && case1.nbLienEntreDeuxCases(@tabLien,i) != 0 )
|
246
|
+
if(tabCase2.include?(case1.tabVoisins[i])==false)
|
247
|
+
if(ArchiNonComplete(case1.tabVoisins[i],tabCase2)==true)
|
248
|
+
return true
|
249
|
+
end
|
250
|
+
end
|
251
|
+
|
252
|
+
end
|
253
|
+
end
|
254
|
+
else
|
255
|
+
return true
|
256
|
+
end
|
257
|
+
|
258
|
+
return false
|
259
|
+
end
|
260
|
+
|
261
|
+
|
262
|
+
|
263
|
+
|
264
|
+
# Méthode appelée lors d'un clic sur le triangle d'un cercle/une case
|
265
|
+
#
|
266
|
+
# === Paramètres
|
267
|
+
#
|
268
|
+
# * +case1+ => la case du clic
|
269
|
+
# * +pos+ => entier correspondant la position du lien de deux cases
|
270
|
+
#
|
271
|
+
def clicTriangle(case1,pos)
|
272
|
+
l=case1.creerLien(pos,@hypothese,@tabLien)
|
273
|
+
@pile.empiler(Action.creer("ajout",l))
|
274
|
+
#@pile.afficherPile()
|
275
|
+
@pileRedo.vider()
|
276
|
+
self.actuCroisement()
|
277
|
+
end
|
278
|
+
|
279
|
+
# actualise les triangles de chaques cases pour empecher les croisements de liens et met à jours les autres triangles.
|
280
|
+
#
|
281
|
+
def actuCroisement()
|
282
|
+
|
283
|
+
@tabCase.each do |c|
|
284
|
+
if(c.etiquetteCase.to_i() > c.nbLienCase(@tabLien) )
|
285
|
+
for i in 0..3 do
|
286
|
+
if(c.tabVoisins[i]!=false)
|
287
|
+
c.tabTriangle[i]=true
|
288
|
+
else
|
289
|
+
c.tabTriangle[i]=false
|
290
|
+
end
|
291
|
+
end
|
292
|
+
end
|
293
|
+
|
294
|
+
for i in 0..3 do
|
295
|
+
if(c.tabTriangle[i]==true)
|
296
|
+
if(c.nbLienEntreDeuxCases(@tabLien,i)<=1 && c.etiquetteCase.to_i() > c.nbLienCase(@tabLien))
|
297
|
+
c.tabTriangle[i]=true
|
298
|
+
else
|
299
|
+
c.tabTriangle[i]=false
|
300
|
+
end
|
301
|
+
end
|
302
|
+
end
|
303
|
+
|
304
|
+
|
305
|
+
for i in 0..3 do
|
306
|
+
if(c.tabTriangle[i]==true)
|
307
|
+
if(c.lienPasseEntreDeuxCases(@tabLien,i)==false && c.etiquetteCase.to_i() > c.nbLienCase(@tabLien) && c.nbLienEntreDeuxCases(@tabLien,i)<=1)
|
308
|
+
c.tabTriangle[i]=true
|
309
|
+
else
|
310
|
+
c.tabTriangle[i]=false
|
311
|
+
end
|
312
|
+
end
|
313
|
+
end
|
314
|
+
|
315
|
+
|
316
|
+
end
|
317
|
+
|
318
|
+
@tabCase.each do |c|
|
319
|
+
for i in 0..3 do
|
320
|
+
if(c.tabVoisins[i]!=false && c.tabVoisins[i].tabTriangle[(i+2)%4]==false)
|
321
|
+
c.tabTriangle[i]=false
|
322
|
+
end
|
323
|
+
end
|
324
|
+
|
325
|
+
end
|
326
|
+
|
327
|
+
|
328
|
+
end
|
329
|
+
|
330
|
+
|
331
|
+
# Méthode appelée lors du clic sur un lien pour le supprimer
|
332
|
+
#
|
333
|
+
# === Paramètres
|
334
|
+
#
|
335
|
+
# * +l+ => le lien qui a été cliqué
|
336
|
+
#
|
337
|
+
def clicLien(l)
|
338
|
+
@pile.empiler(Action.creer("suppression",l))
|
339
|
+
self.supprimerLien(l)
|
340
|
+
@pileRedo.vider()
|
341
|
+
end
|
342
|
+
|
343
|
+
# Méthode pour commencer à faire une hypothèse
|
344
|
+
#
|
345
|
+
def commencerHypothese()
|
346
|
+
@pile.empiler(Action.creer("debutHypothese",nil))
|
347
|
+
@hypothese=true
|
348
|
+
end
|
349
|
+
|
350
|
+
# Méthode pour valider une hypothèse
|
351
|
+
#
|
352
|
+
def validerHypothese()
|
353
|
+
for i in 0..@tabLien.length-1 do
|
354
|
+
if(@tabLien[i].hypothese==true)
|
355
|
+
@tabLien[i].hypothese=false
|
356
|
+
end
|
357
|
+
end
|
358
|
+
@pile.empiler(Action.creer("hypotheseValidee",nil) )
|
359
|
+
@hypothese=false
|
360
|
+
end
|
361
|
+
|
362
|
+
# Méthode permettant de savoir si un lien est entre les même case qu'un autre (ATTENTION : retourne nil s'il est le seul)
|
363
|
+
#
|
364
|
+
# === Paramètres
|
365
|
+
#
|
366
|
+
# * +l+ => un lien
|
367
|
+
#
|
368
|
+
# === Retour
|
369
|
+
#
|
370
|
+
# Retourne le lien si c'est le même, sinon nil
|
371
|
+
#
|
372
|
+
def lienSimilaire(l)
|
373
|
+
@tabLien.each do |lien|
|
374
|
+
if(l!=lien && (lien.case1==l.case1 && lien.case2==l.case2) || (lien.case1==l.case2 && lien.case2==l.case1))
|
375
|
+
return lien
|
376
|
+
end
|
377
|
+
end
|
378
|
+
return nil
|
379
|
+
end
|
380
|
+
|
381
|
+
|
382
|
+
# Méthode permettant de savoir si un lien est présent dans un tableau de lien en comparent les coordonée des cases
|
383
|
+
#
|
384
|
+
# === Paramètres
|
385
|
+
#
|
386
|
+
# * +l+ => un lien
|
387
|
+
# * +tab+ => un tableau de ;lien
|
388
|
+
#
|
389
|
+
# === Retour
|
390
|
+
# un lien ou null
|
391
|
+
#
|
392
|
+
def leMemeLien(l,tab)
|
393
|
+
tab.each do |lien|
|
394
|
+
if((lien.case1.ligne==l.case1.ligne && lien.case1.colonne==l.case1.colonne && lien.case2.ligne==l.case2.ligne && lien.case2.colonne==l.case2.colonne) || (lien.case1.ligne==l.case2.ligne && lien.case1.colonne==l.case2.colonne && lien.case2.ligne==l.case1.ligne && lien.case2.colonne==l.case1.colonne))
|
395
|
+
return lien
|
396
|
+
end
|
397
|
+
end
|
398
|
+
return nil
|
399
|
+
end
|
400
|
+
|
401
|
+
|
402
|
+
|
403
|
+
|
404
|
+
# Méthode permettant de tester si la grille est terminée ou non
|
405
|
+
#
|
406
|
+
# === Retour
|
407
|
+
# boolean correspondant au test
|
408
|
+
#
|
409
|
+
def grilleFinie?()
|
410
|
+
if( self.nbErreurGrille()==0 && @tabLien.length==@grilleRes.tabLien.length )
|
411
|
+
@grilleFinie=true
|
412
|
+
return true
|
413
|
+
end
|
414
|
+
|
415
|
+
return false
|
416
|
+
end
|
417
|
+
|
418
|
+
|
419
|
+
|
420
|
+
|
421
|
+
|
422
|
+
|
423
|
+
# Méthode permettant de savoir le nb d'erreur sur la grille
|
424
|
+
#
|
425
|
+
# === Retour
|
426
|
+
# entier correspondant au nombre d'erreur
|
427
|
+
#
|
428
|
+
def nbErreurGrille()
|
429
|
+
nbErreur=0
|
430
|
+
|
431
|
+
tabRes=Marshal.load(Marshal.dump(@grilleRes.tabLien))
|
432
|
+
|
433
|
+
@tabLien.each do |lien|
|
434
|
+
|
435
|
+
l=leMemeLien(lien,tabRes)
|
436
|
+
if( l!=nil )
|
437
|
+
tabRes.delete(l)
|
438
|
+
else
|
439
|
+
nbErreur+=1
|
440
|
+
end
|
441
|
+
|
442
|
+
end
|
443
|
+
|
444
|
+
return nbErreur
|
445
|
+
end
|
446
|
+
|
447
|
+
|
448
|
+
|
449
|
+
# Méthode permettant de retourner au dernier etat correct de la grille
|
450
|
+
#
|
451
|
+
# === Retour
|
452
|
+
# entier correspondant au nombre d'erreur lors de l'appel de la methode
|
453
|
+
#
|
454
|
+
def verification()
|
455
|
+
val=nbErreurGrille()
|
456
|
+
while(self.nbErreurGrille()!=0 )
|
457
|
+
self.annuler()
|
458
|
+
end
|
459
|
+
@pileRedo.vider()
|
460
|
+
return val
|
461
|
+
|
462
|
+
end
|
463
|
+
|
464
|
+
|
465
|
+
|
466
|
+
|
467
|
+
# Méthode pour annuler une hypothèse
|
468
|
+
#
|
469
|
+
def annulerHypothese()
|
470
|
+
|
471
|
+
a = @pile.sommet()
|
472
|
+
while(a.action != "debutHypothese")
|
473
|
+
if(a.action == "ajout")
|
474
|
+
self.supprimerLien( a.lien )
|
475
|
+
end
|
476
|
+
|
477
|
+
if(a.action == "suppression")
|
478
|
+
a.lien.case1.creerLien(Utilitaire.index(a.lien.case1.tabVoisins,a.lien.case2),a.lien.hypothese,@tabLien)
|
479
|
+
self.actuCroisement()
|
480
|
+
end
|
481
|
+
|
482
|
+
@pile.depiler()
|
483
|
+
a = @pile.sommet()
|
484
|
+
end
|
485
|
+
@pile.depiler()
|
486
|
+
|
487
|
+
@tabLien.each do |l|
|
488
|
+
l.hypothese=false
|
489
|
+
end
|
490
|
+
|
491
|
+
|
492
|
+
|
493
|
+
@hypothese=false
|
494
|
+
end
|
495
|
+
|
496
|
+
|
497
|
+
# Méthode pour annuler une action (Undo)
|
498
|
+
#
|
499
|
+
def annuler()
|
500
|
+
|
501
|
+
if( !@pile.estVide() )
|
502
|
+
a = @pile.sommet()
|
503
|
+
|
504
|
+
@pileRedo.empiler(a) #quand on depile en Undo on doit empiler en Redo
|
505
|
+
|
506
|
+
if(a.action == "ajout")
|
507
|
+
@pile.depiler()
|
508
|
+
self.supprimerLien( a.lien )
|
509
|
+
end
|
510
|
+
|
511
|
+
if(a.action == "suppression")
|
512
|
+
@pile.depiler()
|
513
|
+
a.lien.case1.creerLien(Utilitaire.index(a.lien.case1.tabVoisins,a.lien.case2),a.lien.hypothese,@tabLien)
|
514
|
+
self.actuCroisement()
|
515
|
+
end
|
516
|
+
|
517
|
+
if(a.action == "hypotheseValidee")
|
518
|
+
|
519
|
+
@pile.depiler()
|
520
|
+
a = @pile.sommet()
|
521
|
+
@pileRedo.empiler(a)
|
522
|
+
while(a.action != "debutHypothese")
|
523
|
+
if(a.action == "ajout")
|
524
|
+
self.supprimerLien( a.lien )
|
525
|
+
end
|
526
|
+
|
527
|
+
if(a.action == "suppression")
|
528
|
+
a.lien.case1.creerLien(Utilitaire.index(a.lien.case1.tabVoisins,a.lien.case2),a.lien.hypothese,@tabLien)
|
529
|
+
self.actuCroisement()
|
530
|
+
end
|
531
|
+
|
532
|
+
@pile.depiler()
|
533
|
+
a = @pile.sommet()
|
534
|
+
@pileRedo.empiler(a)
|
535
|
+
end
|
536
|
+
@pile.depiler()
|
537
|
+
end
|
538
|
+
|
539
|
+
end
|
540
|
+
|
541
|
+
end
|
542
|
+
|
543
|
+
|
544
|
+
# Méthode pour refaire une action (Redo)
|
545
|
+
#
|
546
|
+
def refaire()
|
547
|
+
|
548
|
+
|
549
|
+
if( !@pileRedo.estVide() )
|
550
|
+
a = @pileRedo.sommet()
|
551
|
+
@pile.empiler(a) #quand on depile en Redo on doit empiler en Undo
|
552
|
+
|
553
|
+
if(a.action == "ajout")
|
554
|
+
@pileRedo.depiler()
|
555
|
+
a.lien.case1.creerLien(Utilitaire.index(a.lien.case1.tabVoisins,a.lien.case2),a.lien.hypothese,@tabLien)
|
556
|
+
self.actuCroisement()
|
557
|
+
end
|
558
|
+
|
559
|
+
if(a.action == "suppression")
|
560
|
+
@pileRedo.depiler()
|
561
|
+
self.supprimerLien( a.lien )
|
562
|
+
end
|
563
|
+
|
564
|
+
if(a.action == "hypotheseValidee")
|
565
|
+
|
566
|
+
@pileRedo.depiler()
|
567
|
+
a = @pileRedo.sommet()
|
568
|
+
@pile.empiler(a)
|
569
|
+
while(a.action != "debutHypothese")
|
570
|
+
if(a.action == "ajout")
|
571
|
+
a.lien.case1.creerLien(Utilitaire.index(a.lien.case1.tabVoisins,a.lien.case2),a.lien.hypothese,@tabLien)
|
572
|
+
self.actuCroisement()
|
573
|
+
end
|
574
|
+
|
575
|
+
if(a.action == "suppression")
|
576
|
+
self.supprimerLien( a.lien )
|
577
|
+
end
|
578
|
+
|
579
|
+
@pileRedo.depiler()
|
580
|
+
a = @pileRedo.sommet()
|
581
|
+
@pile.empiler(a)
|
582
|
+
end
|
583
|
+
@pileRedo.depiler()
|
584
|
+
end
|
585
|
+
|
586
|
+
end
|
587
|
+
|
588
|
+
|
589
|
+
end
|
590
|
+
|
591
|
+
|
592
|
+
# Méthode pour réinitialiser toute la grille et les actions (en gros nouveau départ)
|
593
|
+
#
|
594
|
+
def reinitialiser()
|
595
|
+
for i in 0..@tabLien.length-1 do
|
596
|
+
self.clicLien(@tabLien[i])
|
597
|
+
end
|
598
|
+
@pile.vider()
|
599
|
+
@pileRedo.vider()
|
600
|
+
end
|
601
|
+
|
602
|
+
|
603
|
+
#methode pour les aides
|
604
|
+
#
|
605
|
+
# === Retour
|
606
|
+
#
|
607
|
+
# Retourne un objet Aides
|
608
|
+
#
|
609
|
+
def obtenirAide()
|
610
|
+
aides1=Array.new() #aide qui utilise l'etiquette de la case et sa postion dans la grille
|
611
|
+
aides2=Array.new() #aide qui utilise l'etiquette de la case et sa liste de voisins
|
612
|
+
aides3=Array.new() #aide qui utilise l'etiquette de la case et sa liste de voisins ainsi que toute l'archipelle
|
613
|
+
|
614
|
+
niveau=1
|
615
|
+
|
616
|
+
|
617
|
+
#on génere les aides par rapport a la grille actuelle ici, on push toutes les aides possibles dans les tableaux correspondant à leurs difficultés
|
618
|
+
|
619
|
+
@tabCase.each do |c|
|
620
|
+
if( (c.etiquetteCase.to_i - c.nbLienCase(@tabLien))!=0 )
|
621
|
+
|
622
|
+
|
623
|
+
#=================NIVEAU 1==============#
|
624
|
+
|
625
|
+
|
626
|
+
|
627
|
+
if( c.nbVoisinsDispo()==1 && c.etiquetteCase.to_i>c.nbLienCase(@tabLien) )
|
628
|
+
aides1.push( Aides.creer(1,c,"Une case #{c.etiquetteCase} possède exactement un voisin; il est donc possible de créer tous les liens restants vers ce seul voisin."))
|
629
|
+
# "Si une case avec une etiquette de #{c.etiquetteCase} possède exactement un voisin et possède encore au moins un pont créable; il est possible de créer tous les ponts restants"))
|
630
|
+
end
|
631
|
+
|
632
|
+
|
633
|
+
if( (c.etiquetteCase.to_i - c.nbLienCase(@tabLien)) == c.nbLienCasePossible(@tabLien) )
|
634
|
+
aides1.push( Aides.creer(1,c,"Une case #{c.etiquetteCase} possède autant de ponts réalisables que de directions possibles, que ce soit en simple pont ou en double ponts; il est donc possible de créer tous les liens restants vers tous ses voisins."))
|
635
|
+
#"Si une case avec une etiquette de #{c.etiquetteCase} possède autant de ponts créables que (l'étiquette - ponts); il est possible de créer tous les ponts restants"))
|
636
|
+
end
|
637
|
+
|
638
|
+
|
639
|
+
|
640
|
+
|
641
|
+
|
642
|
+
for i in 0..1 do
|
643
|
+
if( c.etiquetteCase.to_i - c.nbLienCase(@tabLien) == 3-i && c.nbVoisinsDispo()==2 && c.nbCasePasDejaRelie(@tabLien)==2-i )
|
644
|
+
aides1.push( Aides.creer(1,c,"Une case n’a plus que #{c.etiquetteCase.to_i - c.nbLienCase(@tabLien)} ponts à créer et ne possède plus que #{c.nbVoisinsDispo()} voisins; il est donc possible de créer au moins un lien vers chaque voisins."))
|
645
|
+
#"Si une case possède une valeur de #{c.etiquetteCase.to_i - c.nbLienCase(@tabLien)} correspondant à son etiquette moins le nombre de ponts déja présent sur cette case et #{c.nbCasePasDejaRelie(@tabLien)} voisins pas encore relié, il est possible de créer au moins un pont vers chacun de ces voisins ") )
|
646
|
+
end
|
647
|
+
end
|
648
|
+
|
649
|
+
for i in 0..2 do
|
650
|
+
if( c.etiquetteCase.to_i - c.nbLienCase(@tabLien) == 5-i && c.nbVoisinsDispo()==3 && c.nbCasePasDejaRelie(@tabLien)==3-i )
|
651
|
+
aides1.push( Aides.creer(1,c,"Une case n’a plus que #{c.etiquetteCase.to_i - c.nbLienCase(@tabLien)} ponts à créer et ne possède plus que #{c.nbVoisinsDispo()} voisins; il est donc possible de créer au moins un lien vers chaque voisins."))
|
652
|
+
#"Si une case possède une valeur de #{c.etiquetteCase.to_i - c.nbLienCase(@tabLien)} correspondant à son etiquette moins le nombre de ponts déja présent sur cette case et #{c.nbCasePasDejaRelie(@tabLien)} voisins pas encore relié, il est possible de créer au moins un pont vers chacun de ces voisins ") )
|
653
|
+
end
|
654
|
+
end
|
655
|
+
|
656
|
+
for i in 0..3 do
|
657
|
+
if( c.etiquetteCase.to_i - c.nbLienCase(@tabLien) == 7-i && c.nbVoisinsDispo()==4 && c.nbCasePasDejaRelie(@tabLien)==4-i )
|
658
|
+
aides1.push( Aides.creer(1,c,"Une case n’a plus que #{c.etiquetteCase.to_i - c.nbLienCase(@tabLien)} ponts à créer; il est donc possible de créer au moins un lien vers chaque voisins."))
|
659
|
+
#"Si une case possède une valeur de #{c.etiquetteCase.to_i - c.nbLienCase(@tabLien)} correspondant à son etiquette moins le nombre de ponts déja présent sur cette case et #{c.nbCasePasDejaRelie(@tabLien)} voisins pas encore relié, il est possible de créer au moins un pont vers chacun de ces voisins ") )
|
660
|
+
end
|
661
|
+
end
|
662
|
+
|
663
|
+
|
664
|
+
|
665
|
+
#=================NIVEAU 2==============#
|
666
|
+
|
667
|
+
if(aides1.length==0)
|
668
|
+
|
669
|
+
|
670
|
+
if( (c.etiquetteCase.to_i - c.nbLienCase(@tabLien)) == c.nbLienCasePossible(@tabLien)-1 && (c.nbCasePasDejaRelie(@tabLien)==2 || c.nbCasePasDejaRelie(@tabLien)==3 || c.nbCasePasDejaRelie(@tabLien)==4 ) && c.nbVoisinsDispoPasRelieEtiRestanteDe(1,@tabLien)==1 )
|
671
|
+
aides2.push( Aides.creer(2,c,"Une case n’a plus que #{(c.etiquetteCase.to_i - c.nbLienCase(@tabLien))} ponts à créer et ne possède plus que #{c.nbCasePasDejaRelie(@tabLien)} voisins pas encore relié dont un au moins avec 1 pont restant à créer; il est donc possible de créer un pont vers chaque voisin sauf vers ce dernier."))
|
672
|
+
end
|
673
|
+
|
674
|
+
|
675
|
+
|
676
|
+
|
677
|
+
if( (c.etiquetteCase.to_i - c.nbLienCase(@tabLien)) ==4 && c.nbVoisinsDispo()==3 && c.nbVoisinsDispoEtiDe(2)>=2 && c.nbCasePasDejaRelie(@tabLien)==3 )
|
678
|
+
aides2.push( Aides.creer(2,c,"Une case n’a plus que 4 ponts à créer et ne possède plus que trois voisins dont deux au moins sont des cases 2; il est donc possible de créer un pont vers le troisième voisin pour ne pas créer d’archipel isolé."))
|
679
|
+
|
680
|
+
#"Si une case possède une valeur de 4 correspondant à son etiquette moins le nombre de ponts vers des directions déja completes et possède 3 voisins dont deux avec des etiquettes de 2, il est possible de créer un pont vers le troisieme voisin ") )
|
681
|
+
end
|
682
|
+
|
683
|
+
for i in 0..1 do
|
684
|
+
if( (c.etiquetteCase.to_i - c.nbLienCase(@tabLien)) ==3-i && c.nbVoisinsDispo()==3 && c.nbVoisinsDispoEtiDe(2)>=2 && c.nbCasePasDejaRelie(@tabLien)==2-i && !c.lienDifDeFois(2,2,@tabLien) )
|
685
|
+
aides2.push( Aides.creer(2,c,"Une case n’a plus que 4 ponts à créer et ne possède plus que trois voisins dont deux au moins sont des cases 2; il est donc possible de créer un pont vers le troisième voisin pour ne pas créer d’archipel isolé."))
|
686
|
+
#"Si une case possède une valeur de 4 correspondant à son etiquette moins le nombre de ponts vers des directions déja completes et possède 3 voisins dont deux avec des etiquettes de 2, il est possible de créer un pont vers le troisieme voisin ") )
|
687
|
+
end
|
688
|
+
end
|
689
|
+
|
690
|
+
|
691
|
+
|
692
|
+
|
693
|
+
|
694
|
+
if( c.etiquetteCase.to_i==2 && c.nbVoisinsDispo()==2 && c.nbVoisinsDispoEtiDe(2)==2 && c.nbLienCase(@tabLien)==0)
|
695
|
+
aides2.push( Aides.creer(2,c,"Une case 2 possède exactement deux voisins qui sont tous les deux des cases 2; il est donc possible de créer un pont vers chaque voisin."))
|
696
|
+
|
697
|
+
#Si une case avec une etiquette de 2 possède 2 voisins qui sont deux case avec des etiquettes de 2, il est possible de créer un pont vers chaque voisin ") )
|
698
|
+
end
|
699
|
+
|
700
|
+
|
701
|
+
|
702
|
+
if( c.etiquetteCase.to_i==2 && c.nbVoisinsDispo()==2 && c.nbVoisinsDispoEtiDe(2)==1 && c.nbLienCase(@tabLien)==0)
|
703
|
+
aides2.push( Aides.creer(2,c,"Une case 2 possède exactement deux voisins dont un est une case 2 et l’autre une case portant une valeur plus élevée; il est donc possible de créer un pont vers la case dont la valeur est la plus élevée."))
|
704
|
+
|
705
|
+
#"Si une case avec une etiquette de 2 et 0 lien possède 2 voisins dont un seul avec une etiquette de 2, il est possible de créer un pont vers l'autre voisin ") )
|
706
|
+
end
|
707
|
+
|
708
|
+
|
709
|
+
if( c.etiquetteCase.to_i==2 && c.nbVoisinsDispo()==2 && c.nbVoisinsDispoEtiDe(1)==1 && c.nbLienCase(@tabLien)==0)
|
710
|
+
aides2.push( Aides.creer(2,c,"Une case 2 possède exactement deux voisins dont l’un est une case 1; il est donc possible de créer un pont vers l’autre voisin."))
|
711
|
+
#"Si une case avec une etiquette de 2 possède 2 voisins dont un avec une etiquette de 1, il est possible de créer un pont vers l'autre voisins ") )
|
712
|
+
end
|
713
|
+
|
714
|
+
|
715
|
+
|
716
|
+
|
717
|
+
|
718
|
+
#=================NIVEAU 3==============#
|
719
|
+
|
720
|
+
|
721
|
+
if(aides2.length==0)
|
722
|
+
|
723
|
+
if( self.testArchipel1(c) )
|
724
|
+
aides3.push( Aides.creer(3,c,"Lors de la création d’un pont sur une case, un archipel peut être formé, ce qui bloquerait le jeu; il est donc possible de déterminer où créer un pont pour ne pas arriver à cette situation."))
|
725
|
+
#" Si lors de la création d'un pont la suite du jeu est bloqué car une île complette est formé(suite de case sans triangle restant relié par des ponts) , il est possible de déterminer ou créer un pont ") )
|
726
|
+
end
|
727
|
+
|
728
|
+
|
729
|
+
if( self.testArchipel2(c) )
|
730
|
+
aides3.push( Aides.creer(3,c,"Lors de la création de 2 ponts sur une case comportant 2 voisins et lui restant 2 ponts à construire, un archipel peut être formé, ce qui bloquerait le jeu; il est donc possible de déterminer où créer un pont pour ne pas arriver à cette situation."))
|
731
|
+
|
732
|
+
# Si lors de la création de deux ponts sur une case avec 2 voisins et 2 ponts restant max a construire la suite du jeu est bloqué car une île complette est formé(suite de case sans triangle restant relié par des ponts) , il est possible de déterminer ou créer au moins un pont") )
|
733
|
+
end
|
734
|
+
|
735
|
+
if( self.testArchipel3(c) )
|
736
|
+
aides3.push( Aides.creer(3,c,"Lors de la création de 4 ponts sur une case comportant 3 voisins et lui restant quatre ponts à construire, un archipel peut être formé, ce qui bloquerait le jeu; il est donc possible de déterminer où créer au moins un pont pour ne pas arriver à cette situation."))
|
737
|
+
|
738
|
+
# Si lors de la création de quatre ponts sur une case avec 3 voisins et 4 ponts restant max a construire la suite du jeu est bloqué car une ile complette est formé(suite de case sans triangle restant relié par des ponts) , il est possible de déterminer ou créer au moins un pont") )
|
739
|
+
end
|
740
|
+
|
741
|
+
end
|
742
|
+
|
743
|
+
end
|
744
|
+
|
745
|
+
|
746
|
+
end
|
747
|
+
|
748
|
+
end
|
749
|
+
|
750
|
+
|
751
|
+
#on retourne une aides en fonction du niveau
|
752
|
+
|
753
|
+
if(niveau==1 && aides1.length==0)
|
754
|
+
niveau+=1
|
755
|
+
end
|
756
|
+
if(niveau==2 && aides2.length==0)
|
757
|
+
niveau+=1
|
758
|
+
end
|
759
|
+
if(niveau==3 && aides3.length==0)
|
760
|
+
return Aides.creer(1,@tabCase[0],"Aucune aide disponible pour le moment, il est conseillé de faire une verification car les aides s'adaptent à votre grille actuelle.")
|
761
|
+
end
|
762
|
+
|
763
|
+
case(niveau)
|
764
|
+
when 1
|
765
|
+
return aides1[rand(0..(aides1.length-1) )]
|
766
|
+
when 2
|
767
|
+
return aides2[rand(0..(aides2.length-1) )]
|
768
|
+
when 3
|
769
|
+
return aides3[rand(0..(aides3.length-1) )]
|
770
|
+
end
|
771
|
+
end
|
772
|
+
|
773
|
+
|
774
|
+
|
775
|
+
|
776
|
+
|
777
|
+
|
778
|
+
# test si une seule solution est possible sur une case dans le cadre de la creation de liens pour eviter les archipelles completes avec creation d'un unique lien
|
779
|
+
#
|
780
|
+
# === Parametres
|
781
|
+
#
|
782
|
+
# * + case + = > la case pour le test
|
783
|
+
#
|
784
|
+
# === Retour
|
785
|
+
#
|
786
|
+
# boolean sur le test
|
787
|
+
#
|
788
|
+
def testArchipel1(case1)
|
789
|
+
compteur=0
|
790
|
+
|
791
|
+
|
792
|
+
if(case1.nbLienCase(@tabLien)==case1.etiquetteCase.to_i-1)
|
793
|
+
|
794
|
+
for i in 0..3 do
|
795
|
+
if(case1.tabTriangle[i]==true)
|
796
|
+
lien=case1.creerLien(i,false,tabLien)
|
797
|
+
self.actuCroisement()
|
798
|
+
if( ArchiNonComplete(case1,Array.new()) )
|
799
|
+
compteur+=1
|
800
|
+
end
|
801
|
+
supprimerLien(lien)
|
802
|
+
end
|
803
|
+
end
|
804
|
+
|
805
|
+
end
|
806
|
+
|
807
|
+
if(compteur==1)
|
808
|
+
return true
|
809
|
+
end
|
810
|
+
return false
|
811
|
+
end
|
812
|
+
|
813
|
+
|
814
|
+
# test si une seule solution est possible sur une case dans le cadre de la creation de liens pour eviter les archipelles completes avec creation de deux liens
|
815
|
+
#
|
816
|
+
# === Parametres
|
817
|
+
#
|
818
|
+
# * + case + = > la case pour le test
|
819
|
+
#
|
820
|
+
# === Retour
|
821
|
+
#
|
822
|
+
# boolean sur le test
|
823
|
+
#
|
824
|
+
def testArchipel2(case1)
|
825
|
+
|
826
|
+
if(case1.nbLienCase(@tabLien)==case1.etiquetteCase.to_i-2 && case1.nbVoisinsDispo()==2 && case1.nbCasePasDejaRelie(@tabLien)==2 && case1.nbVoisinsDispoEtiRestanteDe(1,@tabLien)==0 )
|
827
|
+
compteur=0
|
828
|
+
for i in 0..3 do
|
829
|
+
if(case1.tabTriangle[i]==true)
|
830
|
+
|
831
|
+
lien=case1.creerLien(i,false,tabLien)
|
832
|
+
lien2=case1.creerLien(i,false,tabLien)
|
833
|
+
|
834
|
+
self.actuCroisement()
|
835
|
+
if( ArchiNonComplete(case1,Array.new()) )
|
836
|
+
compteur+=1
|
837
|
+
end
|
838
|
+
|
839
|
+
supprimerLien(lien)
|
840
|
+
supprimerLien(lien2)
|
841
|
+
|
842
|
+
|
843
|
+
end
|
844
|
+
end
|
845
|
+
|
846
|
+
if(compteur==0 || compteur==1)
|
847
|
+
return true
|
848
|
+
end
|
849
|
+
|
850
|
+
end
|
851
|
+
|
852
|
+
return false
|
853
|
+
end
|
854
|
+
|
855
|
+
|
856
|
+
# test si une seule solution est possible sur une case dans le cadre de la création de liens pour eviter les archipelles complètes avec création de deux liens dans plusieurs directions
|
857
|
+
#
|
858
|
+
# === Paramètres
|
859
|
+
#
|
860
|
+
# * + case + = > la case pour le test
|
861
|
+
#
|
862
|
+
# === Retour
|
863
|
+
#
|
864
|
+
# boolean sur le test
|
865
|
+
#
|
866
|
+
def testArchipel3(case1)
|
867
|
+
|
868
|
+
if(case1.nbLienCase(@tabLien)==case1.etiquetteCase.to_i-4 && case1.nbVoisinsDispo()==3 && case1.nbCasePasDejaRelie(@tabLien)==3 && case1.nbVoisinsDispoEtiRestanteDe(1,@tabLien)==0 )
|
869
|
+
compteur=0
|
870
|
+
for i in 0..3 do
|
871
|
+
for j in 0..3 do
|
872
|
+
|
873
|
+
if(case1.tabTriangle[i]==true && case1.tabTriangle[j]==true && i!=j)
|
874
|
+
lien=case1.creerLien(i,false,tabLien)
|
875
|
+
lien2=case1.creerLien(i,false,tabLien)
|
876
|
+
lien3=case1.creerLien(j,false,tabLien)
|
877
|
+
lien4=case1.creerLien(j,false,tabLien)
|
878
|
+
|
879
|
+
|
880
|
+
self.actuCroisement()
|
881
|
+
if( !ArchiNonComplete(case1,Array.new()) )
|
882
|
+
compteur+=1
|
883
|
+
end
|
884
|
+
|
885
|
+
supprimerLien(lien)
|
886
|
+
supprimerLien(lien2)
|
887
|
+
supprimerLien(lien3)
|
888
|
+
supprimerLien(lien4)
|
889
|
+
|
890
|
+
|
891
|
+
end
|
892
|
+
|
893
|
+
end
|
894
|
+
end
|
895
|
+
|
896
|
+
if(compteur>=1)
|
897
|
+
return true
|
898
|
+
end
|
899
|
+
|
900
|
+
end
|
901
|
+
|
902
|
+
return false
|
903
|
+
end
|
904
|
+
|
905
|
+
|
906
|
+
|
907
|
+
|
908
|
+
|
909
|
+
|
910
|
+
|
911
|
+
|
912
|
+
|
913
|
+
|
914
|
+
end
|