chess_engine 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/Gemfile +5 -0
- data/Gemfile.lock +21 -0
- data/README.md +26 -0
- data/chess_engine.gemspec +14 -0
- data/lib/chess_engine/board.rb +95 -0
- data/lib/chess_engine/cli.rb +105 -0
- data/lib/chess_engine/game.rb +148 -0
- data/lib/chess_engine/input.rb +19 -0
- data/lib/chess_engine/move.rb +35 -0
- data/lib/chess_engine/piece.rb +97 -0
- data/lib/chess_engine/validator.rb +87 -0
- data/lib/chess_engine.rb +1 -0
- data/spec/board_spec.rb +70 -0
- data/spec/game_helper.rb +5 -0
- data/spec/game_spec.rb +79 -0
- data/spec/spec_helper.rb +100 -0
- data/spec/validator_spec.rb +26 -0
- data/vendor/bundle/bin/coderay +27 -0
- data/vendor/bundle/bin/pry +27 -0
- data/vendor/bundle/cache/coderay-1.1.2.gem +0 -0
- data/vendor/bundle/cache/colorize-0.8.1.gem +0 -0
- data/vendor/bundle/cache/method_source-0.9.2.gem +0 -0
- data/vendor/bundle/cache/pry-0.12.2.gem +0 -0
- data/vendor/bundle/cache/rb-readline-0.5.5.gem +0 -0
- data/vendor/bundle/gems/coderay-1.1.2/MIT-LICENSE +22 -0
- data/vendor/bundle/gems/coderay-1.1.2/README_INDEX.rdoc +123 -0
- data/vendor/bundle/gems/coderay-1.1.2/bin/coderay +215 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/duo.rb +81 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/_map.rb +17 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/comment_filter.rb +25 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/count.rb +39 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/debug.rb +49 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/debug_lint.rb +63 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/div.rb +23 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/encoder.rb +190 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/filter.rb +58 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html/css.rb +65 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html/numbering.rb +108 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html/output.rb +166 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/html.rb +333 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/json.rb +83 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/lines_of_code.rb +45 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/lint.rb +59 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/null.rb +18 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/page.rb +24 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/span.rb +23 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/statistic.rb +95 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/terminal.rb +195 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/text.rb +46 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/token_kind_filter.rb +111 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/xml.rb +72 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders/yaml.rb +50 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/encoders.rb +18 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/for_redcloth.rb +95 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/file_type.rb +151 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/plugin.rb +55 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/plugin_host.rb +221 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/helpers/word_list.rb +72 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/_map.rb +24 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/c.rb +189 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/clojure.rb +217 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/cpp.rb +217 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/css.rb +196 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/debug.rb +75 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/delphi.rb +144 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/diff.rb +221 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/erb.rb +81 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/go.rb +208 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/groovy.rb +268 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/haml.rb +168 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/html.rb +275 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/java/builtin_types.rb +421 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/java.rb +174 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/java_script.rb +237 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/json.rb +98 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/lua.rb +280 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/php.rb +527 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/python.rb +287 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/raydebug.rb +75 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/ruby/patterns.rb +178 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/ruby/string_state.rb +79 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/ruby.rb +477 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/sass.rb +232 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/scanner.rb +337 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/sql.rb +169 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/taskpaper.rb +36 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/text.rb +26 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/xml.rb +17 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners/yaml.rb +140 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/scanners.rb +27 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles/_map.rb +7 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles/alpha.rb +153 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles/style.rb +18 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/styles.rb +15 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/token_kinds.rb +85 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/tokens.rb +161 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/tokens_proxy.rb +55 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay/version.rb +3 -0
- data/vendor/bundle/gems/coderay-1.1.2/lib/coderay.rb +284 -0
- data/vendor/bundle/gems/colorize-0.8.1/CHANGELOG +65 -0
- data/vendor/bundle/gems/colorize-0.8.1/LICENSE +339 -0
- data/vendor/bundle/gems/colorize-0.8.1/README.md +105 -0
- data/vendor/bundle/gems/colorize-0.8.1/Rakefile +13 -0
- data/vendor/bundle/gems/colorize-0.8.1/colorize.gemspec +36 -0
- data/vendor/bundle/gems/colorize-0.8.1/lib/colorize/class_methods.rb +120 -0
- data/vendor/bundle/gems/colorize-0.8.1/lib/colorize/instance_methods.rb +132 -0
- data/vendor/bundle/gems/colorize-0.8.1/lib/colorize.rb +12 -0
- data/vendor/bundle/gems/colorize-0.8.1/lib/colorized_string.rb +19 -0
- data/vendor/bundle/gems/colorize-0.8.1/test/test_colorize.rb +164 -0
- data/vendor/bundle/gems/method_source-0.9.2/Gemfile +2 -0
- data/vendor/bundle/gems/method_source-0.9.2/LICENSE +25 -0
- data/vendor/bundle/gems/method_source-0.9.2/README.markdown +91 -0
- data/vendor/bundle/gems/method_source-0.9.2/Rakefile +81 -0
- data/vendor/bundle/gems/method_source-0.9.2/lib/method_source/code_helpers.rb +154 -0
- data/vendor/bundle/gems/method_source-0.9.2/lib/method_source/source_location.rb +138 -0
- data/vendor/bundle/gems/method_source-0.9.2/lib/method_source/version.rb +3 -0
- data/vendor/bundle/gems/method_source-0.9.2/lib/method_source.rb +141 -0
- data/vendor/bundle/gems/method_source-0.9.2/method_source.gemspec +35 -0
- data/vendor/bundle/gems/method_source-0.9.2/spec/method_source/code_helpers_spec.rb +43 -0
- data/vendor/bundle/gems/method_source-0.9.2/spec/method_source_spec.rb +143 -0
- data/vendor/bundle/gems/method_source-0.9.2/spec/spec_helper.rb +101 -0
- data/vendor/bundle/gems/pry-0.12.2/CHANGELOG.md +953 -0
- data/vendor/bundle/gems/pry-0.12.2/LICENSE +25 -0
- data/vendor/bundle/gems/pry-0.12.2/README.md +390 -0
- data/vendor/bundle/gems/pry-0.12.2/bin/pry +8 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/basic_object.rb +6 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/cli.rb +218 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/code/code_file.rb +110 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/code/code_range.rb +71 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/code/loc.rb +98 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/code.rb +353 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/code_object.rb +195 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/color_printer.rb +65 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/command.rb +723 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/command_set.rb +415 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/amend_line.rb +98 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/bang.rb +20 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/bang_pry.rb +17 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/abstract_formatter.rb +27 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/exception_formatter.rb +79 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/file_formatter.rb +71 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat/input_expression_formatter.rb +43 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cat.rb +63 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/cd.rb +41 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/change_inspector.rb +27 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/change_prompt.rb +46 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/clear_screen.rb +14 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/code_collector.rb +167 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/disable_pry.rb +27 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/disabled_commands.rb +2 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/easter_eggs.rb +112 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/edit/exception_patcher.rb +25 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/edit/file_and_line_locator.rb +36 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/edit.rb +200 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/exit.rb +43 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/exit_all.rb +29 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/exit_program.rb +23 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/find_method.rb +191 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/fix_indent.rb +19 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_cd.rb +26 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_install.rb +32 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_list.rb +33 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_open.rb +29 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_readme.rb +25 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_search.rb +40 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gem_stats.rb +83 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/gist.rb +102 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/help.rb +164 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/hist.rb +181 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/import_set.rb +23 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/install_command.rb +54 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/jump_to.rb +29 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/list_inspectors.rb +35 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/constants.rb +58 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/formatter.rb +51 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/globals.rb +46 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/grep.rb +19 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/instance_vars.rb +38 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/interrogatable.rb +18 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/jruby_hacks.rb +49 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/local_names.rb +33 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/local_vars.rb +37 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/ls_entity.rb +69 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/methods.rb +54 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/methods_helper.rb +46 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls/self_methods.rb +33 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ls.rb +113 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/nesting.rb +25 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/play.rb +102 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/pry_backtrace.rb +25 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/pry_version.rb +17 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/raise_up.rb +33 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/reload_code.rb +62 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/reset.rb +18 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/ri.rb +65 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/save_file.rb +61 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/shell_command.rb +75 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/shell_mode.rb +25 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_doc.rb +81 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_info.rb +216 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_input.rb +17 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/show_source.rb +53 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/stat.rb +40 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/switch_to.rb +23 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/toggle_color.rb +24 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/watch_expression/expression.rb +38 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/watch_expression.rb +107 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/whereami.rb +197 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands/wtf.rb +70 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/commands.rb +6 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/behavior.rb +255 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/convenience.rb +28 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/default.rb +159 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/config/memoization.rb +48 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/config.rb +35 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/core_extensions.rb +142 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/editor.rb +128 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/exceptions.rb +76 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/forwardable.rb +23 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/base_helpers.rb +200 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/command_helpers.rb +157 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/documentation_helpers.rb +76 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/options_helpers.rb +27 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/platform.rb +58 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/table.rb +114 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers/text.rb +115 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/helpers.rb +6 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/history.rb +161 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/hooks.rb +171 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/indent.rb +408 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/input_completer.rb +265 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/input_lock.rb +130 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/inspector.rb +27 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/last_exception.rb +61 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/method/disowned.rb +55 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/method/patcher.rb +122 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/method/weird_method_locator.rb +198 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/method.rb +552 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/object_path.rb +83 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/output.rb +50 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/pager.rb +250 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/platform.rb +91 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/plugins.rb +122 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/prompt.rb +145 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/pry_class.rb +425 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/pry_instance.rb +699 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/repl.rb +261 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/repl_file_loader.rb +73 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/ring.rb +84 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/rubygem.rb +84 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop/LICENSE +20 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop/commands.rb +195 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop/option.rb +206 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/slop.rb +661 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/terminal.rb +91 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/evalable.rb +15 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/mockable.rb +14 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/pry_tester.rb +73 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/utility.rb +26 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable/variables.rb +46 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/testable.rb +70 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/version.rb +3 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/wrapped_module/candidate.rb +131 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry/wrapped_module.rb +378 -0
- data/vendor/bundle/gems/pry-0.12.2/lib/pry.rb +132 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/CHANGES +94 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/LICENSE +25 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/README.md +81 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/Rakefile +25 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/bench/_rl_adjust_point.rb +26 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/examples/example_readline.rb +8 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/examples/example_readline_with_completion.rb +18 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/examples/tinyirb.rb +11 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/lib/rb-readline.rb +18 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/lib/rbreadline/version.rb +3 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/lib/rbreadline.rb +8920 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/lib/readline.rb +539 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/rb-readline.gemspec +51 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/setup.rb +1585 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/test/support/filesystem_completion_helper.rb +53 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/test/test_completion.rb +100 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/test/test_filename_completion_proc.rb +88 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/test/test_history.rb +29 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/test/test_rbreadline.rb +23 -0
- data/vendor/bundle/gems/rb-readline-0.5.5/test/test_readline.rb +221 -0
- data/vendor/bundle/specifications/coderay-1.1.2.gemspec +26 -0
- data/vendor/bundle/specifications/colorize-0.8.1.gemspec +38 -0
- data/vendor/bundle/specifications/method_source-0.9.2.gemspec +35 -0
- data/vendor/bundle/specifications/pry-0.12.2.gemspec +38 -0
- data/vendor/bundle/specifications/rb-readline-0.5.5.gemspec +39 -0
- metadata +363 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: b15851b7a37794b22b28cd86c5a79df19b682f8b8dbfe9c4e3d49ff461dc1bc7
|
4
|
+
data.tar.gz: dcaf7521f85bb9a629d9fc5a1cab10c380cd5eab759eeb0b1ffbaf8070dbb16f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: b85b9135a9236f23558e77eb5f86ec987933b2776b4f0348730de0b141c301dca7968be94242f5b8b1ae1a22a9597316f664c1f9b4e36c1fbb9aec392ba66fc4
|
7
|
+
data.tar.gz: 1993ff33b65b1f035d5c985a9710f8558bf0e496f4fadfacc0974b358ed2c8a7c4f8393468b54c6846d05789cbb02ad9d6bb732c15792fe4902d205b65f92ccd
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
coderay (1.1.2)
|
5
|
+
colorize (0.8.1)
|
6
|
+
method_source (0.9.2)
|
7
|
+
pry (0.12.2)
|
8
|
+
coderay (~> 1.1.0)
|
9
|
+
method_source (~> 0.9.0)
|
10
|
+
rb-readline (0.5.5)
|
11
|
+
|
12
|
+
PLATFORMS
|
13
|
+
ruby
|
14
|
+
|
15
|
+
DEPENDENCIES
|
16
|
+
colorize (~> 0.8.1)
|
17
|
+
pry (~> 0.12.2)
|
18
|
+
rb-readline
|
19
|
+
|
20
|
+
BUNDLED WITH
|
21
|
+
2.0.1
|
data/README.md
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Command Line Chess
|
2
|
+
This is my final Ruby project before moving to Rails framework. In this PvP game I've tried to apply all the stuff I have learned to this moment.
|
3
|
+
|
4
|
+
### Features:
|
5
|
+
* It works
|
6
|
+
* You can make all the legal moves, including:
|
7
|
+
* Castling
|
8
|
+
* En passant
|
9
|
+
* Pawn promotion
|
10
|
+
* The game detects and declares:
|
11
|
+
* Check
|
12
|
+
* Checkmate
|
13
|
+
* Stalemate
|
14
|
+
* You can quit and save the game at almost every moment
|
15
|
+
|
16
|
+
## How to start
|
17
|
+
Here are the steps you need to make to play this game:
|
18
|
+
1. Make sure that Ruby is installed on your machine
|
19
|
+
2. Go to the main directory of the project
|
20
|
+
3. Type `ruby lib/chess/cli.rb` in your command line
|
21
|
+
|
22
|
+
## How to play
|
23
|
+
* Trivial moves are made by typing in something like "e2e4" or `e3 f5` or even ` a 1 b 3 ` (whitespace doesn't matter)
|
24
|
+
* Short castling is done by typing in `00`, `oo` or `OO`
|
25
|
+
* Long castling is done by typing in `000`, `ooo` or `OOO`
|
26
|
+
* To quit the game, type in "exit". You will be asked to save the game
|
@@ -0,0 +1,14 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "chess_engine"
|
3
|
+
s.summary = "Simple chess library that uses algebraic notation"
|
4
|
+
s.description = File.read(File.join(File.dirname(__FILE__), 'README.md'))
|
5
|
+
s.version = "0.0.1"
|
6
|
+
s.author = "Anikeev Gennadiy"
|
7
|
+
s.email = "genaydzhan70@gmail.com"
|
8
|
+
s.homepage = "https://github.com/anikeef/chess"
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.required_ruby_version = '>=1.9'
|
11
|
+
s.files = Dir['**/**']
|
12
|
+
s.test_files = Dir["spec/*.rb"]
|
13
|
+
s.has_rdoc = false
|
14
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require_relative "piece"
|
2
|
+
require "colorize"
|
3
|
+
|
4
|
+
module ChessEngine
|
5
|
+
class Board
|
6
|
+
def initialize
|
7
|
+
@board = Array.new(8) { Array.new(8) { nil } }
|
8
|
+
end
|
9
|
+
|
10
|
+
def set_default
|
11
|
+
[[:white, 0, 1], [:black, 7, 6]].each do |color, row1, row2|
|
12
|
+
["Rook", "Knight", "Elephant", "Queen", "King", "Elephant", "Knight", "Rook"].each.with_index do |class_name, column|
|
13
|
+
self[column, row1] = Module.const_get("ChessEngine::#{class_name}").new(color)
|
14
|
+
end
|
15
|
+
|
16
|
+
0.upto(7) do |column|
|
17
|
+
self[column, row2] = Pawn.new(color)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def [](column, row)
|
23
|
+
@board[column][row]
|
24
|
+
end
|
25
|
+
|
26
|
+
def []=(column, row, piece)
|
27
|
+
@board[column][row] = piece
|
28
|
+
end
|
29
|
+
|
30
|
+
def at(coordinates)
|
31
|
+
return nil unless self.exists_at?(coordinates)
|
32
|
+
@board[coordinates[0]][coordinates[1]]
|
33
|
+
end
|
34
|
+
|
35
|
+
def set_at(coordinates, piece)
|
36
|
+
@board[coordinates[0]][coordinates[1]] = piece
|
37
|
+
end
|
38
|
+
|
39
|
+
def exists_at?(coordinates)
|
40
|
+
coordinates.all? { |c| c.between?(0, 7) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_s
|
44
|
+
string = ""
|
45
|
+
colors = [[:default, :light_white].cycle, [:light_white, :default].cycle].cycle
|
46
|
+
|
47
|
+
7.downto(0) do |row|
|
48
|
+
string += "#{row + 1} "
|
49
|
+
colors_cycle = colors.next
|
50
|
+
|
51
|
+
0.upto(7) do |column|
|
52
|
+
piece = self[column, row]
|
53
|
+
string += piece.nil? ? " " : piece.symbol
|
54
|
+
string += " "
|
55
|
+
string[-2..-1] = string[-2..-1].colorize(background: colors_cycle.next)
|
56
|
+
end
|
57
|
+
string += "\n"
|
58
|
+
end
|
59
|
+
|
60
|
+
string += " a b c d e f g h"
|
61
|
+
string
|
62
|
+
end
|
63
|
+
|
64
|
+
def move_piece(from, to)
|
65
|
+
piece = self.at(from)
|
66
|
+
self.set_at(from, nil)
|
67
|
+
self.set_at(to, piece)
|
68
|
+
end
|
69
|
+
|
70
|
+
def pieces(color)
|
71
|
+
@board.flatten.compact.select { |piece| piece.color == color }
|
72
|
+
end
|
73
|
+
|
74
|
+
def Board.coordinates_list
|
75
|
+
list = []
|
76
|
+
(0..7).each do |x|
|
77
|
+
(0..7).each { |y| list << [x, y]}
|
78
|
+
end
|
79
|
+
list
|
80
|
+
end
|
81
|
+
|
82
|
+
def king_coords(color)
|
83
|
+
Board.coordinates_list.find do |coord|
|
84
|
+
at(coord) && at(coord).king? && at(coord).color == color
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
def piece_coordinates(color)
|
89
|
+
Board.coordinates_list.select do |coord|
|
90
|
+
piece = at(coord)
|
91
|
+
!piece.nil? && piece.color == color
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require_relative "game"
|
2
|
+
require_relative "input"
|
3
|
+
require "yaml"
|
4
|
+
|
5
|
+
|
6
|
+
module ChessEngine
|
7
|
+
class NoGamesError < StandardError; end
|
8
|
+
|
9
|
+
class CLI
|
10
|
+
include Input
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
begin
|
14
|
+
mode = get_input("\nChoose the game mode:\n1. New game\n2. Continue\nEnter your choice (1 or 2): ", /^[12]$/)
|
15
|
+
@game = mode == "1" ? Game.new : choose_game
|
16
|
+
rescue NoGamesError => e
|
17
|
+
puts "#{e.message}. Try again"
|
18
|
+
retry
|
19
|
+
end
|
20
|
+
play
|
21
|
+
save if save?
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def play
|
27
|
+
until @game.over?
|
28
|
+
puts "\n#{@game.filename}\n#{@game.draw}"
|
29
|
+
declare_check if @game.check?
|
30
|
+
begin
|
31
|
+
promotion if @game.needs_promotion?
|
32
|
+
print "#{@game.current_color.to_s.capitalize}'s move (e. g. \"e2e4\" or \"exit\" or \"000\"/\"00\" (for castling)): "
|
33
|
+
move = gets.chomp.gsub(/\s+/, " ")
|
34
|
+
case move
|
35
|
+
when /^[oOоО0]{2}$/ #matches cyrillic letters
|
36
|
+
@game.castling(:short)
|
37
|
+
when /^[oOоО0]{3}$/
|
38
|
+
@game.castling(:long)
|
39
|
+
when /^[a-h][1-8][a-h][1-8]$/i
|
40
|
+
@game.move(move)
|
41
|
+
when /^exit$/i
|
42
|
+
return
|
43
|
+
else
|
44
|
+
raise InvalidMove, "Incorrect input"
|
45
|
+
end
|
46
|
+
rescue InvalidMove => e
|
47
|
+
puts "#{e.message}. Try again"
|
48
|
+
retry
|
49
|
+
end
|
50
|
+
end
|
51
|
+
game_over
|
52
|
+
end
|
53
|
+
|
54
|
+
def promotion
|
55
|
+
pieces = ["Queen", "Rook", "Knight", "Elephant"]
|
56
|
+
choice = get_input(
|
57
|
+
"Pawn promotion. Choose the new piece:\n1. Queen\n2. Rook\n3. Knight\n4. Elephant",
|
58
|
+
/^[1-4]$/, "Input must be a single digit"
|
59
|
+
)
|
60
|
+
@game.promotion(pieces[choice - 1])
|
61
|
+
end
|
62
|
+
|
63
|
+
def declare_check
|
64
|
+
puts "#{@game.current_color.to_s.capitalize} player is given a check"
|
65
|
+
end
|
66
|
+
|
67
|
+
def declare_checkmate
|
68
|
+
puts "#{@game.current_color.to_s.capitalize} player got mated!"
|
69
|
+
end
|
70
|
+
|
71
|
+
def game_over
|
72
|
+
puts @game.draw
|
73
|
+
if @game.check?
|
74
|
+
declare_checkmate
|
75
|
+
else
|
76
|
+
puts "Stalemate!"
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def choose_game
|
81
|
+
saved_names = Dir["./saved_games/*.yaml"].map { |filename| filename[/\.\/saved_games\/(.+)\.yaml/, 1] }
|
82
|
+
raise NoGamesError, "You have no saved games" if saved_names.empty?
|
83
|
+
puts "\nSaved games (#{saved_names.size}):"
|
84
|
+
saved_names.each { |name| puts name }
|
85
|
+
filename = get_input("Enter the name of the game that you want to continue: ",
|
86
|
+
nil, "Such game doesn't exist, try again") { |input| saved_names.include?(input) }
|
87
|
+
return YAML::load(File.read("./saved_games/#{filename}.yaml"))
|
88
|
+
end
|
89
|
+
|
90
|
+
def save?
|
91
|
+
return false if @game.filename && File.exists?("./saved_games/#{@game.filename}.yaml") &&
|
92
|
+
YAML::dump(@game) == File.read("./saved_games/#{@game.filename}.yaml")
|
93
|
+
choice = get_input("Do you want to save the game? (y/n): ", /^[yn]$/i)
|
94
|
+
choice == "y" ? true : false
|
95
|
+
end
|
96
|
+
|
97
|
+
def save
|
98
|
+
@game.filename ||= get_input("Enter the game name: ", /[^\/\>\<\|\:\&]+/)
|
99
|
+
game = YAML::dump(@game)
|
100
|
+
File.open("./saved_games/#{@game.filename}.yaml", "w") { |file| file.write(game) }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
ChessEngine::CLI.new
|
@@ -0,0 +1,148 @@
|
|
1
|
+
require_relative "board"
|
2
|
+
require_relative "validator"
|
3
|
+
require_relative "move"
|
4
|
+
|
5
|
+
module ChessEngine
|
6
|
+
class InvalidMove < StandardError; end
|
7
|
+
|
8
|
+
class Game
|
9
|
+
attr_accessor :filename
|
10
|
+
attr_reader :current_color
|
11
|
+
include MoveValidator
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@board = Board.new
|
15
|
+
@board.set_default
|
16
|
+
@current_color = :white
|
17
|
+
@last_piece = nil
|
18
|
+
@filename = nil
|
19
|
+
@promotion_coord = false
|
20
|
+
end
|
21
|
+
|
22
|
+
def move(string)
|
23
|
+
from, to = Game.string_to_move(string)
|
24
|
+
piece = @board.at(from)
|
25
|
+
raise InvalidMove, "Game is over" if over?
|
26
|
+
raise InvalidMove, "#{@current_color} player should execute pawn promotion first" if needs_promotion?
|
27
|
+
raise InvalidMove, "Empty square is chosen" if piece.nil?
|
28
|
+
raise InvalidMove, "This is not your piece" unless piece.color == @current_color
|
29
|
+
raise InvalidMove, "Invalid move" unless valid_moves(from).include?(to)
|
30
|
+
move = Move.new(@board, from, to)
|
31
|
+
move.commit
|
32
|
+
if king_attacked?
|
33
|
+
move.rollback
|
34
|
+
raise InvalidMove, "Fatal move"
|
35
|
+
end
|
36
|
+
|
37
|
+
@last_piece = piece
|
38
|
+
piece.moves_count += 1
|
39
|
+
@promotion_coord = to and return if piece.pawn? && [7, 0].include?(to[1])
|
40
|
+
next_player
|
41
|
+
end
|
42
|
+
|
43
|
+
def [](str)
|
44
|
+
letters = ("a".."h").to_a
|
45
|
+
return nil unless /[a-h][1-8]/.match?(str)
|
46
|
+
@board.at([letters.find_index(str[0]), str[1].to_i - 1])
|
47
|
+
end
|
48
|
+
|
49
|
+
def draw
|
50
|
+
@board.to_s
|
51
|
+
end
|
52
|
+
|
53
|
+
def promotion(class_name)
|
54
|
+
unless ["rook", "knight", "elephant", "queen"].include?(class_name.downcase)
|
55
|
+
raise InvalidMove, "Invalid promotion"
|
56
|
+
end
|
57
|
+
@board.set_at(@promotion_coord, Module.const_get("ChessEngine::#{class_name.capitalize}").new(@current_color))
|
58
|
+
@promotion_coord = nil
|
59
|
+
next_player
|
60
|
+
end
|
61
|
+
|
62
|
+
def castling(length)
|
63
|
+
row = @current_color == :white ? 0 : 7
|
64
|
+
king = @board.at([4, row])
|
65
|
+
if length == :short
|
66
|
+
rook = @board.at([7, row])
|
67
|
+
line = [5, 6]
|
68
|
+
moves = [Move.new(@board, [4, row], [6, row]),
|
69
|
+
Move.new(@board, [7, row], [5, row])]
|
70
|
+
else
|
71
|
+
rook = @board.at([0, row])
|
72
|
+
line = [1, 2, 3]
|
73
|
+
moves = [Move.new(@board, [4, row], [2, row]),
|
74
|
+
Move.new(@board, [0, row], [3, row])]
|
75
|
+
end
|
76
|
+
raise InvalidMove, "Invalid castling" unless
|
77
|
+
king && rook && king.moves_count == 0 && rook.moves_count == 0 &&
|
78
|
+
line.all? { |x| @board.at([x, row]).nil? }
|
79
|
+
|
80
|
+
moves.each { |move| move.commit }
|
81
|
+
if king_attacked?
|
82
|
+
moves.each { |move| move.rollback }
|
83
|
+
raise InvalidMove, "Fatal move"
|
84
|
+
end
|
85
|
+
@last_piece = nil
|
86
|
+
next_player
|
87
|
+
end
|
88
|
+
|
89
|
+
def over?
|
90
|
+
@board.piece_coordinates(@current_color).all? do |coord|
|
91
|
+
safe_moves(coord).empty?
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def needs_promotion?
|
96
|
+
!!@promotion_coord
|
97
|
+
end
|
98
|
+
|
99
|
+
def check?
|
100
|
+
king_attacked?
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def king_attacked?
|
106
|
+
king_coords = @board.king_coords(@current_color)
|
107
|
+
[[1, 1], [-1, 1], [-1, -1], [1, -1]].each do |move|
|
108
|
+
next_coords = relative_coords(king_coords, move)
|
109
|
+
piece = @board.at(next_coords)
|
110
|
+
return true if piece && piece.color != @current_color && (piece.pawn? || piece.king?)
|
111
|
+
edge_coords = repeated_move(king_coords, move).last
|
112
|
+
piece = edge_coords.nil? ? nil : @board.at(edge_coords)
|
113
|
+
return true if piece && piece.beats_diagonally?
|
114
|
+
end
|
115
|
+
[[1, 0], [-1, 0], [0, 1], [0, -1]].each do |move|
|
116
|
+
next_coords = relative_coords(king_coords, move)
|
117
|
+
piece = @board.at(next_coords)
|
118
|
+
return true if piece && piece.king?
|
119
|
+
edge_coords = repeated_move(king_coords, move).last
|
120
|
+
piece = edge_coords.nil? ? nil : @board.at(edge_coords)
|
121
|
+
return true if !piece.nil? && piece.beats_straight?
|
122
|
+
end
|
123
|
+
[[1, 2], [2, 1], [1, -2], [-2, 1],
|
124
|
+
[-1, 2], [2, -1], [-1, -2], [-2, -1]].each do |move|
|
125
|
+
coords = relative_coords(king_coords, move)
|
126
|
+
piece = valid_move?(coords) ? @board.at(coords) : nil
|
127
|
+
return true if !piece.nil? && piece.knight?
|
128
|
+
end
|
129
|
+
false
|
130
|
+
end
|
131
|
+
|
132
|
+
def Game.string_to_move(string)
|
133
|
+
string = string.gsub(/\s+/, "").downcase
|
134
|
+
raise InvalidMove, "Input must look like \"e2 e4\" or \"a6b5\"" unless /^[a-h][1-8][a-h][1-8]$/.match?(string)
|
135
|
+
letters = ("a".."h").to_a
|
136
|
+
[[letters.find_index(string[0]), string[1].to_i - 1],
|
137
|
+
[letters.find_index(string[2]), string[3].to_i - 1]]
|
138
|
+
end
|
139
|
+
|
140
|
+
def opposite_color
|
141
|
+
@current_color == :white ? :black : :white
|
142
|
+
end
|
143
|
+
|
144
|
+
def next_player
|
145
|
+
@current_color = opposite_color
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Input
|
2
|
+
class Incorrect < StandardError; end
|
3
|
+
|
4
|
+
def get_input(input_message, regex = nil, err_message = "Incorrect input, try again")
|
5
|
+
begin
|
6
|
+
print input_message
|
7
|
+
input = gets.chomp
|
8
|
+
if block_given?
|
9
|
+
raise Input::Incorrect unless yield(input)
|
10
|
+
else
|
11
|
+
raise Input::Incorrect unless regex.match?(input)
|
12
|
+
end
|
13
|
+
rescue
|
14
|
+
puts err_message
|
15
|
+
retry
|
16
|
+
end
|
17
|
+
input
|
18
|
+
end
|
19
|
+
end
|