ruby_chess 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0f9cebf323ed1409f108613fc3f1403b327858f4
4
+ data.tar.gz: 801a167cb2e0c90e86ae7811fd39ceb09e351eb5
5
+ SHA512:
6
+ metadata.gz: 5f7cdb3f6eb1c0558f54fb686912fff36a4e468991f21aa4959bd1e3002c823df2a5181ec7192ed2fde286952dc1929debbfbca0a29a4ee90abe7b4ba4b60938
7
+ data.tar.gz: 6aa63e24024b75cb0d2e85d7edd3a8c50a14361527564cd51534b2b3d01295d495a3cb7bf254856f7047561837fbee952a66020755ac810925851c4d6e07872c
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in ruby_chess.gemspec
4
+ gemspec
5
+
6
+ gem 'colorize'
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # RubyChess
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/ruby_chess`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'ruby_chess'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install ruby_chess
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Development
28
+
29
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
30
+
31
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
32
+
33
+ ## Contributing
34
+
35
+ 1. Fork it ( https://github.com/[my-github-username]/ruby_chess/fork )
36
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
37
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
38
+ 4. Push to the branch (`git push origin my-new-feature`)
39
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
data/bin/ruby_chess ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'ruby_chess'
4
+ t = RubyChess.new
5
+ t.run
data/lib/board.rb ADDED
@@ -0,0 +1,187 @@
1
+ # coding: utf-8
2
+ require 'colorize'
3
+ require 'io/console'
4
+ require_relative 'pieces'
5
+ require_relative 'errors'
6
+
7
+ class Board
8
+
9
+ attr_reader :grid, :cursor
10
+
11
+ def initialize(setup = true)
12
+ @grid = Array.new(8) { Array.new(8) }
13
+ @cursor = [0,0]
14
+
15
+ populate_board if setup
16
+ end
17
+
18
+ def move(start_pos, end_pos, color)
19
+ raise OffBoardError unless on_board?(start_pos) && on_board?(end_pos)
20
+ raise NoPieceError unless piece_at(start_pos)
21
+ raise WrongColorError unless piece_at(start_pos).color == color
22
+
23
+ current_piece = piece_at(start_pos)
24
+ if current_piece.valid_moves.include?(end_pos)
25
+ move!(start_pos, end_pos)
26
+ else
27
+ raise InvalidMoveError
28
+ end
29
+ end
30
+
31
+ def move!(start_pos, end_pos)
32
+ current_piece = piece_at(start_pos)
33
+ self[start_pos] = nil
34
+ self[end_pos] = current_piece
35
+ current_piece.pos = end_pos
36
+ current_piece.moved = true
37
+ end
38
+
39
+ def move_cursor
40
+ input = ""
41
+ until input == "\r"
42
+ render(@cursor)
43
+ input = STDIN.getch
44
+ @cursor[0] += 1 if input == 'k' && @cursor[0] + 1 < 8
45
+ @cursor[0] -= 1 if input == 'i' && @cursor[0] - 1 >= 0
46
+ @cursor[1] -= 1 if input == 'j' && @cursor[1] - 1 >= 0
47
+ @cursor[1] += 1 if input == 'l' && @cursor[1] + 1 < 8
48
+
49
+ end
50
+ @cursor.dup
51
+ end
52
+
53
+ def [](pos)
54
+ @grid[pos.first][pos.last]
55
+ end
56
+
57
+ def []=(pos, piece)
58
+ @grid[pos.first][pos.last] = piece
59
+ end
60
+
61
+ def on_board?(pos)
62
+ (pos[0]).between?(0, 7) && (pos[1]).between?(0, 7)
63
+ end
64
+
65
+ def occupied?(pos)
66
+ return false unless on_board?(pos)
67
+ !!self[pos]
68
+ end
69
+
70
+ def won?
71
+ checkmate?(:white) || checkmate?(:black)
72
+ end
73
+
74
+ def stalemate?(color)
75
+ pieces(color).all? { |piece| piece.valid_moves.empty? } && !in_check?(color)
76
+ end
77
+
78
+ def piece_at(pos)
79
+ self[pos]
80
+ end
81
+
82
+ def checkmate?(color)
83
+ pieces(color).all? { |piece| piece.valid_moves.empty? } &&
84
+ in_check?(color)
85
+ end
86
+
87
+ def in_check?(color)
88
+ opponent_color = color == :white ? :black : :white
89
+ king_pos = king(color).pos
90
+ pieces(opponent_color).any? do |piece|
91
+ piece.moves.include?(king_pos)
92
+ end
93
+ end
94
+
95
+ def deep_dup
96
+ dup_board = Board.new(false)
97
+
98
+ [:white, :black].each do |color|
99
+ pieces(color).each do |piece|
100
+ duped_piece = piece.dup(dup_board)
101
+ dup_board[duped_piece.pos] = duped_piece
102
+ end
103
+ end
104
+
105
+ dup_board
106
+ end
107
+
108
+ def render(cursor = nil)
109
+ system('clear')
110
+ print (" " + ('a'..'h').to_a.join(" ") + "\n")
111
+ self.grid.each_with_index do |row, i|
112
+ print "#{i + 1} "
113
+ row.each_with_index do |space, j|
114
+ if cursor.nil?
115
+ if (i + j).odd?
116
+ background = :light_black
117
+ else
118
+ background = :light_blue
119
+ end
120
+ else
121
+ if @cursor == [i,j]
122
+ background = :yellow
123
+ elsif (i + j).odd?
124
+ background = :light_black
125
+ else
126
+ background = :light_blue
127
+ end
128
+ end
129
+ if space.nil?
130
+ print ' '.colorize(:background => background)
131
+ else
132
+ print "#{space.symbol} ".colorize(:color => space.color,
133
+ :background => background)
134
+ end
135
+ end
136
+ print " #{i + 1}"
137
+ puts
138
+ end
139
+ print (" " + ('a'..'h').to_a.join(" ") + "\n")
140
+ end
141
+
142
+
143
+ def king(color)
144
+ pieces(color).find { |piece| piece.is_a?(King)}
145
+ end
146
+
147
+ def pieces(color)
148
+ pieces = @grid.flatten.compact
149
+ pieces.select { |piece| piece.color == color}
150
+ end
151
+
152
+ def populate_board
153
+ [[1,:white], [6, :black]].each do |row|
154
+ @grid[row.first].map!.with_index do |space, i|
155
+ Pawn.new(self, row.last, [row.first, i])
156
+ end
157
+ end
158
+
159
+ [[0, :white], [7, :black]].each do |row|
160
+ @grid[row.first].map!.with_index do |space, i|
161
+ case i
162
+ when 0
163
+ Rook.new(self, row.last, [row.first, i])
164
+ when 1
165
+ Knight.new(self, row.last, [row.first, i])
166
+ when 2
167
+ Bishop.new(self, row.last, [row.first, i])
168
+ when 3
169
+ King.new(self, row.last, [row.first, i])
170
+ when 4
171
+ Queen.new(self, row.last, [row.first, i])
172
+ when 5
173
+ Bishop.new(self, row.last, [row.first, i])
174
+ when 6
175
+ Knight.new(self, row.last, [row.first, i])
176
+ when 7
177
+ Rook.new(self, row.last, [row.first, i])
178
+ end
179
+ end
180
+ end
181
+ end
182
+ end
183
+
184
+ if __FILE__ == $PROGRAM_NAME
185
+ board = Board.new
186
+ board.render
187
+ end
data/lib/errors.rb ADDED
@@ -0,0 +1,32 @@
1
+ class MoveError < IOError
2
+ end
3
+
4
+ class InvalidMoveError < MoveError
5
+ def message
6
+ "Not one of the possible moves for that piece."
7
+ end
8
+ end
9
+
10
+ class NoPieceError < MoveError
11
+ def message
12
+ "You didn't select a piece."
13
+ end
14
+ end
15
+
16
+ class WrongColorError < MoveError
17
+ def message
18
+ "You are attempting to move your opponent's piece"
19
+ end
20
+ end
21
+
22
+ class BadInputError < MoveError
23
+ def message
24
+ "Excuse me? Please provide valid input."
25
+ end
26
+ end
27
+
28
+ class OffBoardError < MoveError
29
+ def message
30
+ "That position is off the board."
31
+ end
32
+ end
data/lib/game.rb ADDED
@@ -0,0 +1,60 @@
1
+ # coding: utf-8
2
+ require_relative 'board'
3
+ require_relative 'players/human_player.rb'
4
+ require_relative 'players/computer_player.rb'
5
+
6
+ class Game
7
+ attr_accessor :board
8
+
9
+ def initialize(player_white, player_black)
10
+ @board = Board.new
11
+ @player_white = player_white
12
+ @player_white.board = @board
13
+ @player_black = player_black
14
+ @player_black.board = @board
15
+ @current_player = player_white
16
+ end
17
+
18
+ def right_color?(pos)
19
+ @board[pos].color == @current_player.color
20
+ end
21
+
22
+ def switch_player
23
+ if @current_player == @player_white
24
+ @current_player = @player_black
25
+ else
26
+ @current_player = @player_white
27
+ end
28
+ end
29
+
30
+ def game_status
31
+ message = ""
32
+ if @board.in_check?(@current_player.color)
33
+ message += "#{@current_player.color.to_s.capitalize} is in check \n"
34
+ end
35
+ message += "#{@current_player.color.to_s.capitalize}'s turn \n"
36
+ end
37
+
38
+ def play
39
+ until @board.won? || @board.stalemate?(@current_player.color)
40
+ begin
41
+ board.render
42
+ puts game_status
43
+ start_pos, end_pos = @current_player.make_move
44
+ @board.move(start_pos, end_pos, @current_player.color)
45
+ switch_player
46
+ rescue MoveError => e
47
+ puts e.message
48
+ puts "Enter to continue"
49
+ gets
50
+ end
51
+ end
52
+ board.render
53
+ if @board.stalemate?(@current_player.color)
54
+ puts "Stalemate"
55
+ else
56
+ switch_player
57
+ puts "#{@current_player.color.to_s.capitalize} wins!"
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+ require_relative 'sliding_piece'
3
+
4
+ class Bishop < SlidingPiece
5
+ def symbol
6
+ '♝'
7
+ end
8
+
9
+ def move_dirs
10
+ [[1, 1],
11
+ [-1, 1],
12
+ [1, -1],
13
+ [-1, -1]]
14
+ end
15
+
16
+ def value
17
+ 3
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ # coding: utf-8
2
+ require_relative 'stepping_piece'
3
+
4
+ class King < SteppingPiece
5
+ def symbol
6
+ '♚'
7
+ end
8
+
9
+ def move_diffs
10
+ [
11
+ [1, 1],
12
+ [1, 0],
13
+ [0, 1],
14
+ [-1, 1],
15
+ [1, -1],
16
+ [-1, -1],
17
+ [-1, 0],
18
+ [0, -1]
19
+ ]
20
+ end
21
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ require_relative 'stepping_piece'
3
+
4
+ class Knight < SteppingPiece
5
+ def symbol
6
+ '♞'
7
+ end
8
+
9
+ def move_diffs
10
+ [
11
+ [1, 2],
12
+ [2, 1],
13
+ [-1, 2],
14
+ [2, -1],
15
+ [-1, -2],
16
+ [-2, -1],
17
+ [-2, 1],
18
+ [1, -2]
19
+ ]
20
+ end
21
+
22
+ def value
23
+ 3
24
+ end
25
+ end
@@ -0,0 +1,41 @@
1
+ # coding: utf-8
2
+ require_relative 'piece'
3
+
4
+ class Pawn < Piece
5
+ NORMAL_MOVE = [1, 0]
6
+ INITIAL_MOVE = [2, 0]
7
+ ATTACK_MOVES = [[1, 1], [1, -1]]
8
+
9
+
10
+ def symbol
11
+ '♟'
12
+ end
13
+
14
+ def moves
15
+ moves = []
16
+ modifier = self.color == :white ? 1 : -1
17
+
18
+ normal_move = sum_positions(NORMAL_MOVE.map { |move| move * modifier }, @pos)
19
+ unless @board.occupied?(normal_move)
20
+ moves << normal_move
21
+ end
22
+
23
+ initial_move = sum_positions(INITIAL_MOVE.map { |move| move * modifier }, @pos)
24
+ if !@moved && moves.include?(normal_move) && !@board.occupied?(initial_move)
25
+ moves << initial_move
26
+ end
27
+
28
+ ATTACK_MOVES.each do |attack_move|
29
+ potential_pos = sum_positions(@pos.dup, attack_move.map { |move| move * modifier })
30
+ if @board.occupied?(potential_pos) && @board.piece_at(potential_pos).color != @color
31
+ moves << potential_pos
32
+ end
33
+ end
34
+
35
+ moves.select { |move| @board.on_board?(move)}
36
+ end
37
+
38
+ def value
39
+ 1
40
+ end
41
+ end
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+ class Piece
3
+ attr_reader :color
4
+ attr_accessor :pos, :moved
5
+
6
+ def initialize(board, color, pos)
7
+ @board = board
8
+ @color = color
9
+ @pos = pos
10
+ @moved = false
11
+ end
12
+
13
+ def in_range_of_enemy?
14
+ @color == :white ? enemy_color = :black : enemy_color = :white
15
+ @board.pieces(enemy_color).each do |piece|
16
+ return true if piece.valid_moves.include?(@pos)
17
+ end
18
+ false
19
+ end
20
+
21
+ def symbol
22
+ raise NotImplementedError.new ("No symbol!")
23
+ end
24
+
25
+ def dup(dup_board)
26
+ self.class.new(dup_board, @color, @pos.dup)
27
+ end
28
+
29
+ def valid_moves
30
+ moves.reject { |move| move_into_check?(move) }
31
+ end
32
+
33
+ def move_into_check?(move)
34
+ duped_board = @board.deep_dup
35
+ duped_board.move!(self.pos, move)
36
+ duped_board.in_check?(@color)
37
+ end
38
+
39
+ def sum_positions(pos1, pos2)
40
+ [pos1.first + pos2.first, pos1.last + pos2.last]
41
+ end
42
+ end
@@ -0,0 +1,22 @@
1
+ # coding: utf-8
2
+ require_relative 'sliding_piece'
3
+
4
+ class Queen < SlidingPiece
5
+ def symbol
6
+ '♛'
7
+ end
8
+
9
+ def move_dirs
10
+ [[1, 0],
11
+ [0, 1],
12
+ [-1, 0],
13
+ [0, -1],
14
+ [1, 1],
15
+ [-1, 1],
16
+ [1, -1],
17
+ [-1, -1]]
18
+ end
19
+ def value
20
+ 9
21
+ end
22
+ end
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ require_relative 'sliding_piece'
3
+
4
+ class Rook < SlidingPiece
5
+ def symbol
6
+ '♜'
7
+ end
8
+
9
+ def move_dirs
10
+ [
11
+ [1, 0],
12
+ [0, 1],
13
+ [-1, 0],
14
+ [0, -1]
15
+ ]
16
+ end
17
+ def value
18
+ 5
19
+ end
20
+ end
@@ -0,0 +1,36 @@
1
+ # coding: utf-8
2
+ require_relative 'piece'
3
+
4
+ class SlidingPiece < Piece
5
+
6
+ def moves
7
+ moves = []
8
+ move_dirs.each do |dir|
9
+ moves += explore(dir)
10
+ end
11
+
12
+ moves
13
+ end
14
+
15
+ def explore(dir)
16
+ pos = @pos.dup
17
+ positions = []
18
+
19
+ while @board.on_board?([pos[0] + dir[0], pos[1] + dir[1]])
20
+ pos[0] += dir[0]
21
+ pos[1] += dir[1]
22
+ if @board.occupied?(pos)
23
+ if @board.piece_at(pos).color == self.color
24
+ break
25
+ else
26
+ positions << pos.dup
27
+ break
28
+ end
29
+ end
30
+
31
+ positions << pos.dup
32
+ end
33
+
34
+ positions
35
+ end
36
+ end
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+ require_relative 'piece'
3
+
4
+ class SteppingPiece < Piece
5
+
6
+ def moves
7
+ moves = []
8
+ move_diffs.each do |diff|
9
+ new_pos = [@pos.first + diff.first, @pos.last + diff.last]
10
+ next unless @board.on_board?(new_pos)
11
+ if @board.occupied?(new_pos)
12
+ next if @board.piece_at(new_pos).color == self.color
13
+ end
14
+ moves << new_pos
15
+ end
16
+
17
+ moves
18
+ end
19
+ end
data/lib/pieces.rb ADDED
@@ -0,0 +1,6 @@
1
+ require_relative 'pieces/king.rb'
2
+ require_relative 'pieces/knight.rb'
3
+ require_relative 'pieces/pawn.rb'
4
+ require_relative 'pieces/queen.rb'
5
+ require_relative 'pieces/rook.rb'
6
+ require_relative 'pieces/bishop.rb'
@@ -0,0 +1,63 @@
1
+ class ComputerPlayer
2
+ attr_reader :color
3
+ attr_writer :board
4
+
5
+ def initialize(color)
6
+ @color = color
7
+ end
8
+
9
+ def make_move
10
+ valid_moves_hash = {}
11
+ @board.pieces(@color).each do |piece|
12
+ valid_moves_hash[piece.pos] = piece.valid_moves unless piece.valid_moves.empty?
13
+ end
14
+
15
+ rand_key = valid_moves_hash.keys.sample
16
+ random_move = [rand_key, valid_moves_hash[rand_key].sample]
17
+
18
+ good_moves = []
19
+ neutral_moves = []
20
+ death_moves = []
21
+
22
+ valid_moves_hash.each_pair do |start_pos, potential_positions|
23
+ potential_positions.each do |potential_pos|
24
+ if death_move?([start_pos, potential_pos])
25
+ death_moves << [start_pos, potential_pos]
26
+ elsif @board.piece_at(potential_pos)
27
+ good_moves << [start_pos, potential_pos]
28
+ else
29
+ neutral_moves << [start_pos, potential_pos]
30
+ end
31
+ end
32
+ end
33
+ sleep(0.001)
34
+
35
+ if !good_moves.empty?
36
+ chosen_move = best_move(good_moves)
37
+ elsif !neutral_moves.empty?
38
+ chosen_move = neutral_moves.sample
39
+ else
40
+ chosen_move = death_moves.sample
41
+ end
42
+ chosen_move
43
+ end
44
+
45
+ #finds highest value target from good_moves
46
+ #GOOD MOVES MUST BE AN ARRAY OF CAPTURE MOVES
47
+ def best_move(good_moves)
48
+ best_move = good_moves.sample
49
+ good_moves.each do |move|
50
+ if @board.piece_at(move.last).value >
51
+ @board.piece_at(best_move.last).value
52
+ best_move = move
53
+ end
54
+ end
55
+ best_move
56
+ end
57
+
58
+ def death_move?(move)
59
+ duped_board = @board.deep_dup
60
+ duped_board.move!(move.first, move.last)
61
+ duped_board.piece_at(move.last).in_range_of_enemy?
62
+ end
63
+ end
@@ -0,0 +1,27 @@
1
+ class HumanPlayer
2
+ attr_reader :color
3
+ attr_writer :board
4
+
5
+ def initialize(color)
6
+ @color = color
7
+ end
8
+
9
+ def make_move
10
+ # puts "Enter your move"
11
+ # i1, i2 = gets.chomp.split
12
+ # raise BadInputError if i2.nil?
13
+
14
+ i1 = @board.move_cursor
15
+
16
+ i2 = @board.move_cursor
17
+
18
+ [i1, i2]
19
+ end
20
+
21
+ # def input_to_pos(input)
22
+ # letter, number = input.split("")
23
+ # coord2 = letter.ord - 'a'.ord
24
+ # coord1 = number.to_i - 1
25
+ # [coord1, coord2]
26
+ # end
27
+ end
@@ -0,0 +1,3 @@
1
+ class RubyChess
2
+ VERSION = "0.1.0"
3
+ end
data/lib/ruby_chess.rb ADDED
@@ -0,0 +1,49 @@
1
+ # coding: utf-8
2
+ require_relative 'game'
3
+ require_relative 'players/human_player.rb'
4
+ require_relative 'players/computer_player.rb'
5
+
6
+ class RubyChess
7
+
8
+ def run
9
+ clear_screen
10
+ choose_players
11
+ game = Game.new(@white_player, @black_player)
12
+ game.play
13
+ run if reset == 'y' || reset =='Y' || reset == 'yes' || reset == 'Yes'
14
+ end
15
+
16
+ def choose_players
17
+ puts "Welcome to RubyChess by Joe Daly"
18
+ puts
19
+ puts "Who will play white? (Human or Computer)"
20
+ white_choice = gets.chomp
21
+ puts "Who will play black? (Human or Computer)"
22
+ black_choice = gets.chomp
23
+
24
+ set_players(white_choice, black_choice)
25
+ end
26
+
27
+ def clear_screen
28
+ system('clear')
29
+ end
30
+
31
+ def reset
32
+ puts "Would you like to play again? (y/n)"
33
+ gets.chomp
34
+ end
35
+
36
+ def set_players(white_choice, black_choice)
37
+ if white_choice == 'Human' || white_choice == 'human'
38
+ @white_player = HumanPlayer.new(:white)
39
+ else
40
+ @white_player = ComputerPlayer.new(:white)
41
+ end
42
+ if black_choice == 'Human' || black_choice == 'human'
43
+ @black_player = HumanPlayer.new(:black)
44
+ else
45
+ @black_player = ComputerPlayer.new(:black)
46
+ end
47
+ end
48
+
49
+ end
@@ -0,0 +1,20 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'ruby_chess/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "ruby_chess"
8
+ spec.version = RubyChess::VERSION
9
+ spec.authors = ["Joseph Daly"]
10
+ spec.email = ["josefdaly@gmail.com"]
11
+ spec.summary = "Joe's Chess game for ruby"
12
+ spec.description = "Joe's Chess game for ruby"
13
+ spec.homepage = "https://github.com/josefdaly/RubyChess"
14
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
+ spec.executables = ["ruby_chess"]
16
+ spec.require_paths = ["lib"]
17
+
18
+ spec.add_development_dependency "bundler", "~> 1.9"
19
+ spec.add_development_dependency "rake", "~> 10.0"
20
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ruby_chess
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Joseph Daly
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-06-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.9'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.9'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Joe's Chess game for ruby
42
+ email:
43
+ - josefdaly@gmail.com
44
+ executables:
45
+ - ruby_chess
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - ".gitignore"
50
+ - ".travis.yml"
51
+ - Gemfile
52
+ - README.md
53
+ - Rakefile
54
+ - bin/ruby_chess
55
+ - lib/board.rb
56
+ - lib/errors.rb
57
+ - lib/game.rb
58
+ - lib/pieces.rb
59
+ - lib/pieces/bishop.rb
60
+ - lib/pieces/king.rb
61
+ - lib/pieces/knight.rb
62
+ - lib/pieces/pawn.rb
63
+ - lib/pieces/piece.rb
64
+ - lib/pieces/queen.rb
65
+ - lib/pieces/rook.rb
66
+ - lib/pieces/sliding_piece.rb
67
+ - lib/pieces/stepping_piece.rb
68
+ - lib/players/computer_player.rb
69
+ - lib/players/human_player.rb
70
+ - lib/ruby_chess.rb
71
+ - lib/ruby_chess/version.rb
72
+ - ruby_chess.gemspec
73
+ homepage: https://github.com/josefdaly/RubyChess
74
+ licenses: []
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.4.6
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Joe's Chess game for ruby
96
+ test_files: []