games_bfox 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -12
  3. data/config/application.yml +5 -0
  4. data/games.gemspec +2 -1
  5. data/lib/games/mastermind/board_builder.rb +6 -2
  6. data/lib/games/mastermind/computer_player_expert.rb +31 -0
  7. data/lib/games/mastermind/computer_player_novice.rb +18 -0
  8. data/lib/games/mastermind/game.rb +69 -15
  9. data/lib/games/mastermind/guess_evaluator.rb +105 -68
  10. data/lib/games/mastermind/guess_evaluator_result.rb +11 -0
  11. data/lib/games/mastermind/human_player.rb +9 -0
  12. data/lib/games/mastermind/io_helpers.rb +65 -0
  13. data/lib/games/mastermind/peg.rb +2 -4
  14. data/lib/games/mastermind/pegs.rb +1 -9
  15. data/lib/games/mastermind/pegs_factory.rb +3 -5
  16. data/lib/games/mastermind/players_factory.rb +32 -8
  17. data/lib/games/mastermind/secret_code.rb +19 -0
  18. data/lib/games/mastermind.rb +9 -2
  19. data/lib/games/shared/game.rb +56 -70
  20. data/lib/games/shared/{input_helper.rb → io_helpers.rb} +40 -32
  21. data/lib/games/shared/player.rb +1 -3
  22. data/lib/games/shared/player_factory.rb +9 -0
  23. data/lib/games/shared/players_factory.rb +9 -0
  24. data/lib/games/tictactoe/board.rb +3 -4
  25. data/lib/games/tictactoe/board_builder.rb +3 -3
  26. data/lib/games/tictactoe/board_presenter_terminal.rb +3 -3
  27. data/lib/games/tictactoe/computer_player_expert.rb +12 -0
  28. data/lib/games/tictactoe/computer_player_novice.rb +10 -0
  29. data/lib/games/tictactoe/game.rb +45 -12
  30. data/lib/games/tictactoe/human_player.rb +9 -0
  31. data/lib/games/tictactoe/io_helpers.rb +81 -0
  32. data/lib/games/tictactoe/player.rb +4 -0
  33. data/lib/games/tictactoe/players_factory.rb +49 -5
  34. data/lib/games/tictactoe/square.rb +0 -3
  35. data/lib/games/tictactoe/squares.rb +1 -1
  36. data/lib/games/tictactoe/squares_factory.rb +7 -11
  37. data/lib/games/tictactoe.rb +9 -2
  38. data/lib/games/version.rb +1 -1
  39. metadata +32 -17
  40. data/lib/games/mastermind/colors.rb +0 -14
  41. data/lib/games/mastermind/game_config.rb +0 -48
  42. data/lib/games/mastermind/game_resetter.rb +0 -19
  43. data/lib/games/mastermind/game_state_changer.rb +0 -41
  44. data/lib/games/mastermind/input_helper.rb +0 -67
  45. data/lib/games/mastermind/move_generator.rb +0 -46
  46. data/lib/games/shared/array_iterator.rb +0 -28
  47. data/lib/games/tictactoe/game_config.rb +0 -73
  48. data/lib/games/tictactoe/game_resetter.rb +0 -16
  49. data/lib/games/tictactoe/game_state_changer.rb +0 -17
  50. data/lib/games/tictactoe/input_helper.rb +0 -87
  51. data/lib/games/tictactoe/move_generator.rb +0 -68
@@ -1,11 +1,55 @@
1
- require_relative 'player'
1
+ require_relative 'human_player'
2
+ require_relative 'computer_player_expert'
3
+ require_relative 'computer_player_novice'
2
4
 
3
5
  module TTT
4
- class PlayersFactory
5
- def generate_players(config)
6
- player_1 = TTT::Player.new(value: config.player_1_value, name: config.player_1_name, type: :human)
7
- player_2 = TTT::Player.new(value: config.player_2_value, name: config.player_2_name, type: config.player_2_type, difficulty_level: config.computer_difficulty_level)
6
+ class PlayersFactory < Shared::PlayersFactory
7
+ def generate_players
8
+ player_1 = generate_player_1_new
9
+ player_2 = generate_player_2(player_1.value)
8
10
  [player_1, player_2]
