good_luck_wizard 0.0.1 → 0.0.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/glw.rb +9 -14
- data/lib/glw/game.rb +31 -0
- data/lib/glw/map.rb +71 -0
- data/lib/glw/random.rb +33 -0
- data/lib/glw/term.rb +21 -18
- data/lib/glw/term_colors.rb +22 -0
- data/lib/glw/version.rb +1 -1
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dbc38af238a6cc80858a6e316e300aedff0c0fe0936a3bbd76856236c94881f1
|
4
|
+
data.tar.gz: 7e709dcc1afb14905d4c33e07dd1781b228e2c9ec7e25433ff73e9f944b1a03c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 847f1f7fa71a3bb0a213c25e69d8f30fd43419018977641d53a25f6bc87e88baaeb40ce90c0600eb3f097fb5d9bb39bfda4682e55d1f669f807050aa7720d8c4
|
7
|
+
data.tar.gz: f84e32458ad72740728373a24318ae41fa87e3568a51f11a55e11c8be6570e6ecea8d1039408210177122bcba3f865c8bcefd6bed0030f86107e085943008a0a
|
data/lib/glw.rb
CHANGED
@@ -9,30 +9,25 @@ module GLW
|
|
9
9
|
initialize_zeitwerk
|
10
10
|
|
11
11
|
GLW::Term.with_term do |t|
|
12
|
-
|
13
|
-
t.refresh
|
14
|
-
sleep 1
|
12
|
+
g = Game.new(term: t)
|
15
13
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
t.set(x: 1, y: 1, c: " ")
|
22
|
-
t.set(x: 2, y: 2, c: "@")
|
23
|
-
t.refresh
|
24
|
-
sleep 1
|
14
|
+
loop do
|
15
|
+
g.render
|
16
|
+
break if g.send_key(t.getch) == :quit
|
17
|
+
end
|
25
18
|
end
|
26
19
|
end
|
27
20
|
|
28
|
-
private
|
29
|
-
|
30
21
|
def initialize_zeitwerk
|
22
|
+
return if @zeitwerk_enabled
|
23
|
+
|
31
24
|
Zeitwerk::Loader.new.tap do |loader|
|
32
25
|
loader.inflector.inflect("glw" => "GLW")
|
33
26
|
loader.push_dir(__dir__)
|
34
27
|
loader.setup
|
35
28
|
end
|
29
|
+
|
30
|
+
@zeitwerk_enabled = true
|
36
31
|
end
|
37
32
|
end
|
38
33
|
end
|
data/lib/glw/game.rb
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
module GLW
|
2
|
+
class Game
|
3
|
+
def initialize(term:)
|
4
|
+
@map = Map.new
|
5
|
+
@term = term
|
6
|
+
end
|
7
|
+
|
8
|
+
def send_key(key)
|
9
|
+
case key
|
10
|
+
when "q"
|
11
|
+
:quit
|
12
|
+
when "h"
|
13
|
+
@map.send_event :left
|
14
|
+
when "l"
|
15
|
+
@map.send_event :right
|
16
|
+
when "k"
|
17
|
+
@map.send_event :up
|
18
|
+
when "j"
|
19
|
+
@map.send_event :down
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def render
|
24
|
+
map.render(term, width: term.width - 60, height: term.height)
|
25
|
+
end
|
26
|
+
|
27
|
+
private
|
28
|
+
|
29
|
+
attr_reader :term, :map
|
30
|
+
end
|
31
|
+
end
|
data/lib/glw/map.rb
ADDED
@@ -0,0 +1,71 @@
|
|
1
|
+
module GLW
|
2
|
+
class Map
|
3
|
+
MAP = <<~TXT
|
4
|
+
############
|
5
|
+
#..........# ##########
|
6
|
+
#..........############....#...#
|
7
|
+
#..............................#
|
8
|
+
#.......g..############....#...#
|
9
|
+
#..........# #....#...#
|
10
|
+
############ ##########
|
11
|
+
TXT
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
@player_x = 3
|
15
|
+
@player_y = 3
|
16
|
+
|
17
|
+
@map = Hash.new(" ")
|
18
|
+
MAP.lines.each_with_index do |line, y|
|
19
|
+
line.chars.each_with_index do |c, x|
|
20
|
+
@map[[x, y]] = c
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
@offset_x = 1
|
25
|
+
@offset_y = 1
|
26
|
+
end
|
27
|
+
|
28
|
+
def send_event(e)
|
29
|
+
case e
|
30
|
+
when :left
|
31
|
+
@player_x -= 1 if valid_player_position?(@player_x - 1, @player_y)
|
32
|
+
when :right
|
33
|
+
@player_x += 1 if valid_player_position?(@player_x + 1, @player_y)
|
34
|
+
when :up
|
35
|
+
@player_y -= 1 if valid_player_position?(@player_x, @player_y - 1)
|
36
|
+
when :down
|
37
|
+
@player_y += 1 if valid_player_position?(@player_x, @player_y + 1)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def render(term, width:, height:)
|
42
|
+
(0..width - 1).each do |x|
|
43
|
+
(0..height - 1).each do |y|
|
44
|
+
|
45
|
+
if [@player_x + @offset_x, @player_y + @offset_y] == [x, y]
|
46
|
+
term.set(
|
47
|
+
x: x,
|
48
|
+
y: y,
|
49
|
+
c: "@",
|
50
|
+
fg: 220
|
51
|
+
)
|
52
|
+
else
|
53
|
+
term.set(
|
54
|
+
x: x,
|
55
|
+
y: y,
|
56
|
+
c: @map[[x - @offset_x, y - @offset_y]]
|
57
|
+
)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
term.refresh
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def valid_player_position?(x, y)
|
68
|
+
@map[[x, y]] == "."
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
data/lib/glw/random.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module GLW
|
2
|
+
class Random
|
3
|
+
MASK64 = (1 << 64) - 1
|
4
|
+
MASK32 = (1 << 32) - 1
|
5
|
+
CONST = 0x2545F4914F6CDD1D
|
6
|
+
|
7
|
+
def initialize(seed)
|
8
|
+
@state = seed & MASK64
|
9
|
+
end
|
10
|
+
|
11
|
+
def sample(collection)
|
12
|
+
collection[integer % collection.length]
|
13
|
+
end
|
14
|
+
|
15
|
+
def integer
|
16
|
+
x = state
|
17
|
+
x = (x ^ (x >> 12)) & MASK64
|
18
|
+
x = (x ^ (x << 25)) & MASK64
|
19
|
+
x = (x ^ (x >> 27)) & MASK64
|
20
|
+
self.state = x
|
21
|
+
|
22
|
+
(((x * CONST) & MASK64) >> 32) & MASK32
|
23
|
+
end
|
24
|
+
|
25
|
+
def float
|
26
|
+
integer.to_f / (1 << 32)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
attr_accessor :state
|
32
|
+
end
|
33
|
+
end
|
data/lib/glw/term.rb
CHANGED
@@ -6,23 +6,9 @@ module GLW
|
|
6
6
|
DEFAULT_FG = 255
|
7
7
|
DEFAULT_BG = 16
|
8
8
|
|
9
|
-
Cell = Struct.new(:c, :fg, :bg)
|
10
|
-
def initialize(*args)
|
11
|
-
super
|
12
|
-
@dirty = true
|
13
|
-
end
|
14
|
-
|
15
|
-
def seen?
|
16
|
-
!@dirty
|
17
|
-
end
|
18
|
-
|
19
|
-
def seen!
|
20
|
-
@dirty = false
|
21
|
-
end
|
22
|
-
end
|
9
|
+
Cell = Struct.new(:c, :fg, :bg)
|
23
10
|
|
24
11
|
DEFAULT_CELL = Cell.new(" ", DEFAULT_FG, DEFAULT_BG)
|
25
|
-
DEFAULT_CELL.seen!
|
26
12
|
|
27
13
|
class << self
|
28
14
|
def with_term
|
@@ -43,6 +29,7 @@ module GLW
|
|
43
29
|
@window = window
|
44
30
|
@tiles = Hash.new { DEFAULT_CELL }
|
45
31
|
@next_tiles = {}
|
32
|
+
@colors = TermColors.new
|
46
33
|
end
|
47
34
|
|
48
35
|
def set(x:, y:, c:, fg: DEFAULT_FG, bg: DEFAULT_BG)
|
@@ -51,10 +38,26 @@ module GLW
|
|
51
38
|
@next_tiles[[x, y]] = cell unless @tiles[[x, y]] == cell
|
52
39
|
end
|
53
40
|
|
41
|
+
def width
|
42
|
+
Curses.cols
|
43
|
+
end
|
44
|
+
|
45
|
+
def height
|
46
|
+
Curses.lines
|
47
|
+
end
|
48
|
+
|
49
|
+
def getch
|
50
|
+
window.getch
|
51
|
+
end
|
52
|
+
|
54
53
|
def refresh
|
55
54
|
@next_tiles.each do |coords, cell|
|
56
|
-
|
57
|
-
window
|
55
|
+
x, y = *coords
|
56
|
+
window.setpos(y, x)
|
57
|
+
|
58
|
+
window.attron(colors[cell.fg, cell.bg]) do
|
59
|
+
window << cell.c
|
60
|
+
end
|
58
61
|
end
|
59
62
|
|
60
63
|
@tiles = @tiles.merge(@next_tiles)
|
@@ -64,6 +67,6 @@ module GLW
|
|
64
67
|
|
65
68
|
private
|
66
69
|
|
67
|
-
attr_reader :window
|
70
|
+
attr_reader :window, :colors
|
68
71
|
end
|
69
72
|
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module GLW
|
2
|
+
class TermColors
|
3
|
+
def initialize(curses = Curses)
|
4
|
+
index = 1
|
5
|
+
|
6
|
+
@colors = Hash.new do |hash, key|
|
7
|
+
fg, bg = *key
|
8
|
+
|
9
|
+
curses.init_pair(index, fg, bg)
|
10
|
+
hash[key] = curses.color_pair(index)
|
11
|
+
|
12
|
+
index += 1
|
13
|
+
|
14
|
+
hash[key]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def [](fg, bg)
|
19
|
+
@colors[[fg, bg]]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
data/lib/glw/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: good_luck_wizard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Norman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -127,7 +127,11 @@ files:
|
|
127
127
|
- exe/glw
|
128
128
|
- good_luck_wizard.gemspec
|
129
129
|
- lib/glw.rb
|
130
|
+
- lib/glw/game.rb
|
131
|
+
- lib/glw/map.rb
|
132
|
+
- lib/glw/random.rb
|
130
133
|
- lib/glw/term.rb
|
134
|
+
- lib/glw/term_colors.rb
|
131
135
|
- lib/glw/version.rb
|
132
136
|
homepage: http://github.com/jarednorman/glw
|
133
137
|
licenses: []
|