ultimate_tic_tac_toe 0.0.21 → 0.0.22

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: b2f259908af12ca6c27a5057faae16a431ce2313
4
- data.tar.gz: c6eda1e857bc58679e0d53b50820e3e1c581058c
3
+ metadata.gz: 01d7235b18b68a18582585e55ce9f5ebf6eae57e
4
+ data.tar.gz: 179446d7a2c5fb9ebd1234d7b522315d5b8ea981
5
5
  SHA512:
6
- metadata.gz: c983dace240e29d196ef3f89d066f2700134b5271c337377d9d785c91386c469498051aded5d4b5fe8678bd9fad2ebc6e8bbd5ed717eb18fb7381b57dabf27ee
7
- data.tar.gz: e1b7e9f2f1c0dd57cf0cce8aa2ab069e3d0b8a22fc21c16c18421f85373bc34eb1d0458d0b80cf7fe72454c3ff08f4637d32f050eb577a1f7081023a5703e2a0
6
+ metadata.gz: 7b8fb7ecb3f51738586c7433b060846347522c98bd3c47e8928d25a0b038236870436968b26f90e5a452e632c3c7a5f6bc99f3d4887d7fa542e77b138da3ce61
7
+ data.tar.gz: 75f1d7476f2aa230ed2cdcf9690781fcb2a67ba3296b8521ad0051b94e03d90ab5593a4267eab32690e381b10c3c87c4b55fa07a6d28d9ad9060e889038cc6b8
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # UltimateTicTacToe
2
2
 
3
- TODO: Write a gem description
3
+ This Gem is meant to serve as the computer decision-making engine for playing Tic Tac Toe.
4
+ It uses the minimax recursive algorith
4
5
 
5
6
  ## Installation
6
7
 
@@ -1,9 +1,8 @@
1
1
  $: << File.expand_path(File.dirname(__FILE__) + "/ultimate_tic_tac_toe/")
2
2
 
3
- require 'game'
4
3
  require 'board'
5
- require 'interface'
6
4
  require 'computer'
5
+ require 'global_vars'
7
6
  require "version"
8
7
 
9
8
  module UltimateTicTacToe
@@ -0,0 +1,11 @@
1
+ class GlobalVars
2
+
3
+ HUMAN = "X"
4
+ COMPUTER = "O"
5
+ ThreeXThree = 9
6
+ FourXFour = 16
7
+ FiveXFive = 25
8
+
9
+ end
10
+
11
+
@@ -1,3 +1,3 @@
1
1
  module UltimateTicTacToe
2
- VERSION = "0.0.21"
2
+ VERSION = "0.0.22"
3
3
  end
@@ -1,4 +1,3 @@
1
1
  $: << File.dirname(__FILE__) + '/../lib/ultimate_tic_tac_toe'
2
2
 
3
3
  require 'board'
4
- require 'game.rb'
@@ -2,7 +2,6 @@ require 'computer'
2
2
  require 'board'
3
3
 
4
4
  describe Computer do
5
- let!(:new_interface) {Interface.new}
6
5
  let!(:new_board) {Board.new(9)}
7
6
  let(:new_computer) {Computer.new}
8
7
  let(:fun_game) {Game.new(new_interface, new_computer)}
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ultimate_tic_tac_toe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.21
4
+ version: 0.0.22
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rod Levy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-09-30 00:00:00.000000000 Z
11
+ date: 2013-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -53,14 +53,11 @@ files:
53
53
  - lib/ultimate_tic_tac_toe.rb
54
54
  - lib/ultimate_tic_tac_toe/board.rb
55
55
  - lib/ultimate_tic_tac_toe/computer.rb
56
- - lib/ultimate_tic_tac_toe/game.rb
57
- - lib/ultimate_tic_tac_toe/interface.rb
56
+ - lib/ultimate_tic_tac_toe/global_vars.rb
58
57
  - lib/ultimate_tic_tac_toe/version.rb