9
11
  end
12
+
13
+ def generate_player_2(player_value_taken)
14
+ player_2_type = io_helpers.get_player_2_type
15
+ if player_2_type == :human
16
+ generate_player_2_human(player_value_taken)
17
+ else #second_player_computer
18
+ computer_knowledge_level = io_helpers.get_computer_knowledge_level
19
+ if computer_knowledge_level == :novice
20
+ generate_player_2_computer_novice(player_value_taken)
21
+ else
22
+ generate_player_2_computer_expert(player_value_taken)
23
+ end
24
+ end
25
+ end
26
+
27
+ def generate_player_1_new
28
+ player_name = io_helpers.get_player_1_name
29
+ player_value = io_helpers.get_player_value(player_name, "")
30
+ TTT::HumanPlayer.new(name: player_name, value: player_value)
31
+ end
32
+
33
+ def generate_player_2_human(player_value_taken)
34
+ player_name = io_helpers.get_player_2_name
35
+ player_value = io_helpers.get_player_value(player_name, player_value_taken )
36
+ TTT::HumanPlayer.new(name: player_name, value: player_value)
37
+ end
38
+
39
+ def generate_player_2_computer_novice(player_value_taken)
40
+ TTT::ComputerPlayerNovice.new(name: "Computer", value: computer_value(player_value_taken))
41
+ end
42
+
43
+ def generate_player_2_computer_expert(player_value_taken)
44
+ TTT::ComputerPlayerExpert.new(name: "Computer", value: computer_value(player_value_taken))
45
+ end
46
+
47
+ def computer_value(taken)
48
+ if taken != "O"
49
+ "O"
50
+ else
51
+ "X"
52
+ end
53
+ end
10
54
  end
11
55
  end
@@ -1,13 +1,10 @@
1
1
  module TTT
2
2
  class Square
3
3
  attr_accessor :value, :display_value
4
- attr_reader :row, :col
5
4
 
6
5
  def initialize(args)
7
6
  @value = args[:value]
8
7
  @display_value = args[:display_value]
9
- @row = args[:row]
10
- @col = args[:col]
11
8
  end
12
9
 
13
10
  def change_value(new_value)
@@ -40,7 +40,7 @@ module TTT
40
40
 
41
41
  def full?
42
42
  collection_of_squares.each do |row|
43
- return false if row.all? { |square| square.full? } == false
43
+ return false if !(row.all? { |square| square.full? })
44
44
  end
45
45
  return true
46
46
  end
@@ -2,7 +2,7 @@ require_relative 'squares'
2
2
  require_relative 'square'
3
3
 
4
4
  module TTT
5
- module SquaresFactory
5
+ class SquaresFactory
6
6
  def self.build_custom_squares(config, squares_class = Squares)
7
7
 
8
8
  rows_and_cols = config.length
@@ -14,7 +14,7 @@ module TTT
14
14
 
15
15
  squares.each_with_index do |element, row|
16
16
  element.each_index do |col|
17
- squares[row][col] = create_custom_square(config[row][col][0],config[row][col][1], row, col)
17
+ squares[row][col] = create_custom_square(config[row][col][0],config[row][col][1])
18
18
  end
19
19
  end
20
20
 
@@ -23,11 +23,9 @@ module TTT
23
23
  end
24
24
 
25
25
 
26
- def self.create_custom_square(display_value, value, row, col, square_class = Square)
26
+ def self.create_custom_square(display_value, value, square_class = Square)
27
27
  square_class.new(display_value: display_value,
28
- value: value,
29
- row: row,
30
- col: col )
28
+ value: value)
31
29
  end
32
30
 
33
31
  def self.build_empty_squares(rows_and_cols, squares_class = Squares)
@@ -38,7 +36,7 @@ module TTT
38
36
  i = 1
39
37
  squares.each_with_index do |element, row|
40
38
  element.each_index do |col|
41
- squares[row][col] = create_empty_square(i, row, col)
39
+ squares[row][col] = create_empty_square(i)
42
40
  i += 1
43
41
  end
44
42
  end
@@ -46,11 +44,9 @@ module TTT
46
44
  squares_class.new(collection_of_squares: squares)
