rtanque 0.1.2 → 0.1.4
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 +5 -5
- data/.ruby-version +1 -1
- data/.travis.yml +5 -0
- data/Gemfile.ci +2 -3
- data/README.md +6 -2
- data/bin/rtanque +1 -1
- data/lib/rtanque/gui/bot/health_color_calculator.rb +15 -12
- data/lib/rtanque/gui/bot.rb +4 -8
- data/lib/rtanque/version.rb +1 -1
- data/resources/images/bar.png +0 -0
- data/rtanque.gemspec +6 -7
- data/spec/rtanque/bot_spec.rb +2 -2
- data/spec/rtanque/heading_spec.rb +8 -8
- data/spec/rtanque/match_spec.rb +4 -4
- data/spec/rtanque/normalized_attr_spec.rb +3 -5
- data/spec/rtanque/point_spec.rb +11 -11
- data/spec/rtanque/radar_spec.rb +7 -7
- data/spec/rtanque/shell_spec.rb +2 -2
- data/spec/spec_helper.rb +0 -1
- metadata +35 -66
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f9c2fceb359226e5765e885345e46744173258946f92116640db15d1ca6bb863
|
4
|
+
data.tar.gz: b59da92bcd466e6d5e87ffeb18e70e67bff99b430c1384070e8d646be12590f2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a5e78583c53a6db4606974550e34f7947bd48bbc3e42c0679954e1089fc55c8206e1aa4a129cc48317196d8f272f08a077b01269db19d1d8212616b25d4284e6
|
7
|
+
data.tar.gz: 3299bea6a7f9f788ed94ea05968e7e76728d069dc7dd7b3001caf25779433de7148ac223e2a537805a3662ca3c8297a0eb52bffce20e5193f69ed4f5ebd3e736
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
3.4.5
|
data/.travis.yml
CHANGED
data/Gemfile.ci
CHANGED
data/README.md
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
**What is this?**
|
4
4
|
RTanque is a game for ( *Ruby* ) programmers. Players program the brain of a tank and then send their tank+brain into battle with other tanks. All tanks are otherwise equal.
|
5
5
|
|
6
|
-
[Getting started guide](
|
6
|
+
[Getting started guide](https://awilliams.github.io/posts/rtanque-getting-started/)
|
7
7
|
|
8
8
|
Rules of the game are simple: Last bot standing wins. Gameplay is also pretty simple. Each tank has a **base**, **turret** and **radar**, each of which rotate independently. The base moves the tank, the turret has a gun mounted to it which can fire at other tanks, and the radar detects other tanks in its field of vision.
|
9
9
|
|
@@ -33,7 +33,7 @@ RTanque is based on the Java project [Robocode](http://robocode.sourceforge.net/
|
|
33
33
|
## Requirements
|
34
34
|
|
35
35
|
* The [Gosu](https://github.com/jlnr/gosu) library used for rendering has some dependencies. Use the [Gosu getting started](https://github.com/jlnr/gosu/wiki/Getting-Started-on-Linux) to resolve any for your system.
|
36
|
-
* Ruby 2.
|
36
|
+
* Ruby 2.2 or later (also tested on earlier versions)
|
37
37
|
|
38
38
|
## Quick Start
|
39
39
|
|
@@ -91,6 +91,10 @@ At some point you'll want to compete against other bots, or maybe you'll even or
|
|
91
91
|
Ask your friends to upload their bot(s) in a [gist](https://gist.github.com/), which you can then download with the following command:
|
92
92
|
|
93
93
|
bundle exec rtanque get_gist <gist_id> ...
|
94
|
+
|
95
|
+
For example, to download [Marksman](https://gist.github.com/SteveRidout/5909793)
|
96
|
+
|
97
|
+
bundle exec rtanque get_gist 5909793
|
94
98
|
|
95
99
|
If you'd like to publicly share your bot, post its gist id on the wiki https://github.com/awilliams/RTanque/wiki/bot-gists
|
96
100
|
|
data/bin/rtanque
CHANGED
@@ -103,7 +103,7 @@ LONGDESC
|
|
103
103
|
puts set_color("Error! Gist #{gist_id} not found. Please ensure the gist id is correct.", :red)
|
104
104
|
else
|
105
105
|
gist.files.attrs.each do |name, gist_file|
|
106
|
-
gist_path = "#{BOT_DIR}/#{gist.
|
106
|
+
gist_path = "#{BOT_DIR}/#{gist.owner.login}.#{gist_id}/#{name}"
|
107
107
|
create_file(gist_path, gist_file.content, options)
|
108
108
|
end
|
109
109
|
end
|
@@ -3,10 +3,11 @@ module RTanque
|
|
3
3
|
class Bot
|
4
4
|
class HealthColorCalculator
|
5
5
|
|
6
|
-
#
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
# Different health-colors as RGB values
|
7
|
+
# Blue, Green,Red, Alpha
|
8
|
+
FULL_HEALTH_COLOR = [0x4A, 0xBE, 0x4A, 0xFF].freeze
|
9
|
+
MEDIUM_HEALTH_COLOR = [0x00, 0xBE, 0xFF, 0xFF].freeze
|
10
|
+
LOW_HEALTH_COLOR = [0x00, 0x00, 0xDC, 0xFF].freeze
|
10
11
|
|
11
12
|
attr_reader :health
|
12
13
|
|
@@ -14,22 +15,24 @@ module RTanque
|
|
14
15
|
@health = health
|
15
16
|
end
|
16
17
|
|
17
|
-
def
|
18
|
+
def color
|
18
19
|
if health > 50
|
19
20
|
percentage = ((100 - health) / 50)
|
20
|
-
color_between
|
21
|
+
color_between(FULL_HEALTH_COLOR, MEDIUM_HEALTH_COLOR, percentage)
|
21
22
|
else
|
22
23
|
percentage = ((50 - health) / 50)
|
23
|
-
color_between
|
24
|
+
color_between(MEDIUM_HEALTH_COLOR, LOW_HEALTH_COLOR, percentage)
|
24
25
|
end
|
25
26
|
end
|
26
27
|
|
28
|
+
private
|
29
|
+
|
27
30
|
def color_between(color_a, color_b, percentage)
|
28
|
-
[
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
31
|
+
4.times.map { |i| graduated(color_a[i], color_b[i], percentage) << (8 * i) }.sum
|
32
|
+
end
|
33
|
+
|
34
|
+
def graduated(min, max, percentage)
|
35
|
+
((max - min) * percentage + min).round
|
33
36
|
end
|
34
37
|
end
|
35
38
|
end
|
data/lib/rtanque/gui/bot.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'gosu'
|
2
|
-
require 'texplay'
|
3
2
|
|
4
3
|
require 'rtanque/gui/bot/health_color_calculator'
|
5
4
|
|
@@ -17,8 +16,8 @@ module RTanque
|
|
17
16
|
@body_image = Gosu::Image.new(@window, Gui.resource_path("images/body.png"))
|
18
17
|
@turret_image = Gosu::Image.new(@window, Gui.resource_path("images/turret.png"))
|
19
18
|
@radar_image = Gosu::Image.new(@window, Gui.resource_path("images/radar.png"))
|
20
|
-
@score_bar_image = TexPlay.create_blank_image(@window, HEALTH_BAR_WIDTH, HEALTH_BAR_HEIGHT)
|
21
19
|
@name_font = Gosu::Font.new(@window, Window::FONT_NAME, Window::SMALL_FONT_SIZE)
|
20
|
+
@health_bar_image = ::Gosu::Image.new(Gui.resource_path('images/bar.png'))
|
22
21
|
@x_factor = 1
|
23
22
|
@y_factor = 1
|
24
23
|
end
|
@@ -50,17 +49,14 @@ module RTanque
|
|
50
49
|
x,y = *position
|
51
50
|
x_health = health.round(0)
|
52
51
|
health_color = color_for_health
|
53
|
-
@
|
54
|
-
|
55
|
-
rect 0, 0, x_health, HEALTH_BAR_HEIGHT, :color => health_color, :fill => true
|
56
|
-
}
|
57
|
-
@score_bar_image.draw(x - (HEALTH_BAR_WIDTH/2) * @x_factor, y + (5 + RTanque::Bot::RADIUS) * @y_factor, ZOrder::BOT_HEALTH, @x_factor, @y_factor)
|
52
|
+
@health_bar_image.draw(x - ((HEALTH_BAR_WIDTH / 2) * @x_factor), y + ((5 + RTanque::Bot::RADIUS) * @y_factor),
|
53
|
+
ZOrder::BOT_HEALTH, x_health / 200.0, 0.5, health_color)
|
58
54
|
end
|
59
55
|
|
60
56
|
private
|
61
57
|
|
62
58
|
def color_for_health
|
63
|
-
HealthColorCalculator.new(health).
|
59
|
+
HealthColorCalculator.new(health).color
|
64
60
|
end
|
65
61
|
|
66
62
|
def health
|
data/lib/rtanque/version.rb
CHANGED
Binary file
|
data/rtanque.gemspec
CHANGED
@@ -16,19 +16,18 @@ Rules of the game are simple: Last bot standing wins. Gameplay is also pretty si
|
|
16
16
|
Have fun competing against friends' tanks or the sample ones included. Maybe you'll start a small league at your local Ruby meetup.}
|
17
17
|
gem.homepage = "https://github.com/awilliams/RTanque"
|
18
18
|
gem.license = 'MIT'
|
19
|
+
gem.required_ruby_version = '>= 3.4'
|
19
20
|
|
20
21
|
gem.files = `git ls-files`.split($/)
|
21
22
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
22
23
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
23
24
|
gem.require_paths = ["lib"]
|
24
25
|
|
25
|
-
gem.add_dependency 'gosu', '~>
|
26
|
-
gem.add_dependency 'configuration', '~> 1.3.
|
27
|
-
gem.add_dependency 'octokit', '~>
|
28
|
-
gem.add_dependency 'thor', '~>
|
29
|
-
gem.add_dependency 'texplay'
|
26
|
+
gem.add_dependency 'gosu', '~> 1.4.6'
|
27
|
+
gem.add_dependency 'configuration', '~> 1.3.4'
|
28
|
+
gem.add_dependency 'octokit', '~> 10.0.0'
|
29
|
+
gem.add_dependency 'thor', '~> 1.4.0'
|
30
30
|
|
31
31
|
gem.add_development_dependency 'pry'
|
32
|
-
gem.add_development_dependency 'rspec', '~>
|
33
|
-
gem.add_development_dependency 'rspec-mocks', '~> 2.13.0'
|
32
|
+
gem.add_development_dependency 'rspec', '~> 3.13.1'
|
34
33
|
end
|
data/spec/rtanque/bot_spec.rb
CHANGED
@@ -6,12 +6,12 @@ describe RTanque::Bot do
|
|
6
6
|
|
7
7
|
context '#dead?' do
|
8
8
|
it 'should not initially be dead' do
|
9
|
-
expect(bot.dead?).to
|
9
|
+
expect(bot.dead?).to be_falsey
|
10
10
|
end
|
11
11
|
|
12
12
|
it 'should be true if health is below min' do
|
13
13
|
bot.health = RTanque::Configuration.bot.health.min - 1
|
14
|
-
expect(bot.dead?).to
|
14
|
+
expect(bot.dead?).to be_truthy
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -110,7 +110,7 @@ describe RTanque::Heading do
|
|
110
110
|
end
|
111
111
|
|
112
112
|
it 'creates frozen object' do
|
113
|
-
expect(described_class.new(0).frozen?).to
|
113
|
+
expect(described_class.new(0).frozen?).to be_truthy
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -135,43 +135,43 @@ describe RTanque::Heading do
|
|
135
135
|
describe '#==' do
|
136
136
|
it 'works like Numeric, ignoring type' do
|
137
137
|
a = described_class.new(1.0)
|
138
|
-
expect(a == 1).to
|
138
|
+
expect(a == 1).to be_truthy
|
139
139
|
end
|
140
140
|
|
141
141
|
it 'correctly compares two equal headings' do
|
142
142
|
a = described_class.new(1.0)
|
143
143
|
b = described_class.new(1.0)
|
144
|
-
expect(a == b).to
|
144
|
+
expect(a == b).to be_truthy
|
145
145
|
end
|
146
146
|
|
147
147
|
it 'correctly compares two different headings' do
|
148
148
|
a = described_class.new(0)
|
149
149
|
b = described_class.new(1.0)
|
150
|
-
expect(a == b).to
|
150
|
+
expect(a == b).to be_falsey
|
151
151
|
end
|
152
152
|
|
153
153
|
it 'compares to a numeric on LHS' do
|
154
154
|
a = described_class.new(Math::PI)
|
155
|
-
expect(Math::PI == a).to
|
155
|
+
expect(Math::PI == a).to be_truthy
|
156
156
|
end
|
157
157
|
end
|
158
158
|
|
159
159
|
describe '#eql?' do
|
160
160
|
it 'compares types like Numeric, comparing type' do
|
161
161
|
a = described_class.new(1.0)
|
162
|
-
expect(a.eql?(1)).to
|
162
|
+
expect(a.eql?(1)).to be_falsey
|
163
163
|
end
|
164
164
|
|
165
165
|
it 'correctly compares two equal headings' do
|
166
166
|
a = described_class.new(1.0)
|
167
167
|
b = described_class.new(1.0)
|
168
|
-
expect(a.eql?(b)).to
|
168
|
+
expect(a.eql?(b)).to be_truthy
|
169
169
|
end
|
170
170
|
|
171
171
|
it 'correctly compares two different headings' do
|
172
172
|
a = described_class.new(0)
|
173
173
|
b = described_class.new(1.0)
|
174
|
-
expect(a.eql?(b)).to
|
174
|
+
expect(a.eql?(b)).to be_falsey
|
175
175
|
end
|
176
176
|
end
|
177
177
|
|
data/spec/rtanque/match_spec.rb
CHANGED
@@ -12,19 +12,19 @@ describe RTanque::Match do
|
|
12
12
|
it 'should allow adding bots' do
|
13
13
|
bot = double('bot')
|
14
14
|
@instance.add_bots(bot)
|
15
|
-
expect(@instance.bots.include?(bot)).to
|
15
|
+
expect(@instance.bots.include?(bot)).to be_truthy
|
16
16
|
end
|
17
17
|
|
18
18
|
describe '#finished?' do
|
19
19
|
it 'should be true if one or less bots left' do
|
20
|
-
expect(@instance.finished?).to
|
20
|
+
expect(@instance.finished?).to be_truthy
|
21
21
|
end
|
22
22
|
|
23
23
|
it 'should be false if two or more bots left' do
|
24
24
|
bot1 = double('bot', :name => "bot1")
|
25
25
|
bot2 = double('bot', :name => "bot2")
|
26
26
|
@instance.add_bots(bot1, bot2)
|
27
|
-
expect(@instance.finished?).to
|
27
|
+
expect(@instance.finished?).to be_falsey
|
28
28
|
end
|
29
29
|
|
30
30
|
it 'should be true if two or more bots left w/ same name' do
|
@@ -32,7 +32,7 @@ describe RTanque::Match do
|
|
32
32
|
bot1 = double('bot', :name => "bot1")
|
33
33
|
bot2 = double('bot', :name => "bot1")
|
34
34
|
@instance.add_bots(bot1, bot2)
|
35
|
-
expect(@instance.finished?).to
|
35
|
+
expect(@instance.finished?).to be_truthy
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -8,7 +8,7 @@ describe RTanque::NormalizedAttr do
|
|
8
8
|
described_class::AttrContainer.new(1..5)
|
9
9
|
end
|
10
10
|
let(:attached_instance) do
|
11
|
-
|
11
|
+
double('some_object')
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'has -infinity as max_delta' do
|
@@ -33,13 +33,11 @@ describe RTanque::NormalizedAttr do
|
|
33
33
|
described_class::AttrContainer.new(0..5, lambda{ |attached| attached.max_delta })
|
34
34
|
end
|
35
35
|
let(:attached_instance) do
|
36
|
-
|
36
|
+
double('some_object', :max_delta => 0.1)
|
37
37
|
end
|
38
38
|
|
39
39
|
it 'should call block for max_delta' do
|
40
|
-
|
41
|
-
attached.should_receive(:max_delta).and_return(0.1)
|
42
|
-
expect(instance.max_delta(attached)).to eq 0.1
|
40
|
+
expect(instance.max_delta(attached_instance)).to eq 0.1
|
43
41
|
end
|
44
42
|
|
45
43
|
it 'does not allow a change greater than given delta' do
|
data/spec/rtanque/point_spec.rb
CHANGED
@@ -19,7 +19,7 @@ describe RTanque::Point do
|
|
19
19
|
context '#initialize' do
|
20
20
|
it 'should be frozen' do
|
21
21
|
a = described_class.new(10, 10, @arena)
|
22
|
-
expect(a.frozen?).to
|
22
|
+
expect(a.frozen?).to be_truthy
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'should not allow modification' do
|
@@ -83,15 +83,15 @@ describe RTanque::Point do
|
|
83
83
|
it 'is true when x & y are equal' do
|
84
84
|
a = described_class.new(1, 1, @arena)
|
85
85
|
b = described_class.new(1, 1, @arena)
|
86
|
-
expect(a == b).to
|
87
|
-
expect(b == a).to
|
86
|
+
expect(a == b).to be_truthy
|
87
|
+
expect(b == a).to be_truthy
|
88
88
|
end
|
89
89
|
|
90
90
|
it 'is not true when x & y are equal' do
|
91
91
|
a = described_class.new(2, 1, @arena)
|
92
92
|
b = described_class.new(1, 1, @arena)
|
93
|
-
expect(a == b).to
|
94
|
-
expect(b == a).to
|
93
|
+
expect(a == b).to be_falsey
|
94
|
+
expect(b == a).to be_falsey
|
95
95
|
end
|
96
96
|
end
|
97
97
|
|
@@ -165,32 +165,32 @@ describe RTanque::Point do
|
|
165
165
|
|
166
166
|
it 'correctly detects equal points' do
|
167
167
|
@b = @a.clone
|
168
|
-
expect(@a.within_radius?(@b, 1)).to
|
168
|
+
expect(@a.within_radius?(@b, 1)).to be_truthy
|
169
169
|
end
|
170
170
|
|
171
171
|
it 'correctly detects point 1 to left' do
|
172
172
|
@b = described_class.new(4, 5, @arena)
|
173
|
-
expect(@a.within_radius?(@b, 1)).to
|
173
|
+
expect(@a.within_radius?(@b, 1)).to be_truthy
|
174
174
|
end
|
175
175
|
|
176
176
|
it 'correctly detects point 1 to right' do
|
177
177
|
@b = described_class.new(6, 5, @arena)
|
178
|
-
expect(@a.within_radius?(@b, 1)).to
|
178
|
+
expect(@a.within_radius?(@b, 1)).to be_truthy
|
179
179
|
end
|
180
180
|
|
181
181
|
it 'correctly detects point 1 above' do
|
182
182
|
@b = described_class.new(5, 6, @arena)
|
183
|
-
expect(@a.within_radius?(@b, 1)).to
|
183
|
+
expect(@a.within_radius?(@b, 1)).to be_truthy
|
184
184
|
end
|
185
185
|
|
186
186
|
it 'correctly detects point 1 below' do
|
187
187
|
@b = described_class.new(5, 4, @arena)
|
188
|
-
expect(@a.within_radius?(@b, 1)).to
|
188
|
+
expect(@a.within_radius?(@b, 1)).to be_truthy
|
189
189
|
end
|
190
190
|
|
191
191
|
it 'correctly detects point 1 NE' do
|
192
192
|
@b = described_class.new(6, 6, @arena)
|
193
|
-
expect(@a.within_radius?(@b, 1)).to
|
193
|
+
expect(@a.within_radius?(@b, 1)).to be_falsey
|
194
194
|
end
|
195
195
|
end
|
196
196
|
end
|
data/spec/rtanque/radar_spec.rb
CHANGED
@@ -15,12 +15,12 @@ describe RTanque::Bot::Radar do
|
|
15
15
|
|
16
16
|
it 'should return an empty array' do
|
17
17
|
radar.scan([])
|
18
|
-
expect(radar.empty?).to
|
18
|
+
expect(radar.empty?).to be_truthy
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'should 1 Reflection' do
|
22
22
|
radar.scan([mockbot(10, 20)])
|
23
|
-
expect(radar).to
|
23
|
+
expect(radar.instance_variable_get(:@reflections).size).to eq 1
|
24
24
|
expect(radar.first).to be_an_instance_of described_class::Reflection
|
25
25
|
end
|
26
26
|
|
@@ -32,7 +32,7 @@ describe RTanque::Bot::Radar do
|
|
32
32
|
it 'should clear self' do
|
33
33
|
radar.scan([mockbot(10, 20, 'otherbot')])
|
34
34
|
radar.scan([])
|
35
|
-
expect(radar.empty?).to
|
35
|
+
expect(radar.empty?).to be_truthy
|
36
36
|
end
|
37
37
|
|
38
38
|
it 'reflections should be correct' do
|
@@ -57,7 +57,7 @@ describe RTanque::Bot::Radar do
|
|
57
57
|
y = 10 + Math.cos(RTanque::Bot::Radar::VISION_RANGE.last) * 10
|
58
58
|
bots = [mockbot(x, y, 'border')]
|
59
59
|
radar.scan(bots)
|
60
|
-
expect(radar.
|
60
|
+
expect(radar.instance_variable_get(:@reflections).size).to eq 1
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'should detect point on min vision range' do
|
@@ -65,7 +65,7 @@ describe RTanque::Bot::Radar do
|
|
65
65
|
y = 10 + Math.cos(RTanque::Bot::Radar::VISION_RANGE.first) * 10
|
66
66
|
bots = [mockbot(x, y, 'border')]
|
67
67
|
radar.scan(bots)
|
68
|
-
expect(radar.
|
68
|
+
expect(radar.instance_variable_get(:@reflections).size).to eq 1
|
69
69
|
end
|
70
70
|
|
71
71
|
it 'should not detect point outside max vision range' do
|
@@ -73,7 +73,7 @@ describe RTanque::Bot::Radar do
|
|
73
73
|
y = 10 + Math.cos(RTanque::Bot::Radar::VISION_RANGE.last) * 10
|
74
74
|
bots = [mockbot(x + 0.01, y, 'border')]
|
75
75
|
radar.scan(bots)
|
76
|
-
expect(radar.
|
76
|
+
expect(radar.instance_variable_get(:@reflections).size).to eq 0
|
77
77
|
end
|
78
78
|
|
79
79
|
it 'should not detect point outside max vision range' do
|
@@ -81,7 +81,7 @@ describe RTanque::Bot::Radar do
|
|
81
81
|
y = 10 + Math.cos(RTanque::Bot::Radar::VISION_RANGE.first) * 10
|
82
82
|
bots = [mockbot(x, y - 0.01, 'border')]
|
83
83
|
radar.scan(bots)
|
84
|
-
expect(radar.
|
84
|
+
expect(radar.instance_variable_get(:@reflections).size).to eq 0
|
85
85
|
end
|
86
86
|
end
|
87
87
|
end
|
data/spec/rtanque/shell_spec.rb
CHANGED
@@ -17,9 +17,9 @@ describe RTanque::Shell do
|
|
17
17
|
|
18
18
|
it 'shell should be dead after hit' do
|
19
19
|
bots = [mockbot(10, 10, 'deadbot')]
|
20
|
-
expect(shell.dead?).to
|
20
|
+
expect(shell.dead?).to be_falsey
|
21
21
|
shell.hits(bots)
|
22
|
-
expect(shell.dead?).to
|
22
|
+
expect(shell.dead?).to be_truthy
|
23
23
|
end
|
24
24
|
|
25
25
|
it 'should hit shell on bot radius' do
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,127 +1,98 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rtanque
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Adam Williams
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: gosu
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
|
-
- - ~>
|
16
|
+
- - "~>"
|
18
17
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
18
|
+
version: 1.4.6
|
20
19
|
type: :runtime
|
21
20
|
prerelease: false
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
23
22
|
requirements:
|
24
|
-
- - ~>
|
23
|
+
- - "~>"
|
25
24
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
25
|
+
version: 1.4.6
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
27
|
name: configuration
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
|
-
- - ~>
|
30
|
+
- - "~>"
|
32
31
|
- !ruby/object:Gem::Version
|
33
|
-
version: 1.3.
|
32
|
+
version: 1.3.4
|
34
33
|
type: :runtime
|
35
34
|
prerelease: false
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
37
36
|
requirements:
|
38
|
-
- - ~>
|
37
|
+
- - "~>"
|
39
38
|
- !ruby/object:Gem::Version
|
40
|
-
version: 1.3.
|
39
|
+
version: 1.3.4
|
41
40
|
- !ruby/object:Gem::Dependency
|
42
41
|
name: octokit
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
44
43
|
requirements:
|
45
|
-
- - ~>
|
44
|
+
- - "~>"
|
46
45
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
46
|
+
version: 10.0.0
|
48
47
|
type: :runtime
|
49
48
|
prerelease: false
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
51
50
|
requirements:
|
52
|
-
- - ~>
|
51
|
+
- - "~>"
|
53
52
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
53
|
+
version: 10.0.0
|
55
54
|
- !ruby/object:Gem::Dependency
|
56
55
|
name: thor
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
58
57
|
requirements:
|
59
|
-
- - ~>
|
58
|
+
- - "~>"
|
60
59
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
60
|
+
version: 1.4.0
|
62
61
|
type: :runtime
|
63
62
|
prerelease: false
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
65
64
|
requirements:
|
66
|
-
- - ~>
|
65
|
+
- - "~>"
|
67
66
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: texplay
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - '>='
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - '>='
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
67
|
+
version: 1.4.0
|
83
68
|
- !ruby/object:Gem::Dependency
|
84
69
|
name: pry
|
85
70
|
requirement: !ruby/object:Gem::Requirement
|
86
71
|
requirements:
|
87
|
-
- -
|
72
|
+
- - ">="
|
88
73
|
- !ruby/object:Gem::Version
|
89
74
|
version: '0'
|
90
75
|
type: :development
|
91
76
|
prerelease: false
|
92
77
|
version_requirements: !ruby/object:Gem::Requirement
|
93
78
|
requirements:
|
94
|
-
- -
|
79
|
+
- - ">="
|
95
80
|
- !ruby/object:Gem::Version
|
96
81
|
version: '0'
|
97
82
|
- !ruby/object:Gem::Dependency
|
98
83
|
name: rspec
|
99
84
|
requirement: !ruby/object:Gem::Requirement
|
100
85
|
requirements:
|
101
|
-
- - ~>
|
86
|
+
- - "~>"
|
102
87
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
88
|
+
version: 3.13.1
|
104
89
|
type: :development
|
105
90
|
prerelease: false
|
106
91
|
version_requirements: !ruby/object:Gem::Requirement
|
107
92
|
requirements:
|
108
|
-
- - ~>
|
93
|
+
- - "~>"
|
109
94
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rspec-mocks
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ~>
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: 2.13.0
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ~>
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: 2.13.0
|
95
|
+
version: 3.13.1
|
125
96
|
description: |-
|
126
97
|
RTanque is a game for programmers. Players program the brain of a tank and then send their tank+brain into battle with other tanks. All tanks are otherwise equal.
|
127
98
|
|
@@ -135,12 +106,12 @@ executables:
|
|
135
106
|
extensions: []
|
136
107
|
extra_rdoc_files: []
|
137
108
|
files:
|
138
|
-
- .gitignore
|
139
|
-
- .rspec
|
140
|
-
- .ruby-gemset
|
141
|
-
- .ruby-version
|
142
|
-
- .travis.yml
|
143
|
-
- .yardopts
|
109
|
+
- ".gitignore"
|
110
|
+
- ".rspec"
|
111
|
+
- ".ruby-gemset"
|
112
|
+
- ".ruby-version"
|
113
|
+
- ".travis.yml"
|
114
|
+
- ".yardopts"
|
144
115
|
- Gemfile
|
145
116
|
- Gemfile.ci
|
146
117
|
- LICENSE.txt
|
@@ -174,6 +145,7 @@ files:
|
|
174
145
|
- lib/rtanque/runner.rb
|
175
146
|
- lib/rtanque/shell.rb
|
176
147
|
- lib/rtanque/version.rb
|
148
|
+
- resources/images/bar.png
|
177
149
|
- resources/images/body.png
|
178
150
|
- resources/images/bullet.png
|
179
151
|
- resources/images/explosions/explosion2-1.png
|
@@ -270,24 +242,21 @@ homepage: https://github.com/awilliams/RTanque
|
|
270
242
|
licenses:
|
271
243
|
- MIT
|
272
244
|
metadata: {}
|
273
|
-
post_install_message:
|
274
245
|
rdoc_options: []
|
275
246
|
require_paths:
|
276
247
|
- lib
|
277
248
|
required_ruby_version: !ruby/object:Gem::Requirement
|
278
249
|
requirements:
|
279
|
-
- -
|
250
|
+
- - ">="
|
280
251
|
- !ruby/object:Gem::Version
|
281
|
-
version: '
|
252
|
+
version: '3.4'
|
282
253
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
283
254
|
requirements:
|
284
|
-
- -
|
255
|
+
- - ">="
|
285
256
|
- !ruby/object:Gem::Version
|
286
257
|
version: '0'
|
287
258
|
requirements: []
|
288
|
-
|
289
|
-
rubygems_version: 2.2.1
|
290
|
-
signing_key:
|
259
|
+
rubygems_version: 3.6.9
|
291
260
|
specification_version: 4
|
292
261
|
summary: RTanque is a game for programmers. Players program the brain of a tank and
|
293
262
|
then send their tank into battle against other tanks.
|