a_maze_ing 0.5.2 → 0.5.3

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: 358455708afc8984eb3c53cd4a2379ff01163ad6
4
- data.tar.gz: 787780722056a3509e45ac5cdea12ab500048310
3
+ metadata.gz: ac2d90d1b404af1a23d3c15aa56ba2b43980a053
4
+ data.tar.gz: 16c989a33c190aa047ea29d4e3e1a4edac58678d
5
5
  SHA512:
6
- metadata.gz: 051fbc907631bd8fa8320d595347d1fd80e09aab014cb088fdd68073b112043dfc771efe33bfe86b5c5d467641adba2fa5cf456cdaee3dd3d5570d6f19d7f7fc
7
- data.tar.gz: 3c5570b4297e01c6e05990287235be693cca65bcf14f1b1c895b678ce06e753931c0a3418bed5b6d7e20050ac6b80a36c9cc7abe64db174b69e6044f3e25355b
6
+ metadata.gz: 2869dfccd82fe6eb394db5e1b2c80a79d97a35de8263baf0405f0a7fe611383ffc58aa8ae89d84fb3ae7f0b1d85e5a1f0560e968e26d390d648b2aa3d984e880
7
+ data.tar.gz: b61f4b49474ef300ea74daeed71aad0eac7ff8a17910cbc2e3c106447e3b1aecfce1aae3c2a5c0c3462197c547756eb570284e3c90651704d1cb22d2d1c7ef89
@@ -11,9 +11,16 @@ module AMazeIng
11
11
  @is_current = false
12
12
  end
13
13
 
14
+ # cell_index is the index in cells array
15
+ # cell_index_x and cell_index_y are index of cells in vitual grid
16
+
17
+ # Get cell_index by cell_index_x and cell_index_y
18
+ # if the given indexes is invalid (outside the maze)
19
+ # it will return cells_length,
20
+ # which will cause the returned cell (neighbor) to be equal to nil
14
21
  def cell_index(i, j, cells_length)
15
22
  if i < 0 || j < 0 || i > $cols-1 || j > $rows-1
16
- return cells_length # cause the cell (neighbor) equal nil
23
+ return cells_length # cause the cell to be (neighbor) equal to nil
17
24
  else
18
25
  return i + j * $cols
19
26
  end
@@ -22,10 +29,10 @@ module AMazeIng
22
29
  def get_random_neighbor(cells)
23
30
  @neigh_bors = Array.new
24
31
 
25
- top = cells[cell_index(cell_index_x, cell_index_y - 1, cells.length)]
26
- right = cells[cell_index(cell_index_x + 1, cell_index_y, cells.length)]
27
- bottom = cells[cell_index(cell_index_x, cell_index_y + 1, cells.length)]
28
- left = cells[cell_index(cell_index_x - 1, cell_index_y, cells.length)]
32
+ top = cells[cell_index(cell_index_x, cell_index_y - 1, cells.length)]
33
+ right = cells[cell_index(cell_index_x + 1, cell_index_y, cells.length)]
34
+ bottom = cells[cell_index(cell_index_x, cell_index_y + 1, cells.length)]
35
+ left = cells[cell_index(cell_index_x - 1, cell_index_y, cells.length)]
29
36
 
30
37
  if top
31
38
  if !top.visited
@@ -65,23 +72,23 @@ module AMazeIng
65
72
  y = @cell_index_y * cell_size
66
73
 
67
74
  if @walls[0]
68
- draw_line x, y, color,
69
- x + cell_size, y, color
75
+ draw_line x, y, color,
76
+ x + cell_size, y, color
70
77
  end
71
78
 
72
79
  if @walls[1]
73
- draw_line x + cell_size, y, color,
80
+ draw_line x + cell_size, y, color,
74
81
  x + cell_size, y + cell_size, color
75
82
  end
76
83
 
77
84
  if @walls[2]
78
85
  draw_line x + cell_size, y + cell_size, color,
79
- x, y + cell_size, color
86
+ x, y + cell_size, color
80
87
  end
81
88
 
82
89
  if @walls[3]
83
- draw_line x, y + cell_size, color,
84
- x, y, color
90
+ draw_line x, y + cell_size, color,
91
+ x, y, color
85
92
  end
86
93
  end
87
94
  end
@@ -41,7 +41,7 @@ module AMazeIng
41
41
 
42
42
  command :annoying_friend do |c|
43
43
  c.syntax = 'a_maze_ing anfri [options]'
44
- c.description = 'feuded friend mode, player 1 try to get to the gate while the player 2(annoying friend) try to catch him'
44
+ c.description = 'Annoying friend mode, player 1 try to get to the gate while the player 2(annoying friend) try to catch him'
45
45
  c.action do
