starx 0.1.4 → 0.1.5
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/bin/starx +162 -174
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8938a1480f84d937813dc5f5dd87e7a9ea525bfe
|
4
|
+
data.tar.gz: 4146bf0e98d355b9609e1c5ee2a4df9b5a8ccd00
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fbc9e1d8716759caa0f7c8ee084be3834ff0a898b5067723a87c43190022d917a9111da7384074df57484613c9f3379070da57f32e2aa51625bcff09496c869a
|
7
|
+
data.tar.gz: da32342dccb4df913c1d46b705bb8db88c9c18c88f0c5eba520202173e54948f721c5f6e7ce7ffd2182b84b830305f98f8adab268e69f75f9baa0deafa023412
|
data/bin/starx
CHANGED
@@ -1,65 +1,75 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'io/wait'
|
3
3
|
|
4
|
-
WIDTH =
|
5
|
-
HEIGHT =
|
4
|
+
WIDTH = `tput cols`.to_i
|
5
|
+
HEIGHT = `tput lines`.to_i - 3
|
6
6
|
|
7
7
|
class Starx
|
8
8
|
def initialize
|
9
|
-
system 'tput civis'
|
10
9
|
@cells = {}
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
display
|
24
|
-
puts " "
|
25
|
-
|
10
|
+
(1..HEIGHT).each do |y|
|
11
|
+
(1..WIDTH).each do |x|
|
12
|
+
y = add_zero_if_needed(y)
|
13
|
+
x = add_zero_if_needed(x)
|
14
|
+
key = "#{y}.#{x}"
|
15
|
+
if key == "#{ HEIGHT / 2 }.05"
|
16
|
+
@cells[key] = :player
|
17
|
+
else
|
18
|
+
@cells[key] = :empty
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
26
22
|
@tickcount = 0
|
27
23
|
@score = 0
|
24
|
+
display
|
28
25
|
end
|
29
26
|
|
27
|
+
def add_zero_if_needed(value)
|
28
|
+
value = value.to_i
|
29
|
+
if value < 10
|
30
|
+
value = "0#{value}"
|
31
|
+
else
|
32
|
+
value.to_s
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
30
36
|
def display
|
31
|
-
|
32
|
-
|
37
|
+
sort_cells
|
38
|
+
print_score
|
39
|
+
@cells.each do |_, value|
|
40
|
+
case value
|
41
|
+
when :full
|
42
|
+
print '*'
|
43
|
+
when :empty
|
44
|
+
print " "
|
45
|
+
when :player
|
46
|
+
print "\e[31m>\e[0m"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
print_asterisks
|
50
|
+
end
|
33
51
|
|
52
|
+
def print_score
|
34
53
|
score_length = "SCORE: #{@score} ".length
|
35
54
|
print "\e[32mSCORE:\e[0m #{@score} "
|
36
55
|
(WIDTH - score_length).times {print '*'}
|
37
|
-
|
38
|
-
position_array = position.split('.')
|
39
|
-
y = position_array[0]
|
40
|
-
x = position_array[1]
|
41
|
-
case value
|
42
|
-
when :full
|
43
|
-
print '*'
|
44
|
-
when :empty
|
45
|
-
print " "
|
46
|
-
when :player
|
47
|
-
print "\e[31m>\e[0m"
|
48
|
-
end
|
49
|
-
end
|
50
|
-
WIDTH.times {print '*'}
|
56
|
+
end
|
51
57
|
|
52
|
-
|
58
|
+
def print_asterisks
|
59
|
+
WIDTH.times {print '*'}
|
60
|
+
end
|
61
|
+
|
62
|
+
def sort_cells
|
63
|
+
@cells = @cells.sort_by { |key,_| key.to_f }
|
64
|
+
end
|
53
65
|
|
54
66
|
def tick
|
55
67
|
@tickcount += 1
|
56
68
|
if @tickcount >= WIDTH && @tickcount % 20 == 0
|
57
69
|
@score += 1
|
58
70
|
end
|
59
|
-
|
60
71
|
new_cells
|
61
72
|
keys
|
62
|
-
|
63
73
|
if collision?
|
64
74
|
try_again_screen
|
65
75
|
else
|
@@ -73,108 +83,98 @@ class Starx
|
|
73
83
|
position_array = position.split('.')
|
74
84
|
y = position_array[0].to_i
|
75
85
|
x = position_array[1].to_i - 1
|
76
|
-
x =
|
77
|
-
y =
|
86
|
+
x = add_zero_if_needed(x)
|
87
|
+
y = add_zero_if_needed(y)
|
78
88
|
unless x.to_i == 0
|
79
89
|
new_key = "#{y}.#{x}"
|
80
90
|
new_cells[new_key] = value
|
81
91
|
end
|
82
92
|
end
|
83
93
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
x_cell_after_player = x_player_before_switch + 1
|
90
|
-
|
91
|
-
x_player_before_switch = "0#{x_player_before_switch}" if x_player_before_switch < 10
|
92
|
-
x_cell_after_player = "0#{x_cell_after_player}" if x_cell_after_player < 10
|
93
|
-
|
94
|
-
cell_after_player = "#{y_player_before_switch}.#{x_cell_after_player}"
|
95
|
-
player_before_switch = player_before_switch.join('.')
|
96
|
-
|
97
|
-
new_cells.delete(cell_after_player)
|
98
|
-
new_cells.delete(player_before_switch)
|
99
|
-
new_cells[cell_after_player] = :player
|
100
|
-
new_cells[player_before_switch] = :empty
|
94
|
+
@cells = new_cells
|
95
|
+
switch_player_with(0,1)
|
96
|
+
new_column
|
97
|
+
end
|
101
98
|
|
102
|
-
|
99
|
+
def new_column
|
103
100
|
if @tickcount % 20 == 0 || @tickcount == 1
|
101
|
+
new_full_column
|
102
|
+
else
|
104
103
|
x = WIDTH
|
105
|
-
|
106
|
-
|
107
|
-
for y in 1..random
|
108
|
-
y = "0#{y}" if y < 10
|
104
|
+
(1..HEIGHT).each do |y|
|
105
|
+
y = add_zero_if_needed(y)
|
109
106
|
key = "#{y}.#{x}"
|
110
|
-
|
107
|
+
@cells[key] = :empty
|
111
108
|
end
|
112
|
-
|
113
|
-
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
def new_full_column
|
113
|
+
x = WIDTH
|
114
|
+
space = HEIGHT / 5
|
115
|
+
random = rand(HEIGHT - space)
|
116
|
+
(1..random).each do |y|
|
117
|
+
y = add_zero_if_needed(y)
|
114
118
|
key = "#{y}.#{x}"
|
115
|
-
|
119
|
+
@cells[key] = :full
|
116
120
|
end
|
117
|
-
|
121
|
+
(random..(random + space)).each do |y|
|
122
|
+
y = add_zero_if_needed(y)
|
118
123
|
key = "#{y}.#{x}"
|
119
|
-
|
124
|
+
@cells[key] = :empty
|
120
125
|
end
|
121
|
-
|
122
|
-
|
123
|
-
for y in 1..HEIGHT
|
126
|
+
((random + space)..HEIGHT).each do |y|
|
127
|
+
y = add_zero_if_needed(y)
|
124
128
|
key = "#{y}.#{x}"
|
125
|
-
|
129
|
+
@cells[key] = :full
|
126
130
|
end
|
127
|
-
|
128
|
-
|
129
|
-
@cells = new_cells
|
130
|
-
end
|
131
|
+
end
|
131
132
|
|
132
133
|
def move_up!
|
133
|
-
|
134
|
+
switch_player_with(-1,0)
|
134
135
|
end
|
135
136
|
|
136
137
|
def move_down!
|
137
|
-
|
138
|
+
switch_player_with(1,0)
|
138
139
|
end
|
139
140
|
|
140
|
-
|
141
|
-
|
142
|
-
|
141
|
+
def move_forward!
|
142
|
+
switch_player_with(0,1)
|
143
|
+
end
|
143
144
|
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
145
|
+
def move_backward!
|
146
|
+
switch_player_with(0,-1)
|
147
|
+
end
|
148
|
+
|
149
|
+
def switch_player_with(y,x)
|
150
|
+
player_x = find_player[1].to_i
|
151
|
+
player_y = find_player[0].to_i
|
152
|
+
cell_x = player_x + x
|
153
|
+
cell_y = player_y + y
|
154
|
+
|
155
|
+
player_x = add_zero_if_needed(player_x)
|
156
|
+
player_y = add_zero_if_needed(player_y)
|
157
|
+
cell_x = add_zero_if_needed(cell_x)
|
158
|
+
cell_y = add_zero_if_needed(cell_y)
|
159
|
+
|
160
|
+
cell_key = "#{cell_y}.#{cell_x}"
|
161
|
+
player_key = "#{player_y}.#{player_x}"
|
162
|
+
|
163
|
+
@cells.delete(cell_key)
|
164
|
+
@cells.delete(player_key)
|
165
|
+
@cells[player_key] = :empty
|
166
|
+
@cells[cell_key] = :player
|
167
|
+
end
|
168
|
+
|
169
|
+
def find_player
|
170
|
+
@cells.select {|_,v| v == :player}.keys[0].split('.')
|
171
|
+
end
|
171
172
|
|
172
173
|
def collision?
|
173
174
|
collision = false
|
174
175
|
player_x = find_player[1].to_i
|
175
176
|
player_y = find_player[0]
|
176
|
-
cell_in_front_x = player_x + 1
|
177
|
-
cell_in_front_x = "0#{cell_in_front_x}" if cell_in_front_x < 10
|
177
|
+
cell_in_front_x = add_zero_if_needed(player_x + 1)
|
178
178
|
cell_in_front = "#{player_y}.#{cell_in_front_x}"
|
179
179
|
|
180
180
|
value_of_cell_in_front = @cells.select {|k, v| k == cell_in_front}.values[0]
|
@@ -186,48 +186,49 @@ class Starx
|
|
186
186
|
|
187
187
|
def keys
|
188
188
|
c = read_char
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
189
|
+
case c
|
190
|
+
when 'q'
|
191
|
+
quit_nicely
|
192
|
+
when "\e[A"
|
193
|
+
move_up!
|
194
|
+
when "\e[B"
|
195
|
+
move_down!
|
196
|
+
when "\e[C"
|
197
|
+
move_forward!
|
198
|
+
when "\e[D"
|
199
|
+
move_backward!
|
200
|
+
when "\u0003"
|
201
|
+
quit_nicely
|
202
|
+
end
|
202
203
|
end
|
203
204
|
|
205
|
+
def quit_nicely
|
206
|
+
system 'stty -raw echo'
|
207
|
+
system 'tput cnorm'
|
208
|
+
system 'clear'
|
209
|
+
Process.exit! true
|
210
|
+
end
|
211
|
+
|
204
212
|
def read_char
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
end
|
214
|
-
extra_thread.join 0.00001
|
215
|
-
extra_thread.kill
|
216
|
-
end
|
217
|
-
end
|
218
|
-
ensure
|
219
|
-
system 'stty -raw echo'
|
220
|
-
end
|
221
|
-
c
|
213
|
+
system 'tput civis'
|
214
|
+
system 'stty raw -echo'
|
215
|
+
if $stdin.ready?
|
216
|
+
c = $stdin.getc.chr
|
217
|
+
if c == "\e"
|
218
|
+
extra_thread = Thread.new do
|
219
|
+
c += $stdin.getc.chr
|
220
|
+
c += $stdin.getc.chr
|
222
221
|
end
|
222
|
+
extra_thread.join 0.00001
|
223
|
+
extra_thread.kill
|
224
|
+
end
|
225
|
+
end
|
226
|
+
c
|
227
|
+
end
|
223
228
|
|
224
229
|
def read_char_menu
|
225
|
-
|
226
|
-
|
227
|
-
c = $stdin.getc.chr
|
228
|
-
ensure
|
229
|
-
system 'stty -raw echo'
|
230
|
-
end
|
230
|
+
system 'stty raw -echo'
|
231
|
+
c = $stdin.getc.chr
|
231
232
|
c
|
232
233
|
end
|
233
234
|
|
@@ -237,48 +238,35 @@ class Starx
|
|
237
238
|
when 'a'
|
238
239
|
Starx.new.play
|
239
240
|
when 'q'
|
240
|
-
|
241
|
-
|
242
|
-
|
241
|
+
quit_nicely
|
242
|
+
when "\u0003"
|
243
|
+
quit_nicely
|
243
244
|
else
|
244
245
|
try_again_screen
|
245
246
|
end
|
246
247
|
end
|
247
248
|
|
248
249
|
def try_again_screen
|
250
|
+
system 'stty -raw'
|
251
|
+
(HEIGHT / 2).times{ WIDTH.times { print '*' } }
|
252
|
+
(WIDTH / 2 - 10).times { print ' ' }
|
253
|
+
puts "\e[31m You died. Haha!\e[0m"
|
254
|
+
(WIDTH / 2 - 10).times { print ' ' }
|
255
|
+
puts "\e[32m Your score: #{@score}\e[0m"
|
256
|
+
(WIDTH / 2 - 10).times { print ' ' }
|
257
|
+
puts "To try again hit 'a'"
|
258
|
+
(WIDTH / 2 - 10).times { print ' ' }
|
259
|
+
puts "To quit hit 'q'"
|
249
260
|
(HEIGHT / 2).times{ WIDTH.times { print '*' } }
|
250
|
-
|
251
|
-
num = WIDTH / 2
|
252
|
-
(WIDTH / 2 - 10).times{ print ' '}
|
253
|
-
print "\e[31m You died. Haha!\e[0m\n"
|
254
|
-
puts ''
|
255
|
-
(WIDTH / 2 - 10).times{ print ' '}
|
256
|
-
print "\e[32m Your score: #{@score}\e[0m\n"
|
257
|
-
puts ''
|
258
|
-
puts ''
|
259
|
-
(WIDTH / 2 - 10).times{ print ' '}
|
260
|
-
print "To try again hit 'a'\n"
|
261
|
-
(WIDTH / 2 - 10).times{ print ' '}
|
262
|
-
print "To quit hit 'q'\n"
|
263
|
-
|
264
|
-
(HEIGHT / 2 - 1).times{ WIDTH.times { print '*' } }
|
265
|
-
puts ''
|
266
261
|
keys_menu
|
267
|
-
|
268
262
|
end
|
269
263
|
|
270
264
|
def play
|
271
265
|
loop do
|
272
|
-
|
273
|
-
tick
|
266
|
+
tick
|
274
267
|
sleep 0.04
|
275
|
-
|
276
|
-
|
277
|
-
system 'tput cnorm'
|
278
|
-
system 'clear'
|
279
|
-
Process.exit! true
|
280
|
-
end
|
281
|
-
end
|
268
|
+
system 'clear'
|
269
|
+
end
|
282
270
|
end
|
283
271
|
end
|
284
272
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: starx
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Justyna Rachowicz
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description:
|
14
14
|
email: justynarachowicz@gmail.com
|
@@ -38,7 +38,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
38
38
|
version: '0'
|
39
39
|
requirements: []
|
40
40
|
rubyforge_project:
|
41
|
-
rubygems_version: 2.4.
|
41
|
+
rubygems_version: 2.4.3
|
42
42
|
signing_key:
|
43
43
|
specification_version: 4
|
44
44
|
summary: Simple, terminal-based game written in ruby
|