diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..34d0e05 --- /dev/null +++ b/Gemfile @@ -0,0 +1,4 @@ +source 'https://rubygems.org' +gem 'rspec' +gem 'pry' +gem 'faker' \ No newline at end of file diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..933ce43 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,38 @@ +GEM + remote: https://rubygems.org/ + specs: + coderay (1.1.0) + diff-lcs (1.2.5) + faker (1.4.3) + i18n (~> 0.5) + i18n (0.7.0) + method_source (0.8.2) + pry (0.10.1) + coderay (~> 1.1.0) + method_source (~> 0.8.1) + slop (~> 3.4) + rspec (3.2.0) + rspec-core (~> 3.2.0) + rspec-expectations (~> 3.2.0) + rspec-mocks (~> 3.2.0) + rspec-core (3.2.3) + rspec-support (~> 3.2.0) + rspec-expectations (3.2.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.2.0) + rspec-mocks (3.2.1) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.2.0) + rspec-support (3.2.2) + slop (3.6.0) + +PLATFORMS + ruby + +DEPENDENCIES + faker + pry + rspec + +BUNDLED WITH + 1.10.3 diff --git a/lib/controller.rb b/lib/controller.rb new file mode 100644 index 0000000..0209e5e --- /dev/null +++ b/lib/controller.rb @@ -0,0 +1,49 @@ +require_relative 'view' +require_relative 'model' + +class TTTController + + def run! + board = TTT.new + view = TTTView.new board + + view.print_title + + #Make todoList methods like RESTful endpoints (new/edit/update/delete) + #Think Backbone Model & View + + loop do + view.print_menu + case view.fetch_user_input.upcase + when "S" + board.start_game + view.print_help_board + while not board.is_solved? do + view.print_board + input = view.fetch_user_input + case input + when 1..9 + validMove = board.place_mark input + if not validMove + view.print_invalid_move + end + when "Q" + puts "BYE!" + exit + else + view.print_help_board + end + end + view.print_board + view.print_solved + when "Q" + puts "We're done" + exit + else + view.print_error_message + end + end + end +end + +TTTController.new.run! \ No newline at end of file diff --git a/lib/model.rb b/lib/model.rb new file mode 100644 index 0000000..76714a6 --- /dev/null +++ b/lib/model.rb @@ -0,0 +1,95 @@ +require 'pry' +class TTT + attr_reader :player1turn, :board, :solved + + def initialize + @player1turn = false + @board = Array.new 10, "-" + @solved = false + end + + def place_mark location + case + when board[location-1] != '-' then return false + end + case @player1turn + when true + mark = "X" + else + mark = "O" + end + @board[location-1] = mark + @player1turn = ! @player1turn + true + + end + + def start_game + @player1turn = true + @board = Array.new 10, "-" + end + + def is_solved? + check_horizontals or check_verticals or check_diagonals + end + + + def check_horizontals #TEST THIS + for start in 1..4 + startIndex = start * 3 - 3 + mark1 = board[startIndex] + case + when mark1 != board[startIndex+1] + false + when mark1 != board[startIndex+2] + false + when mark1 == "-" + false + else + return true + end + end + return false + end + + def check_verticals + for start in 1..4 + startIndex = start -1 + mark1 = board[startIndex] + #binding.pry + case + when mark1 != board[startIndex+3] + false + when mark1 != board[startIndex+6] + false + when mark1 == "-" + false + else + return true + end + end + return false + end + + def check_diagonals + startIndex = 0 + mark1 = board[startIndex] + case + when mark1 != board[startIndex+4] then false + when mark1 != board[startIndex+8] then false + when mark1 == "-" then false + else + return true + end + startIndex = 2 + mark1 = board[startIndex] + case + when mark1 != board[startIndex+2] then false + when mark1 != board[startIndex+4] then false + when mark1 == "-" then false + else + return true + end + return false + end +end \ No newline at end of file diff --git a/lib/view.rb b/lib/view.rb new file mode 100644 index 0000000..8f7277c --- /dev/null +++ b/lib/view.rb @@ -0,0 +1,94 @@ +class TTTView + attr_reader :game + + def initialize newGame=TTT.new + @game = newGame + end + + def print_title +title = <