46
46
  AMazeIng::GameWindow.new(@full_screen,3).show
47
47
  end
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # cGREENits to: http://en.wikipedia.org/wiki/Maze_generation_algorithm
3
2
 
4
3
  require 'gosu'
5
4
  include Gosu
@@ -8,15 +7,28 @@ require "observer"
8
7
  module AMazeIng
9
8
  DIMENSION = 700
10
9
  SIDE_BAR = 180
10
+ ROWS = COLS = 10
11
11
  PLAYER_COLOR_PRIMARY = Color::GREEN
12
12
  PLAYER_COLOR_SECONDARY = Color::AQUA
13
13
  PLAYER_COLOR_ANGRY = Color::RED
14
+
15
+ # the rate of character speed, in pixel,
16
+ # the higher step rate the slower character will move
17
+ STEP_RATE = 4
18
+
19
+
20
+ # Change this if you don't want it to be at bottom right
21
+ TARGET_CELL_INDEX_X = COLS - 1
22
+ TARGET_CELL_INDEX_Y = ROWS - 1
23
+
14
24
  class GameWindow < Window
15
- $rows = $cols = 10
25
+ $rows = $cols = ROWS
16
26
  def initialize(full_screen, game_mode)
17
27
  @game_mode = game_mode
18
28
  super DIMENSION + SIDE_BAR, DIMENSION, full_screen, 30
19
29
  self.caption = "Maze"
30
+
31
+
20
32
 
21
33
  #---------------------------------------------------------------------------------#
22
34
  # create code block (update, player_draw and new_player) for different game mode #
@@ -88,7 +100,11 @@ module AMazeIng
88
100
  @infor = Infor.new(PLAYER_COLOR_PRIMARY, PLAYER_COLOR_ANGRY)
89
101
  end
90
102
 
91
- end
103
+ @target_x = (TARGET_CELL_INDEX_X * $cell_size) + $cell_size/2 - $player_size/2
104
+ @target_y = (TARGET_CELL_INDEX_Y * $cell_size) + $cell_size/2 - $player_size/2
105
+
106
+ end # End initialize function
107
+
92
108
 
93
109
  def new_round
94
110
  $rows += 2
@@ -99,14 +115,10 @@ module AMazeIng
99
115
  end
100
116
 
101
117
  def draw_target(cell)
102
- cell_index_x = cell.cell_index_x
103
- cell_index_y = cell.cell_index_y
104
- x = (cell_index_x * $cell_size) + $cell_size/2 - $player_size/2
105
- y = (cell_index_y * $cell_size) + $cell_size/2 - $player_size/2
106
- draw_quad x, y, Color::WHITE,
107
- x+$player_size, y, Color::WHITE,
108
- x+$player_size, y+$player_size, Color::WHITE,
109
- x, y+$player_size, Color::WHITE
118
+ draw_quad @target_x, @target_y, Color::WHITE,
119
+ @target_x + $player_size, @target_y, Color::WHITE,
120
+ @target_x + $player_size, @target_y + $player_size, Color::WHITE,
121
+ @target_x, @target_y + $player_size, Color::WHITE
110
122
  end
111
123
 
112
124
  def check_for_finish(player)
@@ -4,6 +4,7 @@ module AMazeIng
4
4
  def initialize(*player_color)
5
5
  @player_color = player_color
6
6
 
7
+ # This class will renders information of the game, like points and level
7
8
 
8
9
  #---------------------------------------------------------------------------------#
9
10
  # create code block (initial, update and draw) for different game mode #
@@ -15,6 +16,7 @@ module AMazeIng
15
16
 
16
17
  @level = 1
17
18
  @level_image = Gosu::Image.from_text @level.to_s, 36
19
+
18
20
  @label = 'LEVEL'
19
21
  @label_image = Gosu::Image.from_text @label, 40
20
22
 
@@ -1,23 +1,33 @@
1
+ # Credits to: http://en.wikipedia.org/wiki/Maze_generation_algorithm
2
+ # I use Depth-first search recursive backtracking algorithm
3
+ # You can find the information in the wiki link
4
+
1
5
  module AMazeIng
2
6
  class Maze
3
7
 
8
+ # This is very important.
9
+ # With this calculated dimension
10
+ # the character will be exactly at the pixel you want it to be
4
11
  def check_dimension
5
- until $dimension/$cols % 4 == 0
12
+ until $dimension/$cols % STEP_RATE == 0
6
13
  $dimension -= 1
7
14
  end
8
15
  end
9
16
 
10
17
  def generate_maze
18
+
19
+ # set initial specifications for the maze
11
20
  $dimension = DIMENSION
12
21
  check_dimension
13
22
  $cell_size = $dimension/$cols
