boardgame 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.
@@ -0,0 +1,5 @@
1
+ module BoardGame
2
+ end
3
+ require_relative 'boardgame/piece'
4
+ require_relative 'boardgame/tile'
5
+ require_relative 'boardgame/map'
@@ -4,7 +4,7 @@
4
4
  #| 1..#. | with a piece
5
5
  #| Y | placed in (2, 1)
6
6
  #`---------'
7
- class Map
7
+ class BoardGame::Map
8
8
 
9
9
  attr_reader :tiles, :height, :width
10
10
 
@@ -22,7 +22,7 @@ class Map
22
22
  # Sets a tile for a given X/Y coord.
23
23
  def []=(x, y, tile)
24
24
  validate_coords(x, y)
25
- raise 'needs to be a tile' unless tile.is_a? Tile
25
+ raise 'needs to be a tile' unless tile.is_a? BoardGame::Tile
26
26
  @tiles[x][y] = tile.move_to(x, y, self)
27
27
  end
28
28
 
@@ -49,7 +49,7 @@ private
49
49
  0.upto(max_x) do |wd|
50
50
  @tiles[wd] = {}
51
51
  0.upto(max_y) do |ht|
52
- self[wd, ht] = Tile.new({})
52
+ self[wd, ht] = BoardGame::Tile.new({})
53
53
  end
54
54
  end
55
55
  end
@@ -1,9 +1,9 @@
1
1
  # A piece on the board.
2
- class Piece
2
+ class BoardGame::Piece
3
3
  attr_accessor :tile
4
4
 
5
5
  def move_to(new_tile)
6
- raise 'that isnt a tile' unless new_tile.is_a? Tile
6
+ raise 'that isnt a tile' unless new_tile.is_a? BoardGame::Tile
7
7
  @tile.remove self if @tile
8
8
  @tile = new_tile
9
9
  @tile << self
@@ -1,5 +1,5 @@
1
1
  # A single tile on the map/board.
2
- class Tile
2
+ class BoardGame::Tile
3
3
 
4
4
  attr_accessor :content, :x, :y, :map
5
5
 
data/readme.md CHANGED
@@ -0,0 +1,36 @@
1
+ # Ruby 'boardgame' Gem
2
+
3
+ This library provides three classes for controlling logic in board games.
4
+
5
+ * Create, move and track game pieces across tiles on a board
6
+ * Automatic validation and boundary checking
7
+
8
+ # Installation
9
+
10
+ 1. `gem install boardgame`
11
+ 2. `require 'boardgame'`
12
+ 3. See usage instructions below
13
+
14
+ ##Creating boards, pieces and tiles
15
+
16
+ ```ruby
17
+ require 'boardgame'
18
+ # Create a 5x5 map.
19
+ map = BoardGame::Map.new(5, 5)
20
+
21
+ # Get tiles
22
+ home_tile = map[2, 2]
23
+ # => #<BoardGame::Tile 0x123>
24
+
25
+ # Make a game piece
26
+ knight = BoardGame::Piece.new
27
+
28
+ #Put a piece on the board
29
+ home_tile << knight
30
+
31
+ #Move the game piece
32
+ knight.move_to map[0, 0]
33
+
34
+ #remove from the board
35
+ home_tile.remove(knight)
36
+ ```
@@ -1,5 +1,5 @@
1
1
  require "simplecov"
2
2
  SimpleCov.start
3
+ require_relative '../lib/boardgame'
3
4
  require 'minitest/autorun'
4
- require_relative '../lib/game'
5
5
  require 'pry'
@@ -1,9 +1,9 @@
1
- require "test_helper"
1
+ require_relative "test_helper"
2
2
 
3
3
  class TestMap < Minitest::Test
4
4
 
5
5
  def map
6
- @map ||= Map.new(4, 4)
6
+ @map ||= BoardGame::Map.new(4, 4)
7
7
  end
8
8
 
9
9
  def test_new
@@ -25,34 +25,34 @@ class TestMap < Minitest::Test
25
25
  end
26
26
 
27
27
  def test_set_tile
28
- map[1, 2] = Tile.new()
29
- assert map[1,2].is_a?(Tile),
28
+ map[1, 2] = BoardGame::Tile.new()
29
+ assert map[1,2].is_a?(BoardGame::Tile),
30
30
  "Could not set tile on map."
31
31
  assert_raises RuntimeError do
32
32
  map[1, 2] = "Not a tile"
33
33
  end
34
34
  assert_raises RuntimeError do
35
- map[11, 4] = Tile.new
35
+ map[11, 4] = BoardGame::Tile.new
36
36
  end
37
37
  assert_raises RuntimeError do
38
- map[4, 11] = Tile.new
38
+ map[4, 11] = BoardGame::Tile.new
39
39
  end
40
40
  end
41
41
 
42
42
  def test_get_tile
43
- assert map[0, 1].is_a?(Tile),
43
+ assert map[0, 1].is_a?(BoardGame::Tile),
44
44
  "Lookups of tiles should return Tile."
45
- map[1, 2] = Tile.new
46
- assert map[1,2].is_a?(Tile),
45
+ map[1, 2] = BoardGame::Tile.new
46
+ assert map[1,2].is_a?(BoardGame::Tile),
47
47
  "Could not set tile on map."
48
48
  assert_equal map[0,0].map, map,
49
49
  "Tile did not know where that it was owned by map `map`."
50
50
  end
51
51
 
52
52
  def test_inspect
