minesweeper-cl 0.1.2 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4c480ca41fdede1f0ab25f66f88d2f6b4f023b6
4
- data.tar.gz: 17dff4c4323f1f26723b0cb58a48bbb40276f644
3
+ metadata.gz: ddfac9f3e1ba4cd189b026bafc4fb5285fd32a6a
4
+ data.tar.gz: fd73a710d135c59ac590f20938d0b4456d6b49de
5
5
  SHA512:
6
- metadata.gz: e81ce953573f91a17a9854e2552a5b9018b906b29c50a5b66b71b5ddf58d24f6dfcc5327fb9d5e08808ae4a33c9bff7d8d4da912753c2aea8005be41aac35ee8
7
- data.tar.gz: 70b6a22055d4974f1192a877337716e0aaf464c86b4404c9c30adda72a9de425eb473293c28964c7c7e7f06c75852f07afd116cd794ab49907e2383fd5d9d330
6
+ metadata.gz: 152addc517e56e4b3df345d3c23a1f433e1941c9f90b7f62565ce93f3f89dd7fe640a0654497286c50718a515d5f805514764df6e1ec40700c4d6f481808027e
7
+ data.tar.gz: 2ffc81e0202a8802a77620c0f81f7b4ef938b4505bdfa90a7d01105c4562a1e4c57dbfaa9901e10bcda8c4def9495e679aaee545f95293fd1a0acbba9291b701
@@ -9,9 +9,9 @@ puts "Welcome to the game of minesweeper!"
9
9
 
10
10
  # Make the parser for parsing the data
11
11
  begin
12
- options = MinesweeperParser.new.parse!(ARGV)
12
+ options = MinesweeperParser.new.parse(ARGV)
13
13
  rescue OptionParser::MissingArgument, OptionParser::InvalidArgument
14
- help_msg = MinesweeperParser.parse!(["-h"])
14
+ help_msg = MinesweeperParser.new.parse(["-h"])
15
15
  puts help_msg
16
16
  end
17
17
 
@@ -29,8 +29,12 @@ while !game.game_over? && !game.win? do
29
29
  end
30
30
 
31
31
  if game.game_over?
32
+ puts "\n Underlying board shown below\n"
33
+ game.print_ending_board
32
34
  puts "Oops! You selected a bomb. Please play again!"
33
35
  elsif game.win?
36
+ puts "\n Underlying board shown below\n"
37
+ game.print_ending_board
34
38
  puts "Congrats you won the game!"
35
39
  end
36
40
 
@@ -1,6 +1,5 @@
1
1
  # GameBoard class will be used by the minesweeper game to keep track of tiles,
2
2
  # bombs, and the conditions necessary to win the game.
3
- $LOAD_PATH.unshift("#{File.dirname(__FILE__)}/")
4
3
  require 'game_tile'
5
4
 
6
5
  class GameBoard
@@ -16,7 +15,7 @@ class GameBoard
16
15
  cols.times do |column|
17
16
  if rand < bomb_chance
18
17
  @board["(#{row}, #{column})"] = GameTile.new(self, nil, nil, nil, nil, nil, nil, nil, nil, true)
19
- @win_value -= 1
18
+ # @win_value -= 1
20
19
  else
21
20
  @board["(#{row}, #{column})"] = GameTile.new(self, nil, nil, nil, nil, nil, nil, nil, nil, false)
22
21
  end
@@ -20,7 +20,7 @@ class GameTile
20
20
  }
21
21
  @is_bomb = is_bomb
22
22
  @adjacent_bombs = 0
23
- @adjacent_zeroes = {}
23
+ @adjacent_zeroes = []
24
24
  @been_played = false
25
25
  @been_flagged = false
26
26
  @board = board
@@ -45,22 +45,30 @@ class GameTile
45
45
  # This method will "play" all of the adjacent cells that have zero mines surrounding them.
46
46
  # The minesweeper game that comes standard with most computers has this behavior.
47
47
  def find_adjacent_zeroes
48
- @adjacent.each do |key, value|
48
+ @adjacent.each do |key, tile|
49
49
  begin
50
- if value.adjacent_bombs == 0
51
- @adjacent_zeroes[key] = value
50
+ if tile.adjacent_bombs == 0
51
+ @adjacent_zeroes << tile
52
52
  end
53
53
  rescue
54
54
  end
55
55
  end
56
56
  end
57
57
 
58
- def play_adjacent_zeroes
59
- @adjacent_zeroes.each do |key, value|
60
- value.adjacent_zeroes.each do |key1, value1|
61
- if !value1.been_played
62
- value1.been_played = true
63
- @board.num_played += 1
58
+ # Recusively play all of the zero tiles around the tile that has been played.
59
+ # The recursion stops when the method reaches a tile that has adjacent bombs.
60
+ def play_adjacent_zeroes(board)
61
+ if @adjacent_bombs > 0
62
+ @been_played = true
63
+ board.num_played += 1
64
+ return
65
+ else
66
+ board.num_played += 1 unless !@been_played
67
+ @been_played = true
68
+ @adjacent.each do |key, tile|
69
+ if !tile.nil? && !tile.been_played
70
+ tile.been_played = true
71
+ tile.play_adjacent_zeroes(board)
64
72
  end