14
- $speed_per_tick = $cell_size/4
23
+ $speed_per_tick = $cell_size/STEP_RATE
15
24
  $player_size = 0.5 * $cell_size
16
25
 
17
26
  $cells = Array.new
18
27
  @stack = Array.new
19
28
 
20
-
29
+ # I use one dimensional array to store all the cell...
30
+ # yeah, should not do that... feel regret now
21
31
  $rows.times do |row_index|
22
32
  $cols.times do |col_index|
23
33
  cell = Cell.new(col_index, row_index)
@@ -25,11 +35,15 @@ module AMazeIng
25
35
  end
26
36
  end
27
37
 
38
+ # Ok, here is where the heavy work begin
39
+ # Let set visited for the top left cell, where we start
28
40
  $cells[0].visited = true
29
41
  @current_cell = $cells[0]
30
42
  # @current_cell.is_current = true
31
43
  @stack.push(@current_cell)
32
44
 
45
+ # This is the same as "While there are unvisited cells"
46
+ # at least, same result, see the wiki page for more
33
47
  while @stack.length > 0 do
34
48
  next_cell = @current_cell.get_random_neighbor($cells)
35
49
  if next_cell
@@ -43,37 +57,42 @@ module AMazeIng
43
57
  @current_cell = @stack.pop
44
58
  end
45
59
  end
60
+
61
+ # Remove more random walls to make more available way
46
62
  remove_extra_walls
47
63
  end
48
64
 
49
65
  def remove_walls(current_cell, next_cell)
50
66
  if next_cell != nil
67
+
68
+ # yeah I'd like to call it magic_number
69
+ # it show me the relative position of two cell
51
70
  magic_number = next_cell.cell_index_x - current_cell.cell_index_x
52
- if magic_number == 1
53
- # next cell is on the right
71
+
72
+ if magic_number == 1 # next cell is on the right
54
73
  current_cell.walls[1] = next_cell.walls[3] = false
55
- elsif magic_number == -1
56
- # next cell is on the left
74
+
75
+ elsif magic_number == -1 # next cell is on the left
57
76
  current_cell.walls[3] = next_cell.walls[1] = false
58
- elsif magic_number == 0
59
- # next cell is either on top or bottom
77
+
78
+ elsif magic_number == 0 # next cell is either on top or bottom
60
79
  magic_number = next_cell.cell_index_y - current_cell.cell_index_y
61
- if magic_number == 1
62
- #next cell is bottom
80
+
81
+ if magic_number == 1 #next cell is bottom
63
82
  current_cell.walls[2] = next_cell.walls[0] = false
64
- elsif magic_number ==-1
65
- #next cell is on top
83
+
84
+ elsif magic_number ==-1#next cell is on top
66
85
  current_cell.walls[0] = next_cell.walls[2] = false
67
86
  end
68
87
  end
69
88
  end
70
89
  end
71
90
 
91
+ # For now, it almost doesn't remove horizontal walls
72
92
  def remove_extra_walls
73
93
  a_count_number = $cells.length/2/5
74
94
  while a_count_number > 0 do
75
95
  cell_index = rand(0..$cells.length/2)
76
- # wall_index = rand(0..3)
77
96
  remove_walls($cells[cell_index], $cells[cell_index+1])
78
97
  a_count_number -= 1
79
98
  end
@@ -49,12 +49,13 @@ module AMazeIng
49
49
  def move
50
50
  if @is_moving
51
51
  if @x == @target_x && @y == @target_y
52
+
52
53
  # check for available path,
53
- # and ignore the the opposite of the LAST path
54
+ # and ignore the the opposite directions of the LAST path
54
55
  # cuz you don't wanna go back where you just left
55
56
  @path = check_for_path(@path == 0 ? 2:
56
- @path == 1 ? 3:
57
- @path == 2 ? 0: 1)
57
+ @path == 1 ? 3:
58
+ @path == 2 ? 0: 1)
58
59
  if @path != nil
59
60
  # set new player's cell index depend on "current @path"
60
61
  set_status(@path)
@@ -85,10 +86,10 @@ module AMazeIng
85
86
  end
86
87
 
87
88
  def draw
88
- draw_quad @x, @y, @color,
89
- @x+$player_size, @y, @color,
90
- @x+$player_size, @y+$player_size, @color,
91
- @x, @y+$player_size, @color
89
+ draw_quad @x, @y, @color,
90
+ @x + $player_size, @y, @color,
91
+ @x + $player_size, @y + $player_size, @color,
92
+ @x, @y + $player_size, @color
92
93
  end
93
94
  end
94
95
  end
@@ -1,3 +1,3 @@
1
1
  module AMazeIng
2
- VERSION = "0.5.2"
2
+ VERSION = "0.5.3"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: a_maze_ing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - at-cuongtran