elite_universe 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aeae0817d0eb3a393d6eb176b80274f27a50d2fc
4
- data.tar.gz: 96764c38588ae0bf2107ac5b893b3547aad2ba20
3
+ metadata.gz: be8f3ad02eeb0a06f99168895873e68d3291b595
4
+ data.tar.gz: 25e5958265a027994d04aae793dc86e0ee278026
5
5
  SHA512:
6
- metadata.gz: 34eed350615fc8132c8c797d00377691b06d576eb9ac391f3682459aed6fe35697efb850b122f3c4acb6a1aa13d5056322a7360ab7128a6d59eabbe20af1106f
7
- data.tar.gz: 003911f126b120009fc4b2ed6e923a394a3f95f4f3decbf87b59697639bd66423938e05775c9d0ab1a51f36e8fccbfe66b76a7a6e337097fd2700d436ad22747
6
+ metadata.gz: 36695193d73d4e9b8243d8671d6d1b61f62f1b660256e01223c443dcec4cc6db3718ebb87cece912f10e9b44f13a91f627666b1d46bd0473ef26870d21cce944
7
+ data.tar.gz: 7a9b56bacdb0becdc89d01beed47520454ead7f992d96767e6ae74fd2ee8ce3611f2fc193e949fa8fcbe6eaf39e5dd3188694cfc35b4f5c209aec40245ff27c9
data/README.md CHANGED
@@ -3,6 +3,8 @@
3
3
  Generate planets and galaxies following the Acornsoft Elite planet generation
4
4
  algorithm.
5
5
 
