tictactoe 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/tictactoe.rb +45 -43
  2. metadata +1 -1
data/lib/tictactoe.rb CHANGED
@@ -2,11 +2,13 @@ require "color_text"
2
2
 
3
3
  class Tictactoe
4
4
 
5
- @@moves = (0..8).to_a
6
- @@computer_move = 4
7
- @@playing = true
8
- @@message = "Please enter your move".blue
9
- @@continue = true
5
+ def initialize
6
+ @moves = (0..8).to_a
7
+ @computer_move = 4
8
+ @playing = true
9
+ @message = "Please enter your move".blue
10
+ @continue = true
11
+ end
10
12
 
11
13
  def play_game
12
14
  play_tictactoe
@@ -25,23 +27,23 @@ class Tictactoe
25
27
  def play_tictactoe
26
28
  display_board
27
29
  @start_game = interactive
28
- while @@continue
30
+ while @continue
29
31
  print "\e[2J\e[f" # clear screen
30
32
  case @start_game
31
33
  when 'y'
32
34
  display_board
33
35
  competitor_plays
34
- break if !@@continue
36
+ break if !@continue
35
37
  computer_plays
36
- break if !@@continue
38
+ break if !@continue
37
39
  when 'q'
38
40
  break
39
41
  when 'n'
40
42
  computer_plays
41
43
  display_board
42
- break if !@@continue
44
+ break if !@continue
43
45
  competitor_plays
44
- break if !@@continue
46
+ break if !@continue
45
47
  else
46
48
  display_board
47
49
  puts 'Please enter appropriate options'.red
@@ -56,18 +58,18 @@ class Tictactoe
56
58
  end
57
59
 
58
60
  def computer_plays
59
- if @@playing
61
+ if @playing
60
62
  computer_moves
61
- @@continue = continue_playing
63
+ @continue = continue_playing
62
64
  end
63
65
  end
64
66
 
65
67
  def competitor_plays
66
- if @@continue
67
- puts @@message
68
+ if @continue
69
+ puts @message
68
70
  move = gets.chomp
69
71
  play(move)
70
- @@continue = continue_playing
72
+ @continue = continue_playing
71
73
  end
72
74
  end
73
75
 
@@ -81,52 +83,52 @@ class Tictactoe
81
83
 
82
84
  def play(move)
83
85
  if move.size > 1
84
- @@playing = false
85
- @@message = "Please enter appropriate move".red
86
- puts @@message
87
- elsif @@moves.values_at(move.to_i).first == "X" || @@moves.values_at(move.to_i).first == "O"
88
- @@playing = false
89
- @@message = "Please choose another move, it's already taken".red
90
- puts @@message
86
+ @playing = false
87
+ @message = "Please enter appropriate move".red
88
+ puts @message
89
+ elsif @moves.values_at(move.to_i).first == "X" || @moves.values_at(move.to_i).first == "O"
90
+ @playing = false
91
+ @message = "Please choose another move, it's already taken".red
92
+ puts @message
91
93
  elsif !is_numeric(move)
92
- @@playing = false
93
- @@message = "Please enter correct move".red
94
- puts @@message
94
+ @playing = false
95
+ @message = "Please enter correct move".red
96
+ puts @message
95
97
  else
96
- position = @@moves.index(move.to_i)
97
- @@playing = true
98
- @@message = "Please enter your move".blue
99
- @@moves[position] = "O"
98
+ position = @moves.index(move.to_i)
99
+ @playing = true
100
+ @message = "Please enter your move".blue
101
+ @moves[position] = "O"
100
102
  end
101
103
  end
102
104
 
103
105
  def computer_moves
104
- temp_moves = @@moves.clone
106
+ temp_moves = @moves.clone
105
107
  temp_moves.delete("O")
106
108
  temp_moves.delete("X")
107
- if temp_moves.size == @@moves.size
108
- @@moves[4] = "X"
109
+ if temp_moves.size == @moves.size
110
+ @moves[4] = "X"
109
111
  elsif computer_best_move
110
- @@computer_move = computer_best_move
111
- @@moves[computer_best_move] = "X"
112
+ @computer_move = computer_best_move
113
+ @moves[computer_best_move] = "X"
112
114
  elsif competitor_best_move
113
- @@computer_move = competitor_best_move
114
- @@moves[competitor_best_move] = "X"
115
+ @computer_move = competitor_best_move
116
+ @moves[competitor_best_move] = "X"
115
117
  else
116
118
  indexes = temp_moves.inject([]) do |result, element|
117
- result << @@moves.index(element)
119
+ result << @moves.index(element)
118
120
  result
119
121
  end
120
122
  position_index = rand(0...indexes.size)
121
123
  values_position = indexes.values_at(position_index).first
122
- @@computer_move = values_position
123
- @@moves[values_position] = "X"
124
+ @computer_move = values_position
125
+ @moves[values_position] = "X"
124
126
  end
125
127
  end
126
128
 
127
129
  def display_board
128
130
  board = ""
129
- @@moves.each_with_index do |move, index|
131
+ @moves.each_with_index do |move, index|
130
132
  case move
131
133
  when 'X'
132
134
  color_moves = "#{move}".purple
@@ -157,7 +159,7 @@ class Tictactoe
157
159
  end
158
160
 
159
161
  def play_until_draw
160
- unmoved = @@moves.select do |move|
162
+ unmoved = @moves.select do |move|
161
163
  (0..10).include?(move)
162
164
  end
163
165
  !(unmoved.any?)
@@ -165,14 +167,14 @@ class Tictactoe
165
167
 
166
168
  def get_values
167
169
  score_values.inject([]) do |result, v|
168
- result << @@moves.values_at(v[0], v[1], v[2]).uniq
170
+ result << @moves.values_at(v[0], v[1], v[2]).uniq
169
171
  result
170
172
  end
171
173
  end
172
174
 
173
175
  def best_move(check_moves_of, replace_with)
174
176
  score_values.each do |v|
175
- result = @@moves.values_at(v[0], v[1], v[2])
177
+ result = @moves.values_at(v[0], v[1], v[2])
176
178
  if result.include?("#{check_moves_of}") && result.count("#{check_moves_of}") == 2
177
179
  result.delete("#{check_moves_of}")
178
180
  if result.first == "#{replace_with}"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tictactoe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors: