Module: GamesAndRpgParadise::GUI::Gtk::Minesweeper::MinesweeperGameModule

Includes:
Gtk::BaseModule
Included in:
MinesweeperGame
Defined in:
lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb

Constant Summary collapse

NAMESPACE =
#

NAMESPACE

#
inspect
TITLE =
#

TITLE

#
'Minesweeper Game'
WIDTH =
#

WIDTH

#
400
HEIGHT =
#

HEIGHT

#
400
CHEAT_IMMORTAL =
#

CHEAT_IMMORTAL

Here are some game cheats which you can set.

#
false

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#i_conceal_whatObject

can contain m, 0, 1, 2 and so on.



25
26
27
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 25

def i_conceal_what
  @i_conceal_what
end

Class Method Details

.runObject

#

GamesAndRpgParadise::GUI::Gtk::Minesweeper::MinesweeperGameModule.run

#


415
416
417
418
419
420
421
422
423
424
425
426
427
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 415

def self.run
  require 'gtk_paradise/run'
  _ = ::GamesAndRpgParadise::GUI::Gtk::Minesweeper::MinesweeperGame.new
  r = ::Gtk.run
  r << _
  r.set_size_request(
    _.width?,
    _.height?
  )
  r.add_shortcut(:r, 'click_restart_button', :alt)
  r.automatic_title
  r.top_left_then_run
end

Instance Method Details

#array_mine_fields?Boolean Also known as: array_mine_fields

#

array_mine_fields?

#

Returns:

  • (Boolean)


351
352
353
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 351

def array_mine_fields?
  @array_mine_fields
end

#become_immortalObject

#

become_immortal

#


236
237
238
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 236

def become_immortal
  @cheat_immortal = true
end

#border_size?Boolean

#

border_size?

#

Returns:

  • (Boolean)


119
120
121
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 119

def border_size?
  2
end

#check_for_empty_fields(x, y) ⇒ Object

#

check_for_empty_fields

#


358
359
360
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 358

def check_for_empty_fields(x,y)
  check_for_surrounding_blanks(x, y)
end

#check_for_surrounding_blanks(x_coord, y_coord) ⇒ Object

#

check_for_surrounding_blanks

#


365
366
367
368
369
370
371
372
373
374
375
376
377
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 365

def check_for_surrounding_blanks(x_coord, y_coord)
  @grid_placer.return_adjacent_grids( [x_coord, y_coord] ).each { |array_coord|
    mine = find_mine_field_in_array(array_coord.first.to_s, array_coord[1].to_s)
    case mine.i_conceal_what
    when '0'
      mine.click_me
    else
      if mine.i_display_what == 'flag'
        # pass through
      end
    end
  }
end

#click_restart_buttonObject

#

click_restart_button

#


243
244
245
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 243

def click_restart_button
  @button_restart.signal_emit(:clicked)
end

#connect_skeletonObject

#

connect_skeleton

#


250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 250

def connect_skeleton
  @alignment = gtk_alignment(0.15, 0.15, 0.15, 0.15)
  @alignment.set_padding(2,1,2,1)
  vbox = gtk_vbox

  hbox_top = gtk_hbox
  hbox_top.pack_start(@label_how_many_mines, expand: false, fill: true, padding: 3)
  hbox_top.maximal(@smiley_face, 1)

  vbox.maximal(hbox_top,6)
  vbox.maximal(@fixed_mine_field,2)

  hbox = create_paned_hbox(@button_restart, @button_quit)
  vbox.pack_start(hbox,expand: false, fill: true)

  _ = create_paned_hbox(@button_check)
  vbox.pack_start(_,expand: false, fill: true)

  @alignment.add(vbox)
  add(@alignment)
  show_all
end

#create_a_new_grid_placerObject

#

create_a_new_grid_placer

Creates a new GridPlacerClass

#


341
342
343
344
345
346
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 341

