tic-tac-toe-with-ai 0.0.1 → 0.0.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a9f495aa72d65eac7567d162d13adef817ddeb50
4
- data.tar.gz: dc3d6ee57e3354f212e52988a8807aba58d32581
3
+ metadata.gz: e62b808f2c145609626467665cc40bd318d0d39f
4
+ data.tar.gz: 362ad948c77f086b98acd00001c9c319ff73cb31
5
5
  SHA512:
6
- metadata.gz: d88e9b6cf18d235506a46e5c3f7de45dd997c0cf5f72de31cf996531095c9861b20ba7c25dd0315d1519eaaba8ad0ea718db4209edeca213ceb1ccf09a71c085
7
- data.tar.gz: db8e1789fb5a32ac9ba5edf45912354d0878ad8f75890d2689fdbcb546b896cbe724f790f1e2005bcdec7bdf981228981490349b52a9cef08aa45ec0832b4b98
6
+ metadata.gz: 476ca0249d34210f61b2152f5ef6b0a33fbbf358ea073ef438ebc3cce8a40cf6742dfc742d20cb36ef64e2d7c127fc175c5d2b362409e8b3e020cce15b1d4cf8
7
+ data.tar.gz: b4b32d055f8139f0d9a3d269dbfc4d5662e1228435d9c8b8628d8bf42aae54c3a4ad2d46336e8839155fbe6aaecf7c141a51a830f0d0cf17fa0306742bb9dfbe
@@ -1,18 +1,18 @@
1
1
  module TicTacToe
2
-
2
+
3
3
  class ComputerPlayer
4
4
 
5
5
  def initialize
6
6
  @triples = [ [1,2,3], [4,5,6], [7,8,9], [1,4,7], [2,5,8], [3,6,9], [1,5,9], [3,5,7] ]
7
7
  end
8
-
8
+
9
9
  def decide_move(board)
10
10
  return find_winning_cell(board, "O") if find_winning_cell(board, "O") != nil
11
11
  return find_winning_cell(board, "X") if find_winning_cell(board, "X") != nil
12
12
  return random_move(board)
13
13
  end
14
14
 
15
- def find_winning_cell(board, mark)
15
+ def find_winning_cell(board, mark)
16
16
  return find_cell(board, mark) if find_cell(board, mark) != nil
17
17
  return nil
18
18
  end
@@ -27,7 +27,7 @@ module TicTacToe
27
27
  end
28
28
 
29
29
  private
30
-
30
+
31
31
  def find_cell(board, mark)
32
32
  @triples.each do |triplet|
33
33
  define_permutation(triplet[0], triplet[1], triplet[2]).each do |triple|
@@ -36,7 +36,7 @@ module TicTacToe
36
36
  end
37
37
  return nil
38
38
  end
39
-
39
+
40
40
  def define_permutation(cell_one, cell_two, cell_three)
41
41
  return [cell_one, cell_two, cell_three].permutation.to_a
42
42
  end
@@ -50,12 +50,9 @@ module TicTacToe
50
50
  end
51
51
 
52
52
  def spot_is_empty?(board, position)
53
- ["X", "O"].each do |mark|
54
- return false if board[position] == mark
55
- end
56
- return true
53
+ board[position].nil?
57
54
  end
58
55
 
59
56
  end
60
-
57
+
61
58
  end
@@ -1,25 +1,25 @@
1
1
  module TicTacToe
2
-
2
+
3
3
  class Board
4
-
4
+
5
5
  def initialize
6
6
  @board_positions = []
7
7
  end
8
-
8
+
9
9
  def set_mark(mark, position)
10
10
  @board_positions[position] = mark
11
11
  end
12
-
12
+
13
13
  def get_mark_at(position)
14
14
  @board_positions[position]
15
15
  end
16
-
16
+
17
17
  def return_entire_board
18
18
  return [get_mark_at(1), get_mark_at(2), get_mark_at(3),
19
19
  get_mark_at(4), get_mark_at(5), get_mark_at(6),
20
20
  get_mark_at(7), get_mark_at(8), get_mark_at(9)]
21
21
  end
22
-
22
+
23
23
  def rows
24
24
  position_groups_to_marks([
25
25
  [1, 2, 3],
@@ -27,7 +27,7 @@ module TicTacToe
27
27
  [7, 8, 9]
28
28
  ])