65
73
  end
66
74
  end
@@ -9,9 +9,9 @@ puts "Welcome to the game of minesweeper!"
9
9
 
10
10
  # Make the parser for parsing the data
11
11
  begin
12
- options = MinesweeperParser.new.parse!(ARGV)
12
+ options = MinesweeperParser.new.parse(ARGV)
13
13
  rescue OptionParser::MissingArgument, OptionParser::InvalidArgument
14
- help_msg = MinesweeperParser.parse!(["-h"])
14
+ help_msg = MinesweeperParser.new.parse(["-h"])
15
15
  puts help_msg
16
16
  end
17
17
 
@@ -29,8 +29,12 @@ while !game.game_over? && !game.win? do
29
29
  end
30
30
 
31
31
  if game.game_over?
32
+ puts "\n Underlying board shown below\n"
33
+ game.print_ending_board
32
34
  puts "Oops! You selected a bomb. Please play again!"
33
35
  elsif game.win?
36
+ puts "\n Underlying board shown below\n"
37
+ game.print_ending_board
34
38
  puts "Congrats you won the game!"
35
39
  end
36
40
 
@@ -27,7 +27,6 @@ class MinesweeperGame
27
27
  end
28
28
  puts
29
29
  end
30
-
31
30
  end
32
31
 
33
32
  def play_the_game
@@ -37,18 +36,18 @@ class MinesweeperGame
37
36
  puts
38
37
  player_choice = gets.chomp
39
38
 
40
- if /^(help|h)\z/.match(player_choice) then print_help_message end
39
+ if /^(help|h)\z/.match(player_choice.downcase) then print_help_message end
41
40
 
42
41
  # Now match the player response with a regular expression
43
- while /^([pfPF]) (\d){1,2}, (\d){1,2}\z/.match(player_choice) == nil
42
+ while /^([pfPF]) (\d{1,2}), (\d{1,2})\z/.match(player_choice) == nil
44
43
  puts "Please put two numbers corresponding to the row and column that you'd like to play in the form"
45
44
  puts "<pf> <row>, <column>"
46
45
  puts "Numbers greater than the number of rows or cols will be truncated to the max row/col"
47
46
  puts
48
47
  player_choice = gets.chomp
49
- if /^(help|h)\z/.match(player_choice) then print_help_message end
48
+ if /^(help|h)\z/.match(player_choice.downcase) then print_help_message end
50
49
  end
51
- match = /^([pfPF]) (\d){1,2}, (\d){1,2}\z/.match(player_choice)
50
+ match = /^([pfPF]) (\d{1,2}), (\d{1,2})\z/.match(player_choice)
52
51
  row = match[2].to_i
53
52
  col = match[3].to_i
54
53
 
@@ -72,15 +71,16 @@ class MinesweeperGame
72
71
  if @board.board["(#{row}, #{column})"].is_bomb?
73
72
  @game_over = true
74
73
  else
74
+ @board.num_played += 1 unless @board.board["(#{row}, #{column})"].been_played || @board.board["(#{row}, #{column})"].adjacent_bombs == 0
75
75
  @board.board["(#{row}, #{column})"].been_played = true
76
- @board.num_played += 1
77
76
  if @board.board["(#{row}, #{column})"].adjacent_bombs == 0
78
- @board.board["(#{row}, #{column})"].play_adjacent_zeroes
77
+ @board.board["(#{row}, #{column})"].play_adjacent_zeroes(@board)
79
78
  end
80
79
  if @board.num_played == @board.win_value
81
80
  @win = true
82
81
  end
83
82
  end
83
+
84
84
  end
85
85
 
86
86
  def flag_tile(row, column)
@@ -88,8 +88,8 @@ class MinesweeperGame
88
88
  @board.board["(#{row}, #{column})"].been_flagged = false
89
89
  else
90
90
  @board.board["(#{row}, #{column})"].been_flagged = true
91
+ @board.num_played += 1 unless @board.board["(#{row}, #{column})"].been_played
91
92
  @board.board["(#{row}, #{column})"].been_played = true
92
- @board.num_played += 1
93
93
  if @board.num_played == @board.win_value
94
94
  @win = true
95
95
  end
@@ -103,6 +103,20 @@ class MinesweeperGame
103
103
  def win?
104
104
  @win
105
105
  end
106
+
107
+ def print_ending_board
108
+ @rows.times do |row|
109
+ @columns.times do |col|
110
+ if @board.board["(#{row}, #{col})"].is_bomb?
111
+ print "[ *] "
112
+ else
113
+ print "[ " + @board.board["(#{row}, #{col})"].adjacent_bombs.to_s + "] "
114
+ end
115
+ end
116
+ puts
117
+ end
118
+ end
119
+
106
120
 
107
121
  private
108
122
  def print_help_message
@@ -9,7 +9,7 @@ class MinesweeperParser
9
9
  def initialize
10
10
  end
11
11
 
12
- def parse!(args)
12
+ def parse(args)
13
13
  options = OpenStruct.new
14
14
  options.rows_cols_chance = {}
15
15
  options.inplace = false
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minesweeper-cl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - gr1zzly_be4r