def create_a_new_grid_placer
  @grid_placer = ::GamesAndRpgParadise::Minesweeper::GridPlacer.new(
                   ::GamesAndRpgParadise::Minesweeper::DIMENSION,
                   @how_many_mines_on_gamemap
                 ) # for the underlying layout
end

#create_buttonsObject

#

create_buttons

#


227
228
229
230
231
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 227

def create_buttons
  @button_restart = create_new_coloured_button('RestartGame_slateblue')
  @button_restart.on_clicked { restart_the_game }
  @button_quit = create_new_coloured_button('QuitGame_slateblue', :this_is_a_quit_button)
end

#create_checkboxObject

#

create_checkbox

Add the button for “immortality”.

#


278
279
280
281
282
283
284
285
286
287
288
289
290
291
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 278

def create_checkbox
  @button_check = gtk_check_button('Immortal', false)
  @button_check.set_active(false) # not selected
  @button_check.hint =
    'Having this check button active means that you will not '\
    'die. This may be useful for testing purposes.'
  @button_check.on_toggled { |widget|
    if widget.active?
      become_immortal
    elsif not widget.active?
      @cheat_immortal = false
    end
  }
end

#create_fixedObject

#

create_fixed

Our MineField.

#


314
315
316
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 314

def create_fixed
  @fixed_mine_field = gtk_fixed
end

#create_labelsObject

#

create_labels

#


188
189
190
191
192
193
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 188

def create_labels
  @label_how_many_mines = label(
    @how_many_mines_on_gamemap.to_s+" Mines are\non the field."
  )
  @label_how_many_mines.make_bold
end

#create_new_coloured_button(use_this_title = 'Hello World', is_it_a_quit_button = false) ⇒ Object

#

create_new_coloured_button

#


217
218
219
220
221
222
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 217

def create_new_coloured_button(
    use_this_title      = 'Hello World',
    is_it_a_quit_button = false
  )
  gtk_coloured_button(use_this_title, is_it_a_quit_button)
end

#create_skeletonObject

#

create_skeleton

#


328
329
330
331
332
333
334
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 328

def create_skeleton
  create_labels
  create_a_new_grid_placer
  create_buttons
  create_checkbox
  create_fixed
end

#favicon?Boolean

#

favicon?

#

Returns:

  • (Boolean)


126
127
128
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 126

def favicon?
  ::GamesAndRpgParadise::GUI::Gtk::Minesweeper.image_dir+'symbols/mine.png'
end

#find_mine_field_in_array(x_coord, y_coord) ⇒ Object

#

find_mine_field_in_array

searches our array for the proper entry. Returns our mine field object.

#


135
136
137
138
139
140
141
142
143
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 135

def find_mine_field_in_array(
    x_coord, y_coord
  )
  @array_mine_fields.each { |mine|
    if x_coord.to_s == mine.x.to_s
      return mine if y_coord.to_s == mine.y.to_s
    end
  }
end

#game_over?Boolean Also known as: game_over

#

game_over?

#

Returns:

  • (Boolean)


305
306
307
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 305

def game_over?
  @game_over
end

#grid_placer?Boolean Also known as: grid_placer

#

grid_placer?

#

Returns:

  • (Boolean)


382
383
384
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 382

def grid_placer?
  @grid_placer
end

#immortal_mode?Boolean

#

immortal_mode?

#

Returns:

  • (Boolean)


210
211
212
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 210

def immortal_mode?
  @cheat_immortal
end

#initialize(how_many_mines_on_gamemap = 15, be_verbose = true, run_already = true) ⇒ Object

#

initialize

#


60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 60

def initialize(
    how_many_mines_on_gamemap = 15,
    be_verbose                = true,
    run_already               = true
  )
  super(:vertical)
  reset
  @how_many_mines_on_gamemap = how_many_mines_on_gamemap
  if be_verbose
    efancy "Using #{@how_many_mines_on_gamemap} mines."
  end
  @smiley_face = ::GamesAndRpgParadise::GUI::Gtk::Minesweeper::SmileyFace.new(self) # our smiley image
  @n_mines = how_many_mines_on_gamemap
  run if run_already
