rbstar 1.2.0 → 1.4.1
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/gosustar +102 -0
- data/bin/rbstar +2 -2
- data/lib/rbstar.rb +10 -5
- metadata +7 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73a2015394f4bd7d124a0183c4fe0c491803214d1ee184db14d05fd8d3c6dad4
|
4
|
+
data.tar.gz: 6775189a3d66e57ab384c641ecf1b2c065b7d2e533a40eb4cdce1249d7c6b16f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccde9bd4ffb6eab1007f9d31a7fb536cff0eed087c07526b49ccecae4ae0bbba6fee74fce9e1f1bd0eb9c5e5c2624f7a385cf038be2182a5b85a33b5369f1c0b
|
7
|
+
data.tar.gz: 1e94e9022519fd74527350ee81b2ba7b72ef2d8da1450a38313e203a7ae1879de49a986ff47b36d84bb3ed8c9f8253be8eecaa1e3b1de907206db83ca61df17c
|
data/bin/gosustar
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
4
|
+
require 'gosu'
|
5
|
+
require 'optparse'
|
6
|
+
|
7
|
+
require 'rbstar'
|
8
|
+
|
9
|
+
class GosuStar < Gosu::Window
|
10
|
+
def initialize( level, scale )
|
11
|
+
@scale = scale
|
12
|
+
@sprite_width = 9
|
13
|
+
@sprite_height = 8
|
14
|
+
|
15
|
+
@level = level
|
16
|
+
@field = RbStar::Board.new( @level )
|
17
|
+
@finished = false
|
18
|
+
@state = { dead: false, victory: false }
|
19
|
+
|
20
|
+
@font = Gosu::Font.new( 20 )
|
21
|
+
@images = { '@' => Gosu::Image.from_blob( @sprite_width * @scale, @sprite_height * @scale, bits_to_rgbas( '000000000000000000000110000001101000001111000000110000000000000000000000' ) ),
|
22
|
+
'H' => Gosu::Image.from_blob( @sprite_width * @scale, @sprite_height * @scale, bits_to_rgbas( '000000000000000000001111000001111000001111000001111000000000000000000000' ) ),
|
23
|
+
'#' => Gosu::Image.from_blob( @sprite_width * @scale, @sprite_height * @scale, bits_to_rgbas( '011111110100101001110000111101100001110001011100100101101001001011111110' ) ),
|
24
|
+
'x' => Gosu::Image.from_blob( @sprite_width * @scale, @sprite_height * @scale, bits_to_rgbas( '000000000000000000000110000001001000001001000000110000000000000000000000' ) ),
|
25
|
+
' ' => Gosu::Image.from_blob( @sprite_width * @scale, @sprite_height * @scale, bits_to_rgbas( '0' * @sprite_width * @sprite_height ) ) }
|
26
|
+
|
27
|
+
@finished = false
|
28
|
+
|
29
|
+
# Creation of the window
|
30
|
+
super ( ( ( ( @sprite_width - 1 ) * @field.width ) + 2 ) * @scale ) + @scale,
|
31
|
+
( ( ( ( @sprite_height - 1 ) * @field.height ) + 2 ) * @scale ) + @scale + 20
|
32
|
+
end
|
33
|
+
|
34
|
+
def bits_to_rgbas( bits )
|
35
|
+
bits.scan(/.{#{@sprite_width}}/).map do |line|
|
36
|
+
line.gsub( '0', "\0\0\0\0" * @scale ).gsub( '1', "\255\255\255\255" * @scale ) * @scale
|
37
|
+
end.join
|
38
|
+
end
|
39
|
+
|
40
|
+
def button_up(id)
|
41
|
+
case id
|
42
|
+
when Gosu::KB_NUMPAD_2, Gosu::KB_DOWN
|
43
|
+
@state = @field.move :down
|
44
|
+
when Gosu::KB_NUMPAD_4, Gosu::KB_LEFT
|
45
|
+
@state = @field.move :left
|
46
|
+
when Gosu::KB_NUMPAD_6, Gosu::KB_RIGHT
|
47
|
+
@state = @field.move :right
|
48
|
+
when Gosu::KB_NUMPAD_8, Gosu::KB_UP
|
49
|
+
@state = @field.move :up
|
50
|
+
when Gosu::KB_ESCAPE, Gosu::KB_Q
|
51
|
+
close
|
52
|
+
when Gosu::KB_N
|
53
|
+
@field.next_level
|
54
|
+
when Gosu::KB_P
|
55
|
+
@field.prev_level
|
56
|
+
when Gosu::KB_R
|
57
|
+
@field.reload_level
|
58
|
+
when Gosu::KB_SPACE
|
59
|
+
@field.switch_moving
|
60
|
+
else
|
61
|
+
super
|
62
|
+
end
|
63
|
+
|
64
|
+
@finished = @field.success?
|
65
|
+
|
66
|
+
@field.next_level if @finished
|
67
|
+
end
|
68
|
+
|
69
|
+
def update; end
|
70
|
+
|
71
|
+
def draw
|
72
|
+
caption = "Level #{@field.level + 1}/#{@field.levels.length}, #{@field.whats_moving} moving, #{@field.count_gifts} gems left, score: #{@field.distance} "
|
73
|
+
|
74
|
+
@font.draw_text( caption, 0, 0, 0 )
|
75
|
+
|
76
|
+
@field.height.times do |y|
|
77
|
+
@field.width.times do |x|
|
78
|
+
@images[ @field.get_cell( x, y ) ].draw ( ( @sprite_width - 1 ) * x * @scale ) + @scale,
|
79
|
+
( ( @sprite_height - 1 ) * y * @scale ) + @scale + 20,
|
80
|
+
0
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
options = { level: 0,
|
87
|
+
scale: 3 }
|
88
|
+
OptionParser.new do |opts|
|
89
|
+
opts.banner = 'Usage: gosustar <options>'
|
90
|
+
|
91
|
+
opts.on( '-l', '--level INT' ) do |level|
|
92
|
+
options[:level] = level.to_i
|
93
|
+
end
|
94
|
+
|
95
|
+
opts.on( '-s', '--scale INT' ) do |scale|
|
96
|
+
options[:scale] = scale.to_i
|
97
|
+
end
|
98
|
+
end
|
99
|
+
.parse!
|
100
|
+
|
101
|
+
GosuStar.new( options[:level], options[:scale] )
|
102
|
+
.show
|
data/bin/rbstar
CHANGED
@@ -62,13 +62,13 @@ def ncurses_main( level )
|
|
62
62
|
when ' '
|
63
63
|
field.switch_moving
|
64
64
|
when 'n'
|
65
|
-
# finished = true
|
66
65
|
field.next_level
|
67
66
|
when 'p'
|
68
|
-
# finished = true
|
69
67
|
field.prev_level
|
70
68
|
when 'q'
|
71
69
|
break
|
70
|
+
when 'r'
|
71
|
+
field.reload_level
|
72
72
|
end
|
73
73
|
rescue Curses::RequestDeniedError
|
74
74
|
'prout'
|
data/lib/rbstar.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module RbStar
|
4
|
-
VERSION = '1.
|
4
|
+
VERSION = '1.4.1'
|
5
5
|
|
6
6
|
class Board
|
7
7
|
attr_reader :board,
|
@@ -61,10 +61,9 @@ module RbStar
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def get_pos( actor )
|
64
|
-
|
65
|
-
|
66
|
-
pos[ :
|
67
|
-
pos[ :x ] = p - ( pos[ :y ] * width )
|
64
|
+
rawpos = @board.index( actor )
|
65
|
+
pos = { y: ( rawpos / width ).floor }
|
66
|
+
pos[ :x ] = rawpos - ( pos[ :y ] * width )
|
68
67
|
|
69
68
|
pos
|
70
69
|
end
|
@@ -109,6 +108,12 @@ module RbStar
|
|
109
108
|
@level = (@levels.length - 1) if @level >= @levels.length
|
110
109
|
|
111
110
|
@board = @levels[ @level ].dup
|
111
|
+
@distance = 0
|
112
|
+
@whats_moving = cells[:actor]
|
113
|
+
end
|
114
|
+
|
115
|
+
def reload_level
|
116
|
+
load_level( @level )
|
112
117
|
end
|
113
118
|
|
114
119
|
def prev_level
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbstar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gwenhael Le Moine
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: curses
|
@@ -28,17 +28,20 @@ description: Puzzle game inspired by an old HP 48 called dstar
|
|
28
28
|
email: gwenhael@le-moine.org
|
29
29
|
executables:
|
30
30
|
- rbstar
|
31
|
+
- gosustar
|
31
32
|
extensions: []
|
32
33
|
extra_rdoc_files:
|
33
34
|
- README.md
|
34
35
|
files:
|
35
36
|
- README.md
|
37
|
+
- bin/gosustar
|
36
38
|
- bin/rbstar
|
37
39
|
- lib/rbstar.rb
|
38
40
|
homepage: https://src.le-moine.org/gwh/rbstar
|
39
41
|
licenses:
|
40
42
|
- GPL-3.0
|
41
|
-
metadata:
|
43
|
+
metadata:
|
44
|
+
rubygems_mfa_required: 'true'
|
42
45
|
post_install_message:
|
43
46
|
rdoc_options: []
|
44
47
|
require_paths:
|
@@ -54,7 +57,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
57
|
- !ruby/object:Gem::Version
|
55
58
|
version: '0'
|
56
59
|
requirements: []
|
57
|
-
rubygems_version: 3.
|
60
|
+
rubygems_version: 3.4.10
|
58
61
|
signing_key:
|
59
62
|
specification_version: 4
|
60
63
|
summary: Puzzle game
|