the-swarm 1.0.3
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 +7 -0
- data/.gitignore +3 -0
- data/.yardopts +8 -0
- data/Gemfile +24 -0
- data/LICENSE.txt +22 -0
- data/README.md +35 -0
- data/Rakefile +26 -0
- data/bin/swarm +11 -0
- data/docs/Swarm.html +296 -0
- data/docs/Swarm/Catalog.html +819 -0
- data/docs/Swarm/Console.html +1050 -0
- data/docs/Swarm/Console/Color.html +160 -0
- data/docs/Swarm/Console/NormalKey.html +410 -0
- data/docs/Swarm/Console/PopUp.html +236 -0
- data/docs/Swarm/Console/VIKey.html +410 -0
- data/docs/Swarm/Five.html +421 -0
- data/docs/Swarm/Four.html +389 -0
- data/docs/Swarm/Game.html +1197 -0
- data/docs/Swarm/Intro.html +419 -0
- data/docs/Swarm/Level.html +700 -0
- data/docs/Swarm/Map.html +2336 -0
- data/docs/Swarm/One.html +353 -0
- data/docs/Swarm/Three.html +383 -0
- data/docs/Swarm/Tile.html +3823 -0
- data/docs/Swarm/Two.html +355 -0
- data/docs/_index.html +313 -0
- data/docs/class_list.html +51 -0
- data/docs/css/common.css +1 -0
- data/docs/css/full_list.css +58 -0
- data/docs/css/style.css +492 -0
- data/docs/file.LICENSE.html +70 -0
- data/docs/file.README.html +101 -0
- data/docs/file_list.html +61 -0
- data/docs/frames.html +17 -0
- data/docs/index.html +101 -0
- data/docs/js/app.js +248 -0
- data/docs/js/full_list.js +216 -0
- data/docs/js/jquery.js +4 -0
- data/docs/method_list.html +1195 -0
- data/docs/top-level-namespace.html +110 -0
- data/lib/swarm.rb +60 -0
- data/lib/swarm/catalog.rb +71 -0
- data/lib/swarm/console.rb +165 -0
- data/lib/swarm/game.rb +173 -0
- data/lib/swarm/level.rb +58 -0
- data/lib/swarm/levels/five.rb +71 -0
- data/lib/swarm/levels/four.rb +55 -0
- data/lib/swarm/levels/intro.rb +36 -0
- data/lib/swarm/levels/one.rb +35 -0
- data/lib/swarm/levels/three.rb +51 -0
- data/lib/swarm/levels/two.rb +38 -0
- data/lib/swarm/map.rb +254 -0
- data/lib/swarm/tile.rb +149 -0
- data/lib/swarm/version.rb +5 -0
- data/swarm.gemspec +24 -0
- metadata +112 -0
data/lib/swarm/tile.rb
ADDED
@@ -0,0 +1,149 @@
|
|
1
|
+
module Swarm
|
2
|
+
class Tile
|
3
|
+
|
4
|
+
class << self
|
5
|
+
|
6
|
+
# Create methods for setting and testing the +type+ value, change status
|
7
|
+
# and console color of every +Tile+.
|
8
|
+
#
|
9
|
+
# @macro [attach] swarm.tile.attr_type
|
10
|
+
# @method $1
|
11
|
+
# set the +type+ to :$1, the +icon+ to +$2+, the +color+ to $3, the +age+
|
12
|
+
# to $7 and flags the tile to be updated by the +Console+
|
13
|
+
# $0, $1, $2, $3, $4, $5, $6, $7
|
14
|
+
#
|
15
|
+
# @param age [Integer]
|
16
|
+
# @return [true]
|
17
|
+
#
|
18
|
+
# @method $1!
|
19
|
+
# set the +type+ to :$1, the +icon+ to '$2', the +color+ to $3, the +age+
|
20
|
+
# to 0, and flags the tile to be updated by the +Console+
|
21
|
+
#
|
22
|
+
# @param age [Integer]
|
23
|
+
# @return [true]
|
24
|
+
#
|
25
|
+
# @method $1?
|
26
|
+
# test the value of +type+
|
27
|
+
# @return [Boolean] +true+ if +type+ is $1, +false+ if it is not
|
28
|
+
def attr_type(type, icon: String.new, color: 0)
|
29
|
+
define_method(type) do |age|
|
30
|
+
change do
|
31
|
+
@type = type
|
32
|
+
@icon = icon
|
33
|
+
@color = color
|
34
|
+
@age = age
|
35
|
+
end
|
36
|
+
|
37
|
+
self
|
38
|
+
end
|
39
|
+
|
40
|
+
define_method("#{type}!") { send type, 0 }
|
41
|
+
|
42
|
+
define_method("#{type}?") { @type == type }
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
include Console::Color
|
47
|
+
|
48
|
+
attr_type :empty, icon: ' '.freeze, color: BLACK
|
49
|
+
attr_type :dirt, icon: '██'.freeze, color: SILVER
|
50
|
+
attr_type :rock, icon: '██'.freeze, color: WHITE
|
51
|
+
attr_type :worker, icon: '├┤'.freeze, color: BLUE
|
52
|
+
attr_type :soldier, icon: '╟╢'.freeze, color: RED
|
53
|
+
attr_type :queen, icon: '╬╬'.freeze, color: PURPLE
|
54
|
+
attr_type :egg, icon: 'oo'.freeze, color: YELLOW
|
55
|
+
attr_type :player, icon: '◄▶'.freeze, color: GREEN
|
56
|
+
|
57
|
+
# @macro swarm.tile.position
|
58
|
+
# @return [Integer] the position of the +tile+ on the $1 axis.
|
59
|
+
|
60
|
+
# @macro swarm.tile.position
|
61
|
+
attr_reader :x
|
62
|
+
|
63
|
+
# @macro swarm.tile.position
|
64
|
+
attr_reader :y
|
65
|
+
|
66
|
+
# @return [Symbol]
|
67
|
+
attr_reader :type
|
68
|
+
|
69
|
+
# @return [String]
|
70
|
+
attr_reader :icon
|
71
|
+
|
72
|
+
# @return [Integer]
|
73
|
+
attr_reader :color
|
74
|
+
|
75
|
+
attr_reader :location
|
76
|
+
|
77
|
+
# @return [Integer]
|
78
|
+
attr_reader :age
|
79
|
+
|
80
|
+
# Initialize a +Tile+ with the +x+ and both +y+ positions (+Console+ and +Map+)
|
81
|
+
# on the +Console+. Since tiles are 2 characters wide, two sets coordinates
|
82
|
+
# are stored: the position in the console (+@location+) and the position
|
83
|
+
# on the map (+@x+ and +@y+). All tiles start off as +:empty+.
|
84
|
+
#
|
85
|
+
# @param map_x [Integer]
|
86
|
+
# @param map_y [Integer]
|
87
|
+
# @param console_x [Integer] default +x+
|
88
|
+
# @param console_y [Integer] default +y+
|
89
|
+
def initialize(map_x, map_y, location)
|
90
|
+
@location = location
|
91
|
+
@x = map_x
|
92
|
+
@y = map_y
|
93
|
+
@age = 0
|
94
|
+
end
|
95
|
+
|
96
|
+
def inspect
|
97
|
+
'#<%s:0x%014x @x=%p, @y=%p, @type=%p>' % [self.class, object_id << 1, @x, @y, @type]
|
98
|
+
end
|
99
|
+
|
100
|
+
# @return [Boolean]
|
101
|
+
def ===(other)
|
102
|
+
type == other.type
|
103
|
+
end
|
104
|
+
|
105
|
+
# @return [Integer]
|
106
|
+
def born!
|
107
|
+
@age = 0
|
108
|
+
end
|
109
|
+
|
110
|
+
# @return [Integer]
|
111
|
+
def age!
|
112
|
+
@age += 1
|
113
|
+
end
|
114
|
+
|
115
|
+
# @return [Boolean]
|
116
|
+
def enemy?
|
117
|
+
worker? || soldier? || queen?
|
118
|
+
end
|
119
|
+
|
120
|
+
# @return [Boolean]
|
121
|
+
def mover?
|
122
|
+
player? || queen?
|
123
|
+
end
|
124
|
+
|
125
|
+
# @return [Void]
|
126
|
+
def change
|
127
|
+
Catalog.delete type, self
|
128
|
+
|
129
|
+
yield
|
130
|
+
|
131
|
+
Catalog.store type, self
|
132
|
+
Catalog.store :changed, self
|
133
|
+
end
|
134
|
+
|
135
|
+
def changed?
|
136
|
+
Catalog.fetch :changed, self, false
|
137
|
+
end
|
138
|
+
|
139
|
+
def change!
|
140
|
+
Catalog.store :changed, self
|
141
|
+
end
|
142
|
+
|
143
|
+
def destroy!
|
144
|
+
Catalog.increment :destroyed, type
|
145
|
+
|
146
|
+
empty!
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
data/swarm.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.join(__dir__, 'lib/swarm/version')
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.name = 'the-swarm'
|
5
|
+
gem.version = Swarm::VERSION
|
6
|
+
|
7
|
+
gem.author = 'Gino Lucero'
|
8
|
+
gem.email = 'glucero@gmail.com'
|
9
|
+
|
10
|
+
gem.description = 'Squish or be squished!'
|
11
|
+
gem.summary = gem.description
|
12
|
+
|
13
|
+
gem.homepage = 'https://github.com/glucero/swarm'
|
14
|
+
gem.license = 'MIT'
|
15
|
+
|
16
|
+
gem.files = `git ls-files`.split(?\n)
|
17
|
+
gem.executables = ['swarm']
|
18
|
+
|
19
|
+
gem.add_dependency 'curses'
|
20
|
+
|
21
|
+
gem.post_install_message = "Usage: 'swarm' or 'SWARM=easy swarm'"
|
22
|
+
|
23
|
+
gem.required_ruby_version = '>= 2.0.0'
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: the-swarm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Gino Lucero
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-10-10 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: curses
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Squish or be squished!
|
28
|
+
email: glucero@gmail.com
|
29
|
+
executables:
|
30
|
+
- swarm
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".gitignore"
|
35
|
+
- ".yardopts"
|
36
|
+
- Gemfile
|
37
|
+
- LICENSE.txt
|
38
|
+
- README.md
|
39
|
+
- Rakefile
|
40
|
+
- bin/swarm
|
41
|
+
- docs/Swarm.html
|
42
|
+
- docs/Swarm/Catalog.html
|
43
|
+
- docs/Swarm/Console.html
|
44
|
+
- docs/Swarm/Console/Color.html
|
45
|
+
- docs/Swarm/Console/NormalKey.html
|
46
|
+
- docs/Swarm/Console/PopUp.html
|
47
|
+
- docs/Swarm/Console/VIKey.html
|
48
|
+
- docs/Swarm/Five.html
|
49
|
+
- docs/Swarm/Four.html
|
50
|
+
- docs/Swarm/Game.html
|
51
|
+
- docs/Swarm/Intro.html
|
52
|
+
- docs/Swarm/Level.html
|
53
|
+
- docs/Swarm/Map.html
|
54
|
+
- docs/Swarm/One.html
|
55
|
+
- docs/Swarm/Three.html
|
56
|
+
- docs/Swarm/Tile.html
|
57
|
+
- docs/Swarm/Two.html
|
58
|
+
- docs/_index.html
|
59
|
+
- docs/class_list.html
|
60
|
+
- docs/css/common.css
|
61
|
+
- docs/css/full_list.css
|
62
|
+
- docs/css/style.css
|
63
|
+
- docs/file.LICENSE.html
|
64
|
+
- docs/file.README.html
|
65
|
+
- docs/file_list.html
|
66
|
+
- docs/frames.html
|
67
|
+
- docs/index.html
|
68
|
+
- docs/js/app.js
|
69
|
+
- docs/js/full_list.js
|
70
|
+
- docs/js/jquery.js
|
71
|
+
- docs/method_list.html
|
72
|
+
- docs/top-level-namespace.html
|
73
|
+
- lib/swarm.rb
|
74
|
+
- lib/swarm/catalog.rb
|
75
|
+
- lib/swarm/console.rb
|
76
|
+
- lib/swarm/game.rb
|
77
|
+
- lib/swarm/level.rb
|
78
|
+
- lib/swarm/levels/five.rb
|
79
|
+
- lib/swarm/levels/four.rb
|
80
|
+
- lib/swarm/levels/intro.rb
|
81
|
+
- lib/swarm/levels/one.rb
|
82
|
+
- lib/swarm/levels/three.rb
|
83
|
+
- lib/swarm/levels/two.rb
|
84
|
+
- lib/swarm/map.rb
|
85
|
+
- lib/swarm/tile.rb
|
86
|
+
- lib/swarm/version.rb
|
87
|
+
- swarm.gemspec
|
88
|
+
homepage: https://github.com/glucero/swarm
|
89
|
+
licenses:
|
90
|
+
- MIT
|
91
|
+
metadata: {}
|
92
|
+
post_install_message: 'Usage: ''swarm'' or ''SWARM=easy swarm'''
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 2.0.0
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
requirements: []
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.6.11
|
109
|
+
signing_key:
|
110
|
+
specification_version: 4
|
111
|
+
summary: Squish or be squished!
|
112
|
+
test_files: []
|