end

#n_mines?Boolean Also known as: n_mines

#

n_mines?

#

Returns:

  • (Boolean)


181
182
183
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 181

def n_mines?
  @n_mines
end

#padding?Boolean

#

padding?

#

Returns:

  • (Boolean)


321
322
323
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 321

def padding?
  8
end

#populate_game_mapObject

#

populate_game_map

This will populate our game map. Use only this method when populating the game map.

#


151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 151

def populate_game_map
  # @grid_placer.display_game_map
  1.upto(@grid_placer.grid_dimension) { |i|
    1.upto(@grid_placer.grid_dimension) { |index_inner|
      # puts i.to_s+index_inner.to_s+' '+@grid_placer.hash_grid[i.to_s][index_inner.to_s]
      # inner value can contain m,0,1,2 and so on.
      inner_value = @grid_placer.hash_grid[i.to_s][index_inner.to_s]
      mine = ::GamesAndRpgParadise::GUI::Gtk::Minesweeper::MineField.new(
        inner_value,
        self,
        i.to_i, 
        index_inner.to_i
      )
      mine.set_new_image # conceal by setting new pseudo image
      @array_mine_fields << mine # keeps our mine fields
      # =================================================================== #
      # We must reverse Y Coordinate because Gtk::Fixed counts this way.
      # =================================================================== #
      @fixed_mine_field.put(
        mine,
        i.to_i * ::GamesAndRpgParadise::Minesweeper::BUTTON_BASE_DIMENSION,
        (@grid_placer.grid_dimension - index_inner.to_i) * ::GamesAndRpgParadise::Minesweeper::BUTTON_BASE_DIMENSION
      )
    }
  }
end

#resetObject

#

reset

This method will reset all relevant flags and revert to the old colour as well.

#


82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 82

def reset
  reset_the_internal_variables
  set_use_this_font(:dejavu_condensed_25)
  # ======================================================================= #
  # === @configuration
  # ======================================================================= #
  @configuration = [true, __dir__, NAMESPACE]
  # ======================================================================= #
  # === @title
  # ======================================================================= #
  @title  = TITLE
  # ======================================================================= #
  # === @width
  # ======================================================================= #
  set_width(WIDTH)
  # ======================================================================= #
  # === @height
  # ======================================================================= #
  set_height(HEIGHT)
  # ======================================================================= #
  # === @array_mine_fields
  # ======================================================================= #
  @array_mine_fields = [] # This array contains all of our mines.
  # ======================================================================= #
  # === @game_over
  # ======================================================================= #
  @game_over = false
  # ======================================================================= #
  # === @cheat_immortal
  # ======================================================================= #
  @cheat_immortal = CHEAT_IMMORTAL
  use_project_css_file
end

#restart_the_gameObject

#

restart_the_game

This method will restart the game, so it can be played anew/again.

#


391
392
393
394
395
396
397
398
399
400
401
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 391

def restart_the_game
  # First lets clear our mines:
  create_a_new_grid_placer
  populate_game_map
  @array_mine_fields.each { |mine|
    mine.i_conceal_what = @grid_placer.hash_grid[mine.x_coordinate.to_s][mine.y_coordinate.to_s]
    mine.reset
  }
  @game_over = false
  @smiley_face.set_happy_image
end

#reveal_allObject

#

reveal_all

Reveal everything with this method.

#


298
299
300
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 298

def reveal_all
  @array_mine_fields.each { |mine| mine.do_reveal }
end

#runObject

#

run

#


406
407
408
409
410
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 406

def run
  create_skeleton
  populate_game_map
  connect_skeleton
end

#set_game_overObject

#

set_game_over

Sets that the game is over.

#


200
201
202
203
204
205
# File 'lib/games_and_rpg_paradise/gui/shared_code/minesweeper/minesweeper_game_module.rb', line 200

def set_game_over
  unless immortal_mode?
    @smiley_face.set_unhappy_image
    @game_over = true
  end
end