minesweeper-curses 0.1.1 → 0.1.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/.rubocop.yml +24 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +14 -3
- data/lib/minesweeper/board.rb +3 -11
- data/lib/minesweeper/board_builder.rb +0 -4
- data/lib/minesweeper/board_params.rb +11 -30
- data/lib/minesweeper/game_initializer.rb +5 -2
- data/lib/minesweeper/storage.rb +34 -0
- data/lib/minesweeper/version.rb +1 -1
- data/lib/minesweeper.rb +1 -0
- data/minesweeper.gemspec +2 -2
- data/readme.md +1 -0
- metadata +12 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64be9ef9dc42505ad9ad3ffb3fcfd36b96764b33
|
4
|
+
data.tar.gz: 543fecb9214ee82fe7322f912c00bd0a38649dc6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78a7c34b9471a412186efb69ca487ad817b597208cec909d9cd20bec4cfa4d59649e15f1680d46d432fd1229930bcfdf7cfaa276348591698705353807b89280
|
7
|
+
data.tar.gz: 4f84c02f4a405d629f0b6e3aeec7b7cafac85a99a249b804e3e2d84ac1268ac0eee7cd9435c6696e245ed8eecbff640dced226af69eeda14ce556e4d43c03743
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
Metrics/LineLength:
|
2
|
+
Max: 120
|
3
|
+
# To make it possible to copy or click on URIs in the code, we allow lines
|
4
|
+
# containing a URI to be longer than Max.
|
5
|
+
AllowHeredoc: true
|
6
|
+
AllowURI: true
|
7
|
+
URISchemes:
|
8
|
+
- http
|
9
|
+
- https
|
10
|
+
# The IgnoreCopDirectives option causes the LineLength rule to ignore cop
|
11
|
+
# directives like '# rubocop: enable ...' when calculating a line's length.
|
12
|
+
IgnoreCopDirectives: false
|
13
|
+
# The IgnoredPatterns option is a list of !ruby/regexp and/or string
|
14
|
+
# elements. Strings will be converted to Regexp objects. A line that matches
|
15
|
+
# any regular expression listed in this option will be ignored by LineLength.
|
16
|
+
IgnoredPatterns: []
|
17
|
+
|
18
|
+
Metrics/BlockLength:
|
19
|
+
CountComments: false
|
20
|
+
Max: 25
|
21
|
+
ExcludedMethods: []
|
22
|
+
Exclude:
|
23
|
+
- Rakefile
|
24
|
+
- spec/**/*.rb
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,12 +1,18 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
minesweeper-curses (0.1.
|
4
|
+
minesweeper-curses (0.1.2)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
9
|
coderay (1.1.1)
|
10
|
+
coveralls (0.8.13)
|
11
|
+
json (~> 1.8)
|
12
|
+
simplecov (~> 0.11.0)
|
13
|
+
term-ansicolor (~> 1.3)
|
14
|
+
thor (~> 0.19.1)
|
15
|
+
tins (~> 1.6.0)
|
10
16
|
curses (1.0.2)
|
11
17
|
diff-lcs (1.3)
|
12
18
|
docile (1.1.5)
|
@@ -39,21 +45,26 @@ GEM
|
|
39
45
|
simplecov-html (0.10.0)
|
40
46
|
slop (3.6.0)
|
41
47
|
sqlite3 (1.3.13)
|
48
|
+
term-ansicolor (1.6.0)
|
49
|
+
tins (~> 1.0)
|
50
|
+
thor (0.19.4)
|
51
|
+
tins (1.6.0)
|
42
52
|
|
43
53
|
PLATFORMS
|
44
54
|
ruby
|
45
55
|
|
46
56
|
DEPENDENCIES
|
47
57
|
bundler (~> 1.14)
|
58
|
+
coveralls
|
48
59
|
curses (~> 1.0.2)
|
49
60
|
minesweeper-curses!
|
50
61
|
minitest (~> 5.0)
|
51
62
|
pry
|
52
63
|
rake (~> 10.0)
|
53
64
|
rspec (~> 3.6.0)
|
54
|
-
sequel
|
65
|
+
sequel (~> 4.46.0)
|
55
66
|
simplecov (~> 0.11.2)
|
56
|
-
sqlite3
|
67
|
+
sqlite3 (~> 1.3.13)
|
57
68
|
|
58
69
|
BUNDLED WITH
|
59
70
|
1.14.6
|
data/lib/minesweeper/board.rb
CHANGED
@@ -53,7 +53,7 @@ module Minesweeper
|
|
53
53
|
open_cell(cury, curx)
|
54
54
|
play(cury, curx)
|
55
55
|
when SPACE
|
56
|
-
|
56
|
+
toggle_bomb_flag(cury, curx)
|
57
57
|
play(cury, curx)
|
58
58
|
end
|
59
59
|
end
|
@@ -79,20 +79,12 @@ module Minesweeper
|
|
79
79
|
window.setpos(0, 1)
|
80
80
|
end
|
81
81
|
|
82
|
-
def debug(args = {})
|
83
|
-
window.setpos(20, 20)
|
84
|
-
str = ''
|
85
|
-
args.each { |k, a| str << "| #{k} #{a} |" }
|
86
|
-
window.addstr(str)
|
87
|
-
window.setpos(cury, curx)
|
88
|
-
end
|
89
|
-
|
90
82
|
def open_cell(y, x)
|
91
83
|
cell_x = x / 3 # / 3 because rendered cell 3 chars
|
92
84
|
open_original(y, cell_x)
|
93
85
|
end
|
94
86
|
|
95
|
-
def
|
87
|
+
def toggle_bomb_flag(y, x)
|
96
88
|
cell_x = x / 3 # / 3 because rendered cell 3 chars
|
97
89
|
cell = cells[y][cell_x]
|
98
90
|
cell.toggle_bomb_flag!
|
@@ -168,7 +160,7 @@ Game Stats: you have found #{found_bombs_count} out of #{bombs.count} bombs
|
|
168
160
|
echo
|
169
161
|
Minesweeper::GameInitializer.new.start
|
170
162
|
when 'r', 'R'
|
171
|
-
Minesweeper::BoardBuilder.
|
163
|
+
Minesweeper::BoardBuilder.new(window, flush_params: false).build.play
|
172
164
|
end
|
173
165
|
end
|
174
166
|
|
@@ -2,10 +2,6 @@ module Minesweeper
|
|
2
2
|
class BoardBuilder
|
3
3
|
extend Forwardable
|
4
4
|
|
5
|
-
def self.from_board(board)
|
6
|
-
new(board.window, flush_params: false)
|
7
|
-
end
|
8
|
-
|
9
5
|
def initialize(window, flush_params:)
|
10
6
|
@window = window
|
11
7
|
@params_builder = Minesweeper::BoardParams.new(window, flush_params)
|
@@ -1,16 +1,5 @@
|
|
1
1
|
module Minesweeper
|
2
2
|
class BoardParams
|
3
|
-
|
4
|
-
# how about more sophisticated solution
|
5
|
-
DB = Sequel.sqlite
|
6
|
-
DB.execute <<-SQL
|
7
|
-
CREATE TABLE IF NOT EXISTS board_params (
|
8
|
-
height integer,
|
9
|
-
width integer,
|
10
|
-
level varchar(255)
|
11
|
-
);
|
12
|
-
SQL
|
13
|
-
|
14
3
|
DEFAULTS = { height: 10, width: 10, level: 'advanced' }.freeze
|
15
4
|
|
16
5
|
attr_reader :window, :flush_params
|
@@ -22,34 +11,26 @@ module Minesweeper
|
|
22
11
|
end
|
23
12
|
|
24
13
|
def height
|
25
|
-
read[:height]
|
14
|
+
storage.read[:height]
|
26
15
|
end
|
27
16
|
|
28
17
|
def width
|
29
|
-
read[:width]
|
18
|
+
storage.read[:width]
|
30
19
|
end
|
31
20
|
|
32
21
|
def level
|
33
|
-
read[:level]
|
34
|
-
end
|
35
|
-
|
36
|
-
def prepare
|
37
|
-
flush_storage if flush_params
|
38
|
-
read || build
|
22
|
+
storage.read[:level]
|
39
23
|
end
|
40
24
|
|
41
25
|
private
|
42
26
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
def read
|
48
|
-
table.first
|
27
|
+
def prepare
|
28
|
+
storage.flush if flush_params
|
29
|
+
storage.read || build
|
49
30
|
end
|
50
31
|
|
51
|
-
def
|
52
|
-
|
32
|
+
def storage
|
33
|
+
::Minesweeper::Storage.instance
|
53
34
|
end
|
54
35
|
|
55
36
|
def build
|
@@ -57,11 +38,11 @@ module Minesweeper
|
|
57
38
|
window.setpos(4, 42)
|
58
39
|
str = window.getstr
|
59
40
|
if str.casecmp('y').zero?
|
60
|
-
|
41
|
+
storage.insert(DEFAULTS)
|
61
42
|
else
|
62
|
-
|
43
|
+
storage.insert(height: ask_y, width: ask_x, level: ask_level)
|
63
44
|
end
|
64
|
-
read
|
45
|
+
storage.read
|
65
46
|
end
|
66
47
|
|
67
48
|
def ask_x
|
@@ -16,8 +16,11 @@ module Minesweeper
|
|
16
16
|
window.addstr("Welcome to Minesweeper \n")
|
17
17
|
window.addstr("screen size: rows: #{window.maxy}; columns: #{window.maxx} \n")
|
18
18
|
window.addstr("controls: `space` to mark/unmark cell as bomb, `arrow keys` to navigate \n")
|
19
|
-
|
20
|
-
|
19
|
+
Minesweeper::BoardBuilder
|
20
|
+
.new(window, flush_params: true)
|
21
|
+
.build
|
22
|
+
.play
|
23
|
+
rescue SystemExit, Interrupt
|
21
24
|
ensure
|
22
25
|
close_screen
|
23
26
|
at_exit { puts 'good bye' }
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
module Minesweeper
|
4
|
+
class Storage
|
5
|
+
include Singleton
|
6
|
+
|
7
|
+
DB = Sequel.sqlite
|
8
|
+
DB.execute <<-SQL
|
9
|
+
CREATE TABLE IF NOT EXISTS board_params (
|
10
|
+
height integer,
|
11
|
+
width integer,
|
12
|
+
level varchar(255)
|
13
|
+
);
|
14
|
+
SQL
|
15
|
+
|
16
|
+
def read
|
17
|
+
table.first
|
18
|
+
end
|
19
|
+
|
20
|
+
def flush
|
21
|
+
table.delete
|
22
|
+
end
|
23
|
+
|
24
|
+
def insert(**args)
|
25
|
+
table.insert(args)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def table
|
31
|
+
DB[:board_params]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/lib/minesweeper/version.rb
CHANGED
data/lib/minesweeper.rb
CHANGED
data/minesweeper.gemspec
CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.add_development_dependency 'rake', '~> 10.0'
|
36
36
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
37
37
|
spec.add_development_dependency 'curses', '~> 1.0.2'
|
38
|
-
spec.add_development_dependency 'sequel'
|
39
|
-
spec.add_development_dependency 'sqlite3'
|
38
|
+
spec.add_development_dependency 'sequel', '~> 4.46.0'
|
39
|
+
spec.add_development_dependency 'sqlite3', '~> 1.3.13'
|
40
40
|
spec.add_development_dependency 'rspec', '~> 3.6.0'
|
41
41
|
end
|
data/readme.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
[](https://travis-ci.org/ruba-ruba/minesweeper)
|
2
|
+
[](https://coveralls.io/github/ruba-ruba/minesweeper?branch=master)
|
2
3
|
|
3
4
|
### Minesweeper Terminal
|
4
5
|
> Console version of [minesweeper game](https://en.wikipedia.org/wiki/Microsoft_Minesweeper) written in [ruby](https://www.ruby-lang.org/en/) & [curses gem](https://github.com/ruby/curses)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: minesweeper-curses
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mykhailo Rybak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -70,30 +70,30 @@ dependencies:
|
|
70
70
|
name: sequel
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
75
|
+
version: 4.46.0
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 4.46.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: sqlite3
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - "
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
89
|
+
version: 1.3.13
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - "
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
96
|
+
version: 1.3.13
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -118,6 +118,7 @@ extra_rdoc_files: []
|
|
118
118
|
files:
|
119
119
|
- ".gitignore"
|
120
120
|
- ".rspec"
|
121
|
+
- ".rubocop.yml"
|
121
122
|
- ".ruby-version"
|
122
123
|
- ".travis.yml"
|
123
124
|
- CODE_OF_CONDUCT.md
|
@@ -136,6 +137,7 @@ files:
|
|
136
137
|
- lib/minesweeper/bomb_injector.rb
|
137
138
|
- lib/minesweeper/cell.rb
|
138
139
|
- lib/minesweeper/game_initializer.rb
|
140
|
+
- lib/minesweeper/storage.rb
|
139
141
|
- lib/minesweeper/version.rb
|
140
142
|
- minesweeper.gemspec
|
141
143
|
- readme.md
|