53
- map[0, 0] = Tile.new
54
- map[3, 3] = Tile.new
55
- map[2, 1] << Piece.new
53
+ map[0, 0] = BoardGame::Tile.new
54
+ map[3, 3] = BoardGame::Tile.new
55
+ map[2, 1] << BoardGame::Piece.new
56
56
  expectation = "\n"\
57
57
  "□□□□\n"\
58
58
  "□□+□\n"\
@@ -61,4 +61,10 @@ class TestMap < Minitest::Test
61
61
  assert_equal map.inspect, expectation,
62
62
  "Maps dont look right in console."
63
63
  end
64
+
65
+ def test_validate_height
66
+ assert_raises RuntimeError do
67
+ BoardGame::Map.new "1", 1
68
+ end
69
+ end
64
70
  end
@@ -0,0 +1,24 @@
1
+ require_relative "test_helper"
2
+
3
+ class TestPiece < Minitest::Test
4
+ def setup
5
+ @map = BoardGame::Map.new(5, 5)
6
+ @piece = BoardGame::Piece.new
7
+ end
8
+
9
+ def test_inspect
10
+ assert @piece.inspect == "+"
11
+ end
12
+
13
+ def test_move_to
14
+ assert_raises RuntimeError do
15
+ @piece.move_to [2, 2]
16
+ end
17
+ result = @piece.move_to @map[2,2]
18
+ assert @piece.tile == @map[2, 2]
19
+ assert @map[2,2].content.first == @piece
20
+ assert result == @piece
21
+ @piece.move_to @map[2,2]
22
+ assert @piece.tile == @map[2,2]
23
+ end
24
+ end
@@ -1,16 +1,57 @@
1
- require "test_helper"
1
+ require_relative "test_helper"
2
2
 
3
3
  class TestTile < Minitest::Test
4
4
  def test_new
5
- assert Tile.new.is_a?(Tile),
5
+ assert BoardGame::Tile.new.is_a?(BoardGame::Tile),
6
6
  "Expected new tile to be."
7
7
  end
8
8
 
9
9
  def test_insertion
10
- tile = Tile.new
11
- piece = Piece.new
10
+ tile = BoardGame::Tile.new
11
+ piece = BoardGame::Piece.new
12
12
  tile << piece
13
13
  assert tile.content.first == piece,
14
14
  "Did not put piece on tile."
15
15
  end
16
+
17
+ def test_removal
18
+ tile = BoardGame::Tile.new
19
+ piece = BoardGame::Piece.new
20
+ tile << piece
21
+ assert tile.content.first == piece,
22
+ "Did not put piece on tile."
23
+ tile.remove(piece)
24
+ assert tile.content.length == 0,
25
+ "Unable to remove pieces from tiles."
26
+ end
27
+
28
+ def test_inspect
29
+ tile = BoardGame::Tile.new
30
+ assert tile.inspect == "□",
31
+ "Expected empty tile to show □"
32
+ piece = BoardGame::Piece.new
33
+ tile << piece
34
+ assert tile.inspect == piece.inspect,
35
+ "Expected occupied tiles to show top piece when inspected."
36
+ end
37
+
38
+ def test_move_to
39
+ map = BoardGame::Map.new(2, 2)
40
+ tile = map[0, 0]
41
+ piece = BoardGame::Piece.new
42
+ tile << piece
43
+ assert piece.tile == tile
44
+ assert tile.x == 0
45
+ assert tile.y == 0
46
+ assert tile.map == map
47
+ new_map = BoardGame::Map.new(2, 2)
48
+ tile.move_to(1, 1, new_map)
49
+ assert piece.tile == tile
50
+ assert tile.x == 1
51
+ assert tile.y == 1
52
+ assert tile.map == new_map
53
+ assert_raises RuntimeError do
54
+ tile.move_to(2, 2)
55
+ end
56
+ end
16
57
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: boardgame
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
  - Rick Carlino
@@ -17,7 +17,9 @@ extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
19
  - .DS_Store
20
+ - .gitignore
20
21
  - Rakefile
22
+ - boardgame.gemspec
21
23
  - coverage/.last_run.json
22
24
  - coverage/.resultset.json
23
25
  - coverage/assets/0.8.0/application.css
@@ -45,13 +47,14 @@ files:
45
47
  - coverage/assets/0.8.0/smoothness/images/ui-icons_888888_256x240.png
46
48
  - coverage/assets/0.8.0/smoothness/images/ui-icons_cd0a0a_256x240.png
47
49
  - coverage/index.html
48
- - lib/game.rb
49
- - lib/map.rb
50
- - lib/piece.rb
51
- - lib/tile.rb
50
+ - lib/boardgame.rb
51
+ - lib/boardgame/map.rb
52
+ - lib/boardgame/piece.rb
53
+ - lib/boardgame/tile.rb
52
54
  - readme.md
53
55
  - test/test_helper.rb
54
56
  - test/test_map.rb
57
+ - test/test_piece.rb
55
58
  - test/test_tile.rb
56
59
  homepage: http://github.com/rickcarlino/shiny-octo-nemesis
57
60
  licenses:
@@ -76,8 +79,9 @@ rubyforge_project:
76
79
  rubygems_version: 2.2.2
77
80
  signing_key:
78
81
  specification_version: 4
79
- summary: Generate a Rails app using debatable best practices.
82
+ summary: Control logic for board and tile based games using Ruby.
80
83
  test_files:
81
84
  - test/test_helper.rb
82
85
  - test/test_map.rb
86
+ - test/test_piece.rb
83
87
  - test/test_tile.rb
@@ -1,3 +0,0 @@
1
- require_relative 'piece'
2
- require_relative 'tile'
3
- require_relative 'map'