tic_tac_toe_bfox 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0b97a0ee48814d4adde4f74cd0a9218645ef8d67
4
- data.tar.gz: be30925fff9cd631a7c7a31a2f6ea1a58af71e5f
3
+ metadata.gz: 77bae52f24f75f486df81b5ffa3531a4c22e2794
4
+ data.tar.gz: 4e25c2db4e1dcbd85ba59a70023428e1affda332
5
5
  SHA512:
6
- metadata.gz: a3bbebb23e84bc84d4e7bf23e2236b40cbc1d65541474414f6c5773228c3051b3516c76d90f2c25db5dc1e8669481eb64cc42496872e3f8cb134b51ef10c7aa3
7
- data.tar.gz: 2c667d703865e7374250bf9386069759010d45130bbc06f1d8c829dee39dbfbb3c941974e02bf5548069dbfd8cd1b8a4940d7457080a2d44eb169fede6d56027
6
+ metadata.gz: 4787f634c001fca03954538925b481c295f02272ab4eba395bb4965fb4c2518390311ca2f72642027f6b420e75275c2112a431a94aeca80759ce7b8c096c97b8
7
+ data.tar.gz: af573af23a3896e6ae51e76b9c2c01174ea7b56cfe37ed4519b8d7b190cc9722aaa37c1f30c1877ee9db775093b39f296f8ee78520d87f35d965c71d5d851844
data/README.md CHANGED
@@ -2,10 +2,11 @@
2
2
 
3
3
  **Instructions:**
4
4
 
5
- 1. In order to play the game, please type **ruby main.rb** into your console.
5
+ 1. In order to play the game, please type **tictactoe** into your console.
6
6
  2. Follow the prompts to set your name and the value of your mark.
7
7
  3. Choose whether you would like to play a computer (**"C"**) or a human (**"H"**).
8
8
  4. If you choose to play a computer, further choose whether you would like to play
9
9
  * an easy (**"E"**) computer: this computer selects randomly
10
10
  * a difficult (**"D"**) computer: this computer is impossible to beat!
11
11
  5. Choose how many squares per row you would like. Note that 9 is the maximum, unless you are playing a difficult computer, who prefers to play with a maximum of 3 squares per row.
12
+ 6. In order to exit the game at any time, please type **exit** into your console.
data/{bin → exe}/setup RENAMED
File without changes
File without changes
@@ -16,7 +16,7 @@ module TTT
16
16
  # below finds the user needed input needed for initial players and board configuration and stores in config object
17
17
  @config = GameConfig.new(@input_helper)
18
18
  @players = generate_players
19
- @board = generate_board
19
+ @board = generate_empty_board
20
20
  end
21
21
 
22
22
  #overriding so that io and input_helper always in harmony
@@ -31,28 +31,48 @@ module TTT
31
31
  [player_1, player_2]
32
32
  end
33
33
 
34
- def generate_board
34
+ def generate_empty_board
35
35
  number_of_rows_cols = config.number_of_rows_cols
36
36
  Board.new(rows_and_cols: number_of_rows_cols, squares: SquaresFactory.build_empty_squares(number_of_rows_cols) )
37
37
  end
38
38
 
39
+ def reset_board
40
+ self.board = generate_empty_board
41
+ end
42
+
43
+ def reset_game
44
+ reset_board
45
+ self.number_of_turns_taken = 0
46
+ end
47
+
39
48
  def play
40
- while !over?
41
- print_board
42
- square_choice = get_square_choice
43
- #note that change_square moves current_player forward only if game is not won
44
- change_square(square_choice, current_player.value)
45
- end
49
+ while true
50
+ while !over?
51
+ print_board
52
+ square_choice = get_square_choice
53
+ #note that change_square moves current_player forward only if game is not won
54
+ if square_choice == :exit
55
+ break
56
+ else
57
+ change_square(square_choice, current_player.value)
58
+ end
59
+ end
46
60
 
47
- if won?
48
- print_board
49
- io.present_with_new_line("#{current_player.name} wins!")
50
- else
61
+ #need to print_final_iteration of board
51
62
  print_board
52
- io.present_with_new_line("Draw!")
63
+
64
+ if won?
65
+ winning_prompt
66
+ elsif draw?
67
+ draw_prompt
68
+ end
69
+
70
+ reset_game
71
+ new_game_starting_graphic
53
72
  end
54
73
  end
55
74
 
75
+
56
76
  def get_square_choice
57
77
  if current_player.type == :human
58
78
  input_helper.get_square_to_change(current_player.name, available_choices)
@@ -77,6 +97,10 @@ module TTT
77
97
  board.full? || board.won?
78
98
  end
79
99
 
100
+ def draw?
101
+ board.full? && !board.won?
102
+ end
103
+
80
104
  def won?
81
105
  board.won?
82
106
  end
@@ -125,5 +149,17 @@ module TTT
125
149
  def current_turn_player_index
126
150
  (number_of_turns_taken % number_of_players)
127
151
  end
152
+
153
+ def winning_prompt
154
+ io.present_with_new_line("#{current_player.name} wins!")
155
+ end
156
+
157
+ def draw_prompt
158
+ io.present_with_new_line("Draw!")
159
+ end
160
+
161
+ def new_game_starting_graphic
162
+ input_helper.new_game_starting_graphic
163
+ end
128
164
  end
129
165
  end
@@ -1,6 +1,6 @@
1
1
  module TTT
2
2
  class InputHelper
3
- attr_accessor :io
3
+ attr_accessor :io, :keep_going
4
4
 
5
5
  def initialize(io)
6
6
  @io = io
@@ -81,6 +81,11 @@ module TTT
81
81
  user_choice = nil
82
82
  while true
83
83
  user_choice = io.receive
84
+ if user_choice.to_s.upcase == "EXIT"
85
+ #http://blog.honeybadger.io/how-to-exit-a-ruby-program/
86
+ exit(0)
87
+ end
88
+ #breaks out of input loop if input is valid (the block validation makes sure some rule is true)
84
89
  break if block_validation.call(user_choice)
85
90
  puts reprompt
86
91
  end
@@ -95,5 +100,26 @@ module TTT
95
100
  end
96
101
  io.present("\n")
97
102
  end
103
+
104
+ def new_game_starting_graphic
105
+ io.present("New game starting in 3")
106
+ i = 2
107
+ 2.times do
108
+ marching_dots
109
+ io.present("#{i.to_s}")
110
+ i = i - 1
111
+ end
112
+ marching_dots
113
+ io.present("\n")
114
+ end
115
+
116
+ def marching_dots
117
+ sleep(0.4)
118
+ io.present(".")
119
+ sleep(0.3)
120
+ io.present(".")
121
+ sleep(0.3)
122
+ io.present(".")
123
+ end
98
124
  end
99
125
  end
@@ -1,3 +1,3 @@
1
1
  module TTT
2
- VERSION = "0.1.0"
2
+ VERSION = "0.2.0"
3
3
  end
data/tictactoe.gemspec CHANGED
@@ -32,4 +32,5 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency "bundler", "~> 1.14"
33
33
  spec.add_development_dependency "rake", "~> 10.0"
34
34
  spec.add_development_dependency "rspec", "~> 3.0"
35
+ spec.add_development_dependency 'pry', '~> 0.10.4'
35
36
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tic_tac_toe_bfox
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.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-09-17 00:00:00.000000000 Z
11
+ date: 2017-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,10 +52,26 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.10.4
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.10.4
55
69
  description: In order to play the game, please type "tictactoe" at the command line.
56
70
  email:
57
71
  - brettfox11@gmail.com
58
- executables: []
72
+ executables:
73
+ - setup
74
+ - tictactoe
59
75
  extensions: []
60
76
  extra_rdoc_files: []
61
77
  files:
@@ -65,8 +81,8 @@ files:
65
81
  - Gemfile
66
82
  - README.md
67
83
  - Rakefile
68
- - bin/setup
69
- - bin/tictactoe
84
+ - exe/setup
85
+ - exe/tictactoe
70
86
  - lib/tictactoe.rb
71
87
  - lib/tictactoe/board.rb
72
88
  - lib/tictactoe/board_presenter_terminal.rb