6
+ [![Build Status](https://travis-ci.org/jrmhaig/elite_universe.svg?branch=master)](https://travis-ci.org/jrmhaig/elite_universe)
7
+
6
8
  ## Usage
7
9
 
8
10
  ```ruby
@@ -15,9 +17,16 @@ planet.name # = Lave
15
17
  ```ruby
16
18
  require 'elite_universe/galaxy'
17
19
 
18
- galaxy1 = EliteUniverse::Galaxy.new(23114, 584, 46931)
19
- galaxy1.planets # = array of 'EliteUniverse::Planet's
20
- galaxy1.planets[129].name # = Zaonce
20
+ galaxy = EliteUniverse::Galaxy.new(23114, 584, 46931)
21
+ galaxy.planets # = array of 'EliteUniverse::Planet's
22
+ galaxy.planets[129].name # = Zaonce
23
+ ```
24
+
25
+ `EliteUniverse::Galaxy` is an Enumerable class and so, for example, a full list
26
+ of planet names in the galaxy can be generated with:
27
+
28
+ ```ruby
29
+ galaxy.map(&:name)
21
30
  ```
22
31
 
23
32
  ## License
@@ -2,6 +2,8 @@ require 'elite_universe/planet'
2
2
 
3
3
  module EliteUniverse
4
4
  class Galaxy
5
+ include Enumerable
6
+
5
7
  def initialize a, b, c
6
8
  @w = [ a, b, c ]
7
9
  end
@@ -13,5 +15,9 @@ module EliteUniverse
13
15
  end
14
16
  p
15
17
  end
18
+
19
+ def each &block
20
+ planets.each { |planet| block.call(planet) }
21
+ end
16
22
  end
17
23
  end
@@ -1,3 +1,3 @@
1
1
  module EliteUniverse
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: elite_universe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Haig
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-20 00:00:00.000000000 Z
11
+ date: 2017-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3'
19
+ version: '3.7'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '3'
26
+ version: '3.7'
27
27
  description: Implementation of the Acornsoft Elite planet generator algorithm.
28
28
  email:
29
29
  - joe.haig@bbc.co.uk
@@ -35,7 +35,6 @@ files:
35
35
  - README.md
36
36
  - lib/elite_universe/galaxy.rb
37
37
  - lib/elite_universe/planet.rb
38
- - lib/elite_universe/planet_working.rb
39
38
  - lib/elite_universe/version.rb
40
39
  homepage: https://github.com/jrmhaig/elite_universe
41
40
  licenses:
@@ -57,7 +56,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
57
56
  version: '0'
58
57
  requirements: []
59
58
  rubyforge_project:
60
- rubygems_version: 2.5.0
59
+ rubygems_version: 2.6.11
61
60
  signing_key:
62
61
  specification_version: 4
63
62
  summary: Elite Universe
@@ -1,178 +0,0 @@
1
- module EliteUniverse
2
- class Planet
3
- CHARS = '..lexegezacebisousesarmaindirea.eratenberalavetiedorquanteisrion'.scan(/../)
4
- CHARS2 = 'abouseitiletstonlonothno'.scan(/../) + CHARS
5
-
6
- GOVS = [
7
- 'Anarchy',
8
- 'Feudal',
9
- 'Multi-Government',
10
- 'Dictatorship',
11
- 'Communist',
12
- 'Confederate',
13
- 'Democratic',
14
- 'Corporate',
15
- ]
16
-
17
- ECONS = [
18
- 'Rich Industrial',
19
- 'Average Industrial',
20
- 'Poor Industrial',
21
- 'Mainly Industrial',
22
- 'Mainly Agricultural',
23
- 'Rich Agricultural',
24
- 'Average Agricultural',
25
- 'Poor Agricultural',
26
- ]
27
- DESC_LIST = [
28
- ["fabled", "notable", "well known", "famous", "noted"],
29
- ["very", "mildly", "most", "reasonably", ""],
30
- ["ancient", "\x95", "great", "vast", "pink"],
31
- ["\x9E \x9D plantations", "mountains", "\x9C", "\x94 forests", "oceans"],
32
- ["shyness", "silliness", "mating traditions", "loathing of \x86", "love for \x86"],
33
- ["food blenders", "tourists", "poetry", "discos", "\x8E"],
34
- ["talking tree", "crab", "bat", "lobst", "\xB2"],
35
- ["beset", "plagued", "ravaged", "cursed", "scourged"],
36
- ["\x96 civil war", "\x9B \x98 \x99s", "a \x9B disease", "\x96 earthquakes", "\x96 solar activity"],
37
- ["its \x83 \x84", "the \xB1 \x98 \x99","its inhabitants' \x9A \x85", "\xA1", "its \x8D \x8E"],
38
- ["juice", "brandy", "water", "brew", "gargle blasters"],
39
- ["\xB2", "\xB1 \x99", "\xB1 \xB2", "\xB1 \x9B", "\x9B \xB2"],
40
- ["fabulous", "exotic", "hoopy", "unusual", "exciting"],
41
- ["cuisine", "night life", "casinos", "sit coms", " \xA1 "],
42
- ["\xB0", "The planet \xB0", "The world \xB0", "This planet", "This world"],
43
- ["n unremarkable", " boring", " dull", " tedious", " revolting"],
44
- ["planet", "world", "place", "little planet", "dump"],
45
- ["wasp", "moth", "grub", "ant", "\xB2"],
46
- ["poet", "arts graduate", "yak", "snail", "slug"],
47
- ["tropical", "dense", "rain", "impenetrable", "exuberant"],
48
- ["funny", "wierd", "unusual", "strange", "peculiar"],
49
- ["frequent", "occasional", "unpredictable", "dreadful", "deadly"],
50
- ["\x82 \x81 for \x8A", "\x82 \x81 for \x8A and \x8A", "\x88 by \x89", "\x82 \x81 for \x8A but \x88 by \x89","a\x90 \x91"],
51
- ["\x9B", "mountain", "edible", "tree", "spotted"],
52
- ["\x9F", "\xA0", "\x87oid", "\x93", "\x92"],
53
- ["ancient", "exceptional", "eccentric", "ingrained", "\x95"],
54
- ["killer", "deadly", "evil", "lethal", "vicious"],
55
- ["parking meters", "dust clouds", "ice bergs", "rock formations", "volcanoes"],
56
- ["plant", "tulip", "banana", "corn", "\xB2weed"],
57
- ["\xB2", "\xB1 \xB2", "\xB1 \x9B", "inhabitant", "\xB1 \xB2"],
58
- ["shrew", "beast", "bison", "snake", "wolf"],
59
- ["leopard", "cat", "monkey", "goat", "fish"],
60
- ["\x8C \x8B", "\xB1 \x9F \xA2","its \x8D \xA0 \xA2", "\xA3 \xA4", "\x8C \x8B"],
61
- ["meat", "cutlet", "steak", "burgers", "soup"],
62
- ["ice", "mud", "Zero-G", "vacuum", "\xB1 ultra"],
63
- ["hockey", "cricket", "karate", "polo", "tennis"]
64
- ]
65
-
66
- def initialize a, b, c
67
- @w = [ a, b, c ]
68
- end
69
-
70
- def name
71
- name = ''
72
- v = @w
73
- l = v[0] & 64
74
- 4.times do |i|
75
- if i < 3 or l > 0
76
- n = ( v[2] >> 8 ) & 31
77
- name += CHARS[n]
78
- end
79
- v = twist v
80
- end
81
- name.gsub('.', '').capitalize
82
- end
83
-
84
- def government
85
- GOVS[ gov_n ]
86
- end
87
-
88
- def economy
89
- ECONS[ econ_n ]
90
- end
91
-
92
- def location
93
- [ @w[1] >> 8, @w[0] >> 8 ]
94
- end
95
-
96
- def description
97
- @gs = [
98
- @w[1] & 0xFF,
99
- @w[1] >> 8,
100
- @w[2] & 0xFF,
101
- @w[2] >> 8
102
- ]
103
- goatsoup("\x8F is \x97.")
104
- end
105
-
106
- def next
107
- EliteUniverse::Planet.new *(twist twist twist twist @w)
108
- end
109
-
110
- private
111
- def twist arr
112
- [ arr[1], arr[2], arr.inject(:+) % 65536 ]
113
- end
114
-
115
- def gov_n
116
- ( @w[1] >> 3 ) & 7
117
- end
118
-
119
- def econ_n
120
- e = ( @w[0] >> 8 ) & 7
121
- gov_n <= 1 ? e | 2 : e
122
- end
123
-
124
- def goatsoup(source)
125
- result = ''
126
- source.force_encoding('ISO-8859-1').split(//).each do |c|
127
- o = c.ord
128
- if o < 128
129
- result += c
130
- else
131
- if o <= 164
132
- rnd = gen_rnd_number
133
- pos = 0
134
- pos += 1 if rnd >= 51
135
- pos += 1 if rnd >= 102
136
- pos += 1 if rnd >= 153
137
- pos += 1 if rnd >= 204
138
- result += goatsoup(DESC_LIST[o-129][pos])
139
- else
140
- case o
141
- when 176
142
- result += self.name
143
- when 177
144
- nm = self.name
145
- result += "#{(['i', 'e'].include?(nm[-1]) ? nm.chop : nm)}ian"
146
- when 178
147
- l = gen_rnd_number & 3
148
- new_name = ''
149
- (0..l).each do |i|
150
- x = gen_rnd_number & 0x3E
151
- new_name += CHARS2[x/2]
152
- end
153
- result += new_name.capitalize
154
- else
155
- result += "[BOOM - #{o}]"
156
- end
157
- end
158
- end
159
- end
160
-
161
- result
162
- end
163
-
164
- def gen_rnd_number
165
- x = (@gs[0] * 2 ) & 0xFF
166
- a = x + @gs[2]
167
- a += 1 if @gs[0] > 127
168
- @gs[0] = a & 0xFF
169
- @gs[2] = x
170
- a = a / 256
171
- x = @gs[1]
172
- a = ( a + x + @gs[3]) & 0xFF
173
- @gs[1] = a
174
- @gs[3] = x
175
- a
176
- end
177
- end
178
- end