gembots 0.1.1 → 0.1.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 +4 -4
- data/lib/gembots/arena.rb +14 -3
- data/lib/gembots/bot.rb +30 -2
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad9de32649b753655ebb462ea3f56dc2f2227e83
|
4
|
+
data.tar.gz: 74426bf3ccbdf33f3357bf28c6c8c248f47b397e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c1e86f79ca9ab9ae37c6306c9f7f81e45b6eba6ab929ebfb92ca85ac7948120ab1e687e34709940a52e2f632c2a81638998c13bb625928af39eb2c20084b2643
|
7
|
+
data.tar.gz: 2fdf7b3c7e5a9fb8f380eab5257ca3fb68ab4d10d0338c7e00b6807f86d650ac7e2e6cddd13f3d01782a166ff054f9a4f89043b91117af7425d95f7440e633dc
|
data/lib/gembots/arena.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'gembots'
|
2
2
|
require 'gembots/projectile'
|
3
3
|
|
4
|
+
# Class used for initializing the arena and opening the window.
|
4
5
|
class Gembots::Arena < Gosu::Window
|
6
|
+
# Array containing an instance of each bot in the arena
|
5
7
|
attr_reader :bots
|
6
|
-
|
8
|
+
|
7
9
|
def initialize *bots
|
8
10
|
super 640, 480, false
|
9
11
|
self.caption = "Gembots battle"
|
@@ -17,15 +19,23 @@ class Gembots::Arena < Gosu::Window
|
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
22
|
+
# Method called via Gosu.
|
23
|
+
# It simply calls the draw method for each projectile and bot.
|
20
24
|
def draw
|
21
25
|
@bots.each &:draw
|
22
26
|
@projs.each &:draw
|
23
27
|
end
|
24
28
|
|
29
|
+
# Method called via Gosu.
|
30
|
+
# It calls the update method for each projectile and bot.
|
31
|
+
# It also checks to see if a projectile has hit a bot, and deletes the bot and projectile if it has.
|
25
32
|
def update
|
26
33
|
@bots.each &:update
|
34
|
+
@projs.each &:update
|
35
|
+
|
27
36
|
@bots.each do |bot|
|
28
37
|
bot.on_idle if bot.actions.empty?
|
38
|
+
|
29
39
|
@projs.each do |proj|
|
30
40
|
if (Gosu::distance bot.x, bot.y, proj.x, proj.y) < 10
|
31
41
|
@bots.delete bot
|
@@ -33,14 +43,15 @@ class Gembots::Arena < Gosu::Window
|
|
33
43
|
end
|
34
44
|
end
|
35
45
|
end
|
36
|
-
|
37
|
-
@projs.each &:update
|
38
46
|
end
|
39
47
|
|
48
|
+
# Method called via Gosu.
|
49
|
+
# If the escape key is pressed, then the window closes.
|
40
50
|
def button_down id
|
41
51
|
close if id == Gosu::KbEscape
|
42
52
|
end
|
43
53
|
|
54
|
+
# Spawns a Projectile instance at bot's position and angle.
|
44
55
|
def spawn_proj bot
|
45
56
|
@projs << Gembots::Projectile.new(self, bot.x, bot.y, bot.angle)
|
46
57
|
end
|
data/lib/gembots/bot.rb
CHANGED
@@ -1,9 +1,20 @@
|
|
1
1
|
require 'gembots'
|
2
2
|
|
3
|
+
# Class used for creating a robot.
|
3
4
|
class Gembots::Robot
|
4
|
-
|
5
|
+
# X and Y positions
|
6
|
+
attr_reader :x, :y
|
5
7
|
|
8
|
+
# Current angle of robot.
|
9
|
+
attr_reader :angle
|
10
|
+
|
11
|
+
# Array containing arrays that represent actions that need to be completed.
|
12
|
+
# The format is like: `[[:move, 10], [:turn, 90]]`, meaning the robot will move 10 forward, then turn 90 degrees clockwise.
|
13
|
+
attr_reader :actions
|
14
|
+
|
15
|
+
# Creates a new instance of the robot.
|
6
16
|
def initialize window
|
17
|
+
@warped = false
|
7
18
|
@actions = []
|
8
19
|
@window = window
|
9
20
|
@images = Gosu::Image::load_tiles(window, "media/tank.png", 32, 32, false)
|
@@ -11,18 +22,32 @@ class Gembots::Robot
|
|
11
22
|
@x = @y = @angle = @cur_image = 0.0
|
12
23
|
end
|
13
24
|
|
25
|
+
# Method called via the arena.
|
26
|
+
# Warps the robot to the position specified.
|
14
27
|
def warp x, y
|
15
|
-
@x, @y = x, y
|
28
|
+
@x, @y = x, y unless @warped
|
29
|
+
@warped = true
|
16
30
|
end
|
17
31
|
|
32
|
+
# Appends a turn action to the actions array.
|
33
|
+
# The update method will turn the robot clockwise for the degree specified.
|
34
|
+
# If the degree is not specified, it defaults to 10.
|
35
|
+
# Use a negative value to rotate counter-clockwise.
|
18
36
|
def turn angle=10
|
19
37
|
@actions << [:turn, angle]
|
20
38
|
end
|
21
39
|
|
40
|
+
# Appends a move action to the actions array.
|
41
|
+
# The update method will move the robot forward the distance specified.
|
42
|
+
# If the distance is not specified, it defaults to 10.
|
43
|
+
# Use a negative value to move in reverse.
|
22
44
|
def move dist=10
|
23
45
|
@actions << [:move, dist]
|
24
46
|
end
|
25
47
|
|
48
|
+
# Method called via the arena.
|
49
|
+
# This attempts to preform the first action in the actions array.
|
50
|
+
# If it finishes the action, it will pop that actions from the actions array, allowing it to preform the next.
|
26
51
|
def update
|
27
52
|
return if @actions.empty?
|
28
53
|
case @actions[0][0]
|
@@ -56,11 +81,14 @@ class Gembots::Robot
|
|
56
81
|
end
|
57
82
|
end
|
58
83
|
|
84
|
+
# Method called via the arena.
|
59
85
|
def draw
|
60
86
|
@images[@cur_image].draw_rot @x, @y, 1, @angle - 90 % 360
|
61
87
|
@image.draw_rot @x, @y, 1, @angle - 90 % 360
|
62
88
|
end
|
63
89
|
|
90
|
+
# Appends a fire action to the actions array.
|
91
|
+
# The update method will call the arena's spawn_proj method.
|
64
92
|
def fire
|
65
93
|
@actions << [:fire]
|
66
94
|
end
|