59
58
  - spec/spec_helper.rb
60
59
  - spec/ultimate_tic_tac_toe/board_spec.rb
61
60
  - spec/ultimate_tic_tac_toe/computer_spec.rb
62
- - spec/ultimate_tic_tac_toe/game_spec.rb
63
- - spec/ultimate_tic_tac_toe/interface_spec.rb
64
61
  - ultimate_tic_tac_toe.gemspec
65
62
  homepage: ''
66
63
  licenses:
@@ -82,7 +79,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
79
  version: '0'
83
80
  requirements: []
84
81
  rubyforge_project:
85
- rubygems_version: 2.0.6
82
+ rubygems_version: 2.1.5
86
83
  signing_key:
87
84
  specification_version: 4
88
85
  summary: Implements a game of tic-tac-toe where the computer always wins
@@ -90,5 +87,3 @@ test_files:
90
87
  - spec/spec_helper.rb
91
88
  - spec/ultimate_tic_tac_toe/board_spec.rb
92
89
  - spec/ultimate_tic_tac_toe/computer_spec.rb
93
- - spec/ultimate_tic_tac_toe/game_spec.rb
94
- - spec/ultimate_tic_tac_toe/interface_spec.rb
@@ -1,83 +0,0 @@
1
- class Game
2
-
3
- HUMAN = "X"
4
- COMPUTER = "O"
5
-
6
- attr_accessor :position
7
-
8
- def initialize(interface, computer)
9
- @interface = interface
10
- @computer = computer
11
- end
12
-
13
- def check_within_range(position, grid_length)
14
- if position == "0"
15
- true
16
- elsif position.to_i < grid_length && position.to_i > 0
17
- true
18
- else
19
- false
20
- end
21
- end
22
-
23
- def check_space_unoccupied(position)
24
- @board.unoccupied(position)
25
- end
26
-
27
- def validate_input(inputted_position, grid)
28
- end_of_grid = grid.length
29
-
30
- until check_within_range(inputted_position, end_of_grid)
31
- @interface.reject(inputted_position)
32
- @interface.prompt
33
- inputted_position = @interface.user_input
34
- end
35
-
36
- until check_space_unoccupied(inputted_position.to_i)
37
- @interface.denied
38
- @interface.prompt
39
- inputted_position = @interface.user_input
40
- end
41
-
42
- inputted_position.to_i
43
- end
44
-
45
- def game_over
46
- (@board.tie? || @board.winner?(COMPUTER) || @board.winner?(HUMAN))
47
- end
48
-
49
- def check_board_after_computer_move
50
- if @board.winner?("O") == true
51
- @interface.computer_wins
52
- @interface.pretty_print_board(@board.grid)
53
-
54
- elsif @board.tie?
55
- @interface.cats_game
56
- end
57
- end
58
-
59
- def play
60
- @board = @board ||= Board.new(@interface.grid_size)
61
-
62
- until game_over
63
-
64
- @interface.pretty_print_board(@board.grid)
65
- @interface.prompt
66
- position = validate_input(@interface.user_input, @board.grid)
67
-
68
- @board.store_position(position, HUMAN)
69
-
70
- if @board.winner?("X") == true
71
- @interface.player_wins
72
- @interface.pretty_print_board(@board.grid)
73
- else
74
- @computer.computer_move(@board)
75
- check_board_after_computer_move
76
- end
77
-
78
- end
79
- end
80
-
81
- end
82
-
83
-
@@ -1,75 +0,0 @@
1
- class Interface
2
-
3
- def opening_prompt
4
- puts "What size board do you want to play (9, 16, 25)"
5
- size = user_input
6
- size
7
- end
8
-
9
- def grid_size
10
- size = opening_prompt
11
-
12
- if size == "9" || size == "16" || size == '25'
13
- return size.to_i
14
- else
15
- puts "Please enter 9, 16 or 25"
16
- grid_size
17
- end
18
-
19
- end
20
-
21
- def axis_length(size)
22
- Math.sqrt(size).to_i
23
- end
24
-
25
- def insert_spaces(position, size, output, grid)
26
- if position % axis_length(size) == (axis_length(size) - 1)
27
- output << "\n" unless position == (size - 1)
28
- else
29
- if position < 10 || !grid[position].nil?
30
- output << " "
31
- else
32
- output << " "
33
- end
34
- end
35
-
36
- end
37
-
38
- def pretty_print_board(grid)
39
- output = ""
40
- size = grid.length
41
- size.times do |position|
42
- output << (grid[position].nil? ? position.to_s : "#{grid[position]}")
43
- insert_spaces(position, size, output, grid)
44
- end
45
- puts "\n Your Board \n\n\n" + output
46
- end
47
-
48
- def prompt
49
- puts "Where do you want to place your X?"
50
- end
51
-
52
- def user_input
53
- gets.chomp
54
- end
55
-
56
- def denied
57
- puts "Already occupied, try again"
58
- end
59
-
60
- def cats_game
61
- puts "CATS GAME!"
62
- end
63
-
64
- def computer_wins
65
- puts "Computer wins! Again"
66
- end
67
-
68
- def player_wins
69
- puts "Human wins! Impossible!"
70
- end
71
-
72
- def reject(position)
73
- puts "#{position} isnt no good"
74
- end
75
- end
@@ -1,29 +0,0 @@
1
- require 'game'
2
- require 'interface'
3
- require 'board'
4
- # puts $:
5
- describe Game do
6
- let!(:new_interface) {Interface.new}
7
- let!(:new_board) {Board.new(9)}
8
- let(:new_computer) {Computer.new}
9
- let(:fun_game) {Game.new(new_interface, new_computer)}
10
-
11
- it "can check that human's move is within the board" do
12
- fun_game.check_within_range("7", new_board.grid.length).should eq true
13
- end
14
-
15
- it 'determines when the game is over' do
16
- fun_game.stub(:new).and_return(new_board)
17
- new_board.stub(:tie?).and_return(true)
18
- fun_game.game_over.should be(true)
19
- end
20
-
21
- it "informs the player of bad input" do
22
- # new_interface.stub(:gets){"g\n"}
23
- # fun_game.validate_input("\z", new_board.grid)
24
- # fun_game.should_receive(:validate_input).with("d", new_board.grid)
25
- fun_game.should_receive(:puts).with("f isnt no good")
26
- fun_game.validate_input("f", new_board.grid)
27
- # new_interface.prompt
28
- end
29
- end
@@ -1,38 +0,0 @@
1
- require 'game'
2
- require 'interface'
3
- require 'board'
4
-
5
-
6
- describe Interface do
7
-
8
- let!(:new_interface) {Interface.new}
9
- let!(:new_board) {Board.new(9)}
10
- let(:new_computer) {Computer.new}
11
- let(:fun_game) {Game.new(new_interface, new_computer)}
12
-
13
- # it "informs the player of bad input" do
14
- # Interface.stub(:new).and_return(new_interface)
15
- # new_interface.stub(:gets){"g\n"}
16
- # fun_game.should_receive(:puts).with("f isnt no good").at_least(1).times
17
- # new_interface.prompt
18
- # end
19
-
20
- # it 'prints a board that corresponds to the grid size' do
21
-
22
- # end
23
- it 'gets the initial input from human' do
24
- new_interface.stub(:gets){"9\n"}
25
- new_interface.opening_prompt.should == "9"
26
- end
27
-
28
- it 'determines the grid length of the board' do
29
- new_interface.stub(:gets){"9\n"}
30
- new_interface.grid_size.should == 9
31
- end
32
-
33
- it 'prints out a pretty board' do
34
- new_interface.should_receive(:puts).with("\n Your Board \n\n\n0 1 2\n3 4 5\n6 7 8")
35
- new_interface.pretty_print_board(new_board.grid)
36
- end
37
-
38
- end