29
29
  end
30
-
30
+
31
31
  def columns
32
32
  position_groups_to_marks([
33
33
  [1, 4, 7],
@@ -35,16 +35,16 @@ module TicTacToe
35
35
  [3, 6, 9]
36
36
  ])
37
37
  end
38
-
38
+
39
39
  def diagonals
40
40
  position_groups_to_marks([
41
41
  [1, 5, 9],
42
42
  [3, 5, 7]
43
43
  ])
44
44
  end
45
-
45
+
46
46
  private
47
-
47
+
48
48
  def position_groups_to_marks(position_groups)
49
49
  position_groups.collect do |positions|
50
50
  positions.collect do |position|
@@ -52,7 +52,7 @@ module TicTacToe
52
52
  end
53
53
  end
54
54
  end
55
-
55
+
56
56
  end
57
-
57
+
58
58
  end
@@ -1,8 +1,9 @@
1
1
  module TicTacToe
2
+
2
3
  class Game
3
-
4
+
4
5
  attr_reader :computer_player, :board
5
-
6
+
6
7
  def initialize
7
8
  @board = Board.new
8
9
  @rules = Rules.new(@board)
@@ -11,47 +12,37 @@ module TicTacToe
11
12
  end
12
13
 
13
14
  def in_progress?
14
- return false if winner_exists?
15
- return false if tie_exists?
15
+ return false if winner || tie
16
16
  return true
17
17
  end
18
18
 
19
19
  def move(position)
20
- board.set_mark(current_mark, position)
20
+ @board.set_mark(current_mark, position)
21
21
  change_current_mark
22
22
  end
23
23
 
24
24
  def get_mark_at(position)
25
- board.get_mark_at(position)
25
+ @board.get_mark_at(position)
26
26
  end
27
-
27
+
28
28
  def winner
29
- rules.winner
29
+ @rules.winner
30
30
  end
31
-
31
+
32
32
  def tie
33
- rules.tie
33
+ @rules.tie
34
34
  end
35
-
35
+
36
36
  private
37
-
38
- attr_reader :marks, :rules
39
37
 
40
38
  def current_mark
41
- marks.first
39
+ @marks.first
42
40
  end
43
-
41
+
44
42
  def change_current_mark
45
- marks.reverse!
46
- end
47
-
48
- def winner_exists?
49
- !winner.nil?
50
- end
51
-
52
- def tie_exists?
53
- tie
43
+ @marks.reverse!
54
44
  end
55
45
 
56
46
  end
47
+
57
48
  end
@@ -1,41 +1,39 @@
1
1
  module TicTacToe
2
+
2
3
  class Rules
3
-
4
+
4
5
  def initialize(board)
5
6
  @board = board
6
7
  end
7
-
8
+
8
9
  def winner
9
10
  return "tie" if tie
10
- ["X", "O"].detect do |mark|
11
- winning_mark?(mark)
12
- end
11
+ ["X", "O"].detect { |mark| winning_mark?(mark) }
13
12
  end
14
-
13
+
15
14
  def tie
16
15
  (1..9).each do |position|
17
- return false if @board.get_mark_at(position) == nil
16
+ return false if @board.get_mark_at(position).nil?
18
17
  end
19
18
  return true
20
19
  end
21
-
20
+
22
21
  private
23
-
22
+
24
23
  def winning_mark?(mark)
25
24
  potential_winning_combinations.any? do |marks|
26
25
  winning_marks?(marks, mark)
27
26
  end
28
27
  end
29
-
28
+
30
29
  def potential_winning_combinations
31
- board.rows + board.columns + board.diagonals
30
+ @board.rows + @board.columns + @board.diagonals
32
31
  end
33
-
32
+
34
33
  def winning_marks?(marks, mark)
35
34
  marks == [mark] * 3
36
35
  end
37
-
38
- attr_reader :board
39
-
36
+
40
37
  end
38
+
41
39
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tic-tac-toe-with-ai
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cyrus Vandrevala
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-06 00:00:00.000000000 Z
11
+ date: 2014-10-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: A tic-tac-toe-app with an unbeatable AI.
13
+ description: A simple tic-tac-toe-app with an unbeatable AI.
14
14
  email: cyrus.vandrevala@gmail.com
15
15
  executables: []
16
16
  extensions: []