47
45
  end
48
46
 
49
- def self.create_empty_square(display_value, row, col, square_class = Square)
47
+ def self.create_empty_square(display_value, square_class = Square)
50
48
  square_class.new(display_value: display_value,
51
- value: nil,
52
- row: row,
53
- col: col )
49
+ value: nil)
54
50
  end
55
51
  end
56
52
  end
@@ -4,10 +4,17 @@ Dir[File.join(File.expand_path(File.dirname(__FILE__)), 'tictactoe', '*.rb')].ea
4
4
  class TicTacToe
5
5
  def self.run
6
6
  io = Shared::IOTerminal.new
7
+ io_helpers = TTT::IOHelpers.new(io)
7
8
  board_presenter = TTT::BoardPresenterTerminal.new
9
+ board_builder = TTT::BoardBuilder.new
10
+ players_factory = TTT::PlayersFactory.new(io_helpers)
8
11
 
9
- game = TTT::Game.new(game_module: TTT, io: io, board_presenter: board_presenter)
10
- # game.setup
12
+ game = TTT::Game.new(
13
+ io_helpers: io_helpers,
14
+ board_presenter: board_presenter,
15
+ board_builder: board_builder,
16
+ players_factory: players_factory,
17
+ )
11
18
  game.play
12
19
  end
13
20
  end
data/lib/games/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Games
2
- VERSION = "0.3.0"
2
+ VERSION = "0.4.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: games_bfox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Fox
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-18 00:00:00.000000000 Z
11
+ date: 2017-11-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -86,8 +86,22 @@ dependencies:
86
86
  - - ">="
87
87
  - !ruby/object:Gem::Version
88
88
  version: 2.2.2
89
- description: In order to play, download the gem, and type \"tictactoe\" or \"mastermind\"
90
- at your terminal.
89
+ - !ruby/object:Gem::Dependency
90
+ name: paint
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '2.0'
96
+ type: :development
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '2.0'
103
+ description: In order to play, download the gem, and type "tictactoe" or "mastermind"
104
+ at your terminal. Type "exit" to quit the game.
91
105
  email:
92
106
  - brettfox11@gmail.com
93
107
  executables:
@@ -103,6 +117,7 @@ files:
103
117
  - Gemfile
104
118
  - README.md
105
119
  - Rakefile
120
+ - config/application.yml
106
121
  - exe/mastermind
107
122
  - exe/setup
108
123
  - exe/tictactoe
@@ -112,35 +127,35 @@ files:
112
127
  - lib/games/mastermind/board.rb
113
128
  - lib/games/mastermind/board_builder.rb
114
129
  - lib/games/mastermind/board_presenter_terminal.rb
115
- - lib/games/mastermind/colors.rb
130
+ - lib/games/mastermind/computer_player_expert.rb
131
+ - lib/games/mastermind/computer_player_novice.rb
116
132
  - lib/games/mastermind/game.rb
117
- - lib/games/mastermind/game_config.rb
118
- - lib/games/mastermind/game_resetter.rb
119
- - lib/games/mastermind/game_state_changer.rb
120
133
  - lib/games/mastermind/guess_evaluator.rb
121
- - lib/games/mastermind/input_helper.rb
122
- - lib/games/mastermind/move_generator.rb
134
+ - lib/games/mastermind/guess_evaluator_result.rb
135
+ - lib/games/mastermind/human_player.rb
136
+ - lib/games/mastermind/io_helpers.rb
123
137
  - lib/games/mastermind/peg.rb
124
138
  - lib/games/mastermind/pegs.rb
125
139
  - lib/games/mastermind/pegs_factory.rb
126
140
  - lib/games/mastermind/players_factory.rb
127
- - lib/games/shared/array_iterator.rb
141
+ - lib/games/mastermind/secret_code.rb
128
142
  - lib/games/shared/game.rb
129
- - lib/games/shared/input_helper.rb
143
+ - lib/games/shared/io_helpers.rb
130
144
  - lib/games/shared/io_terminal.rb
131
145
  - lib/games/shared/player.rb
