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.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/gosustar +102 -0
  3. data/bin/rbstar +2 -2
  4. data/lib/rbstar.rb +10 -5
  5. metadata +7 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb2ed0e7e0da2b7a9f2f673daf96784eb0bf70f9f5a9c14d2efa8a6a0d2924af
4
- data.tar.gz: d4f8c7522ba1d4f56c0ec8bac3270764ae14f60ca11cb1a4de01fb8086147dcc
3
+ metadata.gz: 73a2015394f4bd7d124a0183c4fe0c491803214d1ee184db14d05fd8d3c6dad4
4
+ data.tar.gz: 6775189a3d66e57ab384c641ecf1b2c065b7d2e533a40eb4cdce1249d7c6b16f
5
5
  SHA512:
6
- metadata.gz: 105f4d01ae804d28a5b72907c97919bc79172b81c891b950a0727adcdbf1beaad4b9dabbe49d7c12b459729c3203e569a807f99de6d759f818ac12c67273e0b1
7
- data.tar.gz: e69c9a866bec03c60d1f17bc7a715b0695bd79eb6262b75c463403c7c68e1c1a81eef6ce98be4ba488356baa07479a1da70205eb0bf7824308a148a4169f88f3
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.2.0'
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
- pos = {}
65
- p = @board.index( actor )
66
- pos[ :y ] = ( p / width ).floor
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.2.0
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: 2022-11-23 00:00:00.000000000 Z
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.3.7
60
+ rubygems_version: 3.4.10
58
61
  signing_key:
59
62
  specification_version: 4
60
63
  summary: Puzzle game