146
+ - lib/games/shared/player_factory.rb
147
+ - lib/games/shared/players_factory.rb
132
148
  - lib/games/shared/version.rb
133
149
  - lib/games/tictactoe.rb
134
150
  - lib/games/tictactoe/board.rb
135
151
  - lib/games/tictactoe/board_builder.rb
136
152
  - lib/games/tictactoe/board_presenter_terminal.rb
153
+ - lib/games/tictactoe/computer_player_expert.rb
154
+ - lib/games/tictactoe/computer_player_novice.rb
137
155
  - lib/games/tictactoe/game.rb
138
- - lib/games/tictactoe/game_config.rb
139
- - lib/games/tictactoe/game_resetter.rb
140
- - lib/games/tictactoe/game_state_changer.rb
141
- - lib/games/tictactoe/input_helper.rb
156
+ - lib/games/tictactoe/human_player.rb
157
+ - lib/games/tictactoe/io_helpers.rb
142
158
  - lib/games/tictactoe/minimax.rb
143
- - lib/games/tictactoe/move_generator.rb
144
159
  - lib/games/tictactoe/player.rb
145
160
  - lib/games/tictactoe/players_factory.rb
146
161
  - lib/games/tictactoe/square.rb
@@ -1,14 +0,0 @@
1
- module MM
2
- class Colors
3
- def self.key
4
- {
5
- 1 => :red,
6
- 2 => :green,
7
- 3 => :blue,
8
- 4 => :orange,
9
- 5 => :yellow,
10
- 6 => :brown
11
- }
12
- end
13
- end
14
- end
@@ -1,48 +0,0 @@
1
- module MM
2
- class GameConfig
3
- attr_accessor :input_helper
4
-
5
- attr_accessor :player_1_name
6
- attr_accessor :code_setter
7
- attr_accessor :secret_code
8
- attr_accessor :number_of_rows
9
- attr_accessor :number_of_cols
10
-
11
- def initialize(input_helper)
12
- @input_helper = input_helper
13
- @number_of_rows = 12
14
- @number_of_cols = 4
15
-
16
- end
17
-
18
- def one_time_setup
19
- self.player_1_name = input_helper.get_player_1_name
20
- #defaults set above. uncomment to ask the player to choose
21
- # self.number_of_rows = input_helper.get_number_of_rows
22
- # self.number_of_cols = input_helper.get_number_of_cols
23
- end
24
-
25
- def every_time_setup
26
- self.code_setter = input_helper.computer_or_human_code_setter_inquiry(player_1_name)
27
- self.secret_code = get_secret_code
28
- end
29
-
30
- def get_secret_code
31
- code = nil
32
- if code_setter == :human
33
- code = input_helper.get_secret_code_from_user(player_1_name)
34
- elsif code_setter == :computer
35
- code = set_secret_code
36
- end
37
- code
38
- end
39
-
40
- def set_secret_code
41
- secret_code = []
42
- 4.times do
43
- secret_code.push((1..6).to_a.sample)
44
- end
45
- secret_code
46
- end
47
- end
48
- end
@@ -1,19 +0,0 @@
1
- module MM
2
- class GameResetter
3
- attr_accessor :game
4
-
5
- def reset_game(game)
6
- @game = game
7
- reset_board
8
- game.number_of_turns_taken = 0
9
- game.won_flag = false
10
- game.secret_code = game.set_secret_code
11
- game.current_guess = []
12
- game.current_result = []
13
- end
14
-
15
- def reset_board
16
- game.board = game.generate_empty_board(game.config)
17
- end
18
- end
19
- end
@@ -1,41 +0,0 @@
1
- module MM
2
- class GameStateChanger
3
- attr_accessor :game
4
-
5
- def change_game_state(guess, game)
6
- @game = game
7
- game.current_guess = guess
8
- game.current_result = game.evaluate_guess(secret_code, current_guess)
9
- change_pegs(guess, game.current_result)
10
- if !game.won?
11
- game.move_forward_one_turn
12
- end
13
- end
14
-
15
- def change_pegs(guess, current_result)
16
- current_row.each_with_index do |peg, index|
17
- peg.change_value(guess[index])
18
- end
19
-
20
- result_pegs_current_row.each_with_index do |peg, index|
21
- peg.change_value(current_result[index])
22
- end
23
- end
24
-
25
- def current_row
26
- game.pegs_current_row
27
- end
28
-
29
- def result_pegs_current_row
30
- game.result_pegs_current_row
31
- end
32
-
33
- def secret_code
34
- game.secret_code
35
- end
36
-
37
- def current_guess
38
- game.current_guess
39
- end
40
- end
41
- end
@@ -1,67 +0,0 @@
1
- require_relative '../shared/input_helper'
2
-
3
- module MM
4
- class InputHelper < Shared::InputHelper
5
- def computer_or_human_code_setter_inquiry(name)
6
- user_choice = get_user_input("#{name}, please enter \"1\" if you would like to be the code-guesser. Enter \"2\" if you would like to set the code and have the computer guess.", "Invalid entry. Please enter either 1(computer picks code) or 2 (you pick code)") do |input|
7
- input == 1 || input == 2
8
- end
9
- if user_choice == 1
10
- return :computer
11
- elsif user_choice == 2
12
- return :human
13
- end
14
- end
15
-
16
- def get_secret_code_from_user(name)
17
- user_choice = get_user_input("#{name}, please enter a secret code consisting of four numbers that each correspond to a color. Do not separate with punctuation. The computer will try to guess this code.", "Please re-enter a secret code, using only 4 numbers, 1 through 6.") do |input|
18
- input.to_s =~ /^[1-6]{4}$/
19
- end
20
- user_choice.to_s.chars.map(&:to_i)
21
- end
22
-
23
- def get_player_choice(game)
24
- user_choice = get_user_input("#{game.current_player_name}, please enter a secret code consisting of 4 numbers that correspond to the color of your guess. Do not separate with punctuation.", "Please re-enter a secret code guess, using exactly 4 numbers, each being a digit 1 through 6.") do |input|
25
- input.to_s =~ /^[1-6]{4}$/
26
- end
27
- user_choice.to_s.chars.map(&:to_i)
28
- end
29
-
30
- def draw_prompt
31
- io.present_with_new_line("No such luck! Please try again.")
32
- end
33
-
34
- def initial_instructions
35
- io.present_with_new_line("MASTERMIND")
36
- io.present_with_new_line("__________")
37
- io.present_with_new_line("Game Instructions: Try to guess a 4 digit code that contains a collection of numbers 1-6 (\"6241\", for example).")
38
- io.present_with_new_line("After each guess, the \"Result\" section will generate an \"X\" for each digit in the guess that is perfect(correct number and correct spot) and an \"O\" for each digit that is the correct number but in the wrong spot.")
39
- io.present_with_new_line("Type \"Exit\" to quit the game.")
40
- io.present_with_new_line("___________")
41
- end
42
-
43
- def winning_prompt(current_player_name)
44
- io.present_with_new_line("#{current_player_name} wins!")
45
- end
46
-
47
- def no_winner_prompt
48
- io.present_with_new_line("Game over!")
49
- end
50
-
51
- def custom_final_message(game)
52
- io.present_with_new_line("The secret code was #{game.secret_code.join(",")}")
53
- end
54
-
55
- def get_number_of_rows
56
- get_user_input("Please choose how many rows of pegs you would like, from 4 to 12.", "Please choose a number between 4 and 12.") do |input|
57
- input.to_i >=4 && input.to_i <=12
58
- end
59
- end
60
-
61
- def get_number_of_cols
62
- get_user_input("Please choose how many pegs you would like in each row, from 4 to 6.", "Please choose a number between 4 and 6.") do |input|
63
- input.to_i >=4 && input.to_i <=6
64
- end
65
- end
66
- end
67
- end
@@ -1,46 +0,0 @@
1
- module MM
2
- class MoveGenerator
3
-
4
- attr_accessor :game
5
-
6
- def get_player_choice(game)
7
- @game = game
8
- get_move
9
- end
10
-
11
- def get_move
12
- if human?
13
- input_helper.get_player_choice(game)
14
- elsif computer?
15
- input_helper.computer_choosing_graphic
16
- computer_move
17
- end
18
- end
19
-
20
- def computer_move
21
- secret_code = []
22
- 4.times do
23
- secret_code.push((1..6).to_a.sample)
24
- end
25
- secret_code
26
- end
27
-
28
-
29
- def current_player
30
- game.current_player
31
- end
32
-
33
- def input_helper
34
- game.input_helper
35
- end
36
-
37
- def human?
38
- game.current_player_human?
39
- end
40
-
41
- def computer?
42
- game.current_player_computer?
43
- end
44
- end
45
- end
46
-
@@ -1,28 +0,0 @@
1
- #from Design Patterns by Russ Olsen pg 128-129
2
- module Shared
3
- class ArrayIterator
4
- def initialize(array)
5
- @array = array
6
- @index = 0
7
- end
8
-
9
- def has_next?
10
- @index < @array.length
11
- end
12
-
13
- def item
14
- @array[@index]
15
- end
16
-
17
- def peek
18
- @array[@index]
19
- end
20
-
21
- def next_item
22
- value = @array[@index]
23
- @index += 1
24
- value
25
- end
26
- end
27
- end
28
-
@@ -1,73 +0,0 @@
1
- module TTT
2
- class GameConfig
3
- attr_accessor :input_helper
4
-
5
- attr_accessor :player_1_name
6
- attr_accessor :player_1_value
7
- attr_accessor :player_2_type
8
- attr_accessor :player_2_name
9
- attr_accessor :player_2_value
10
- attr_accessor :computer_difficulty_level
11
- attr_accessor :number_of_rows_cols
12
-
13
- def initialize(input_helper)
14
- @input_helper = input_helper
15
- end
16
-
17
- def one_time_setup
18
- set_player_1_values
19
- set_player_2_values
20
- set_board_rows_cols
21
- end
22
-
23
- def every_time_setup
24
-
25
- end
26
-
27
- def set_player_1_values
28
- self.player_1_name = input_helper.get_player_1_name
29
- self.player_1_value = input_helper.get_player_1_value(player_1_name)
30
- end
31
-
32
- def set_player_2_values
33
- self.player_2_type = input_helper.get_player_2_type
34
- if player_2_human?
35
- self.player_2_name = input_helper.get_player_2_name
36
- self.player_2_value = input_helper.get_player_2_value(player_1_value)
37
- elsif player_2_computer?
38
- self.player_2_name = "Computer"
39
- self.player_2_value = get_computer_value
40
- self.computer_difficulty_level = input_helper.get_computer_difficulty_level
41
- end
42
- end
43
-
44
- def set_board_rows_cols
45
- #need this if else logic because if computer is difficult, it runs minimax, which is too slow to allow for more than 3 rows/cols
46
- if computer_difficult?
47
- self.number_of_rows_cols = input_helper.get_number_of_rows_cols_max_3
48
- else
49
- self.number_of_rows_cols = input_helper.get_number_of_rows_cols_max_9
50
- end
51
- end
52
-
53
- def player_2_human?
54
- player_2_type == :human
55
- end
56
-
57
- def player_2_computer?
58
- player_2_type == :computer
59
- end
60
-
61
- def computer_difficult?
62
- computer_difficulty_level == :difficult
63
- end
64
-
65
- def get_computer_value
66
- if player_1_value != "O"
67
- "O"
68
- else
69
- "X"
70
- end
71
- end
72
- end
73
- end
@@ -1,16 +0,0 @@
1
- module TTT
2
- class GameResetter
3
- attr_accessor :game
4
-
5
- def reset_game(game)
6
- @game = game
7
- reset_board
8
- game.number_of_turns_taken = 0
9
- game.won_flag = false
10
- end
11
-
12
- def reset_board
13
- game.board = game.generate_empty_board(game.config)
14
- end
15
- end
16
- end
@@ -1,17 +0,0 @@
1
- module TTT
2
- class GameStateChanger
3
- attr_accessor :game
4
-
5
- def change_game_state(player_choice, game)
6
- @game = game
7
- change_square(player_choice)
8
- end
9
-
10
- def change_square(display_value)
11
- game.change_square(display_value, game.current_player_value)
12
- if !game.won?
13
- game.move_forward_one_turn
14
- end
15
- end
16
- end
17
- end