a_maze_ing 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7391d4bf4b8f310472a2f81b01986bb1b4ba20aa
4
- data.tar.gz: 65c1d69c552717d4f9781341f30b3e9221951df9
3
+ metadata.gz: e82ad01583c85bbed0d72e448782de05d0e83a16
4
+ data.tar.gz: 6bcb06478a9d7ff899fba4970ca12282c24543c9
5
5
  SHA512:
6
- metadata.gz: 729b9aea9602cbba76e667f4e28825a65d29c2caf1f1155519f8e1c18ebbbd0c8d08746a5b7df109c295b7bd23452ccfa2bf531dcbfd3ab71658aaf17c93f60b
7
- data.tar.gz: a7af82ca54fde9040cad68e5f8da9b3fe0d0144bab6c5497c9dba732e60ee950545532f099ad8c08f8b1165cc3556c8557c50a0c3608a5941fd49923a015a9fe
6
+ metadata.gz: 39deed34083af90d8a56d15a0e107aa6440ff60af2c9d8fa6118018e83a97e78679dbc1a8d8e3b17b38af73085e080c48b1de345d1246637a53d2258a7584ec3
7
+ data.tar.gz: 737d15e2dfd466083f3180ce4c8e242d10b33ea28a92a0137a88f60fdf95af4b195809beda395eb0ba47a72be1ad4fb092ff5a4db42d9ef218c4ceb35b9a2e8f
data/README.md CHANGED
@@ -1,11 +1,15 @@
1
1
  # AMazeIng
2
2
 
3
- This is a small video game about maze, create on Gosu library. You need to find the way to specific point in the maze to win the game
3
+ This is a small video game about maze, create on Gosu library. Solve the maze yourself or play with friend.
4
4
 
5
- Classic mode | Multiplayer mode
5
+ Classic mode | Multiplayer mode
6
6
  :-------------------------:|:-------------------------:
7
7
  ![](./images/classic.jpg?raw=true) | ![](./images/multiplayer.jpg?raw=true)
8
8
 
9
+ Annoying Friend mode |
10
+ :-------------------------:|:-------------------------:
11
+ ![](./images/annoying_friend.jpg?raw=true) |
12
+
9
13
  ## Requirements
10
14
 
11
15
  This gem needs [Gosu](https://www.libgosu.org/) installed on your machine in order to render graphics
@@ -38,9 +42,13 @@ or
38
42
 
39
43
  $ a_maze_ing classic
40
44
 
41
- To play in multiplayer mode run the following command:
45
+ To play in Multiplayer mode run the following command:
46
+
47
+ $ a_maze_ing m
48
+
49
+ To play in Annoying Friend mode run the following command:
42
50
 
43
- $ a_maze_ing multiplayer
51
+ $ a_maze_ing af
44
52
 
45
53
  Global Options:
46
54
 
Binary file
data/images/classic.jpg CHANGED
Binary file
Binary file
@@ -13,13 +13,13 @@ module AMazeIng
13
13
 
14
14
  def cell_index(i, j, cells_length)
15
15
  if i < 0 || j < 0 || i > $cols-1 || j > $rows-1
16
- return cells_length
16
+ return cells_length # cause the cell (neighbor) equal nil
17
17
  else
18
18
  return i + j * $cols
19
19
  end
20
20
  end
21
21
 
22
- def check_neigh_bors(cells)
22
+ def get_random_neighbor(cells)
23
23
  @neigh_bors = Array.new
24
24
 
25
25
  top = cells[cell_index(cell_index_x, cell_index_y - 1, cells.length)]
@@ -20,6 +20,7 @@ module AMazeIng
20
20
  @full_screen = true
21
21
  }
22
22
 
23
+
23
24
  command :classic do |c|
24
25
  c.syntax = 'a_maze_ing classic [options]'
25
26
  c.description = 'Classic mode, difficulty increase with level'
@@ -30,12 +31,23 @@ module AMazeIng
30
31
 
31
32
  command :multiplayer do |c|
32
33
  c.syntax = 'a_maze_ing multiplayer [options]'
33
- c.description = 'Multiplayer mode, two player race to the target, player 2 use W/S/A/D key to move up/down/left/right'
34
+ c.description = 'Multiplayer mode, two player race to the gate, player 2 use W/S/A/D key to move up/down/left/right'
34
35
  c.action do
35
36
  AMazeIng::GameWindow.new(@full_screen,2).show
36
37
  end
37
38
  end
38
-
39
+ alias_command :'m', :multiplayer
40
+
41
+
42
+ command :annoying_friend do |c|
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'
45
+ c.action do
46
+ AMazeIng::GameWindow.new(@full_screen,3).show
47
+ end
48
+ end
49
+ alias_command :'af', :annoying_friend, :'anfri', :'multiplayer2', :'multiplayer_2'
50
+
39
51
  run!
40
52
  end
41
53
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # credits to: http://en.wikipedia.org/wiki/Maze_generation_algorithm
2
+ # cGREENits to: http://en.wikipedia.org/wiki/Maze_generation_algorithm
3
3
 
4
4
  require 'gosu'
5
5
  include Gosu
@@ -20,20 +20,28 @@ module AMazeIng
20
20
  if @game_mode == 1
21
21
  @infor = Infor.new
22
22
  elsif @game_mode == 2
23
- @infor = Infor.new(Color::RED, Color::YELLOW)
23
+ @infor = Infor.new(Color::GREEN, Color::AQUA)
24
+ elsif @game_mode == 3
25
+ @infor = Infor.new(Color::GREEN, Color::RED)
24
26
  end
25
27
 
26
28
  end
27
29
 
28
30
  def new_round
31
+ $rows += 2
32
+ $cols += 2
29
33
  @maze = Maze.new
30
34
  @maze.generate_maze
31
35
  if @game_mode == 1
32
- @player = Player.new(1, 0, Color::RED)
36
+ @player = Player.new(1, 0, Color::GREEN)
33
37
  elsif @game_mode == 2
34
- @player = Player.new(1, 0, Color::RED)
35
- @player_2 = Player.new(0, 1, Color::YELLOW)
38
+ @player = Player.new(1, 0, Color::GREEN)
39
+ @player_2 = Player.new(0, 1, Color::AQUA)
40
+ elsif @game_mode == 3
41
+ @player = Player.new(1, 0, Color::GREEN)
42
+ @player_2 = Player.new($cols-1, 0, Color::RED)
36
43
  end
44
+
37
45
  end
38
46
 
39
47
  def draw_target(cell)
@@ -41,16 +49,14 @@ module AMazeIng
41
49
  cell_index_y = cell.cell_index_y
42
50
  x = (cell_index_x * $cell_size) + $cell_size/2 - $player_size/2
43
51
  y = (cell_index_y * $cell_size) + $cell_size/2 - $player_size/2
44
- draw_quad x, y, Color::GREEN,
45
- x+$player_size, y, Color::GREEN,
46
- x+$player_size, y+$player_size, Color::GREEN,
47
- x, y+$player_size, Color::GREEN
52
+ draw_quad x, y, Color::WHITE,
53
+ x+$player_size, y, Color::WHITE,
54
+ x+$player_size, y+$player_size, Color::WHITE,
55
+ x, y+$player_size, Color::WHITE
48
56
  end
49
57
 
50
58
  def check_for_finish(player)
51
59
  if player.cell_index_x == $cells[-1].cell_index_x && player.cell_index_y == $cells[-1].cell_index_y
52
- $rows += 2
53
- $cols += 2
54
60
  new_round
55
61
  @infor.level += 1
56
62
  return true
@@ -59,14 +65,22 @@ module AMazeIng
59
65
  end
60
66
  end
61
67
 
68
+ def check_for_collision(player_1, player_2)
69
+ if player_2.cell_index_x == player_1.cell_index_x and player_2.cell_index_y == player_1.cell_index_y
70
+ new_round
71
+ @infor.level += 1
72
+ return true
73
+ else
74
+ return false
75
+ end
76
+ end
77
+
62
78
  def update
63
79
 
64
80
  if @game_mode == 1
65
81
  check_for_finish(@player)
66
82
  @player.move
67
- end
68
-
69
- if @game_mode == 2
83
+ elsif @game_mode == 2
70
84
  if check_for_finish(@player)
71
85
  @infor.player_1_point += 1
72
86
  end
@@ -75,7 +89,17 @@ module AMazeIng
75
89
  @infor.player_2_point += 1
76
90
  end
77
91
  @player_2.move
92
+ elsif @game_mode == 3
93
+ if check_for_finish(@player)
94
+ @infor.player_1_point += 1
95
+ end
96
+ @player.move
97
+ if check_for_collision(@player, @player_2)
98
+ @infor.player_2_point += 1
99
+ end
100
+ @player_2.move
78
101
  end
102
+
79
103
  @infor.update
80
104
  end
81
105
 
@@ -88,7 +112,7 @@ module AMazeIng
88
112
  end
89
113
  end
90
114
  @player.draw
91
- @player_2.draw if @game_mode == 2
115
+ @player_2.draw if @game_mode == 2 or @game_mode == 3
92
116
  @infor.draw
93
117
  draw_target($cells[-1])
94
118
  end
@@ -121,7 +145,7 @@ module AMazeIng
121
145
  end
122
146
 
123
147
  # control keys for player 2
124
- if @game_mode == 2
148
+ if @game_mode == 2 or @game_mode == 3
125
149
 
126
150
  if id == Gosu::KB_A
127
151
  check_available_move(3, @player_2)
@@ -31,7 +31,7 @@ module AMazeIng
31
31
  @stack.push(@current_cell)
32
32
 
33
33
  while @stack.length > 0 do
34
- next_cell = @current_cell.check_neigh_bors($cells)
34
+ next_cell = @current_cell.get_random_neighbor($cells)
35
35
  if next_cell
36
36
  remove_walls(@current_cell, next_cell)
37
37
  next_cell.visited = true
@@ -43,28 +43,40 @@ module AMazeIng
43
43
  @current_cell = @stack.pop
44
44
  end
45
45
  end
46
+ remove_extra_walls
46
47
  end
47
48
 
48
49
  def remove_walls(current_cell, next_cell)
49
- magic_number = next_cell.cell_index_x - current_cell.cell_index_x
50
- if magic_number == 1
51
- # next cell is on the right
52
- current_cell.walls[1] = next_cell.walls[3] = false
53
- elsif magic_number == -1
54
- # next cell is on the left
55
- current_cell.walls[3] = next_cell.walls[1] = false
56
- elsif magic_number == 0
57
- # next cell is either on top or bottom
58
- magic_number = next_cell.cell_index_y - current_cell.cell_index_y
50
+ if next_cell != nil
51
+ magic_number = next_cell.cell_index_x - current_cell.cell_index_x
59
52
  if magic_number == 1
60
- #next cell is bottom
61
- current_cell.walls[2] = next_cell.walls[0] = false
62
- elsif magic_number ==-1
63
- #next cell is on top
64
- current_cell.walls[0] = next_cell.walls[2] = false
53
+ # next cell is on the right
54
+ current_cell.walls[1] = next_cell.walls[3] = false
55
+ elsif magic_number == -1
56
+ # next cell is on the left
57
+ current_cell.walls[3] = next_cell.walls[1] = false
58
+ elsif magic_number == 0
59
+ # next cell is either on top or bottom
60
+ magic_number = next_cell.cell_index_y - current_cell.cell_index_y
61
+ if magic_number == 1
62
+ #next cell is bottom
63
+ current_cell.walls[2] = next_cell.walls[0] = false
64
+ elsif magic_number ==-1
65
+ #next cell is on top
66
+ current_cell.walls[0] = next_cell.walls[2] = false
67
+ end
65
68
  end
66
69
  end
67
70
  end
68
71
 
72
+ def remove_extra_walls
73
+ a_count_number = $cells.length/2/5
74
+ while a_count_number > 0 do
75
+ cell_index = rand(0..$cells.length/2)
76
+ # wall_index = rand(0..3)
77
+ remove_walls($cells[cell_index], $cells[cell_index+1])
78
+ a_count_number -= 1
79
+ end
80
+ end
69
81
  end
70
82
  end
@@ -1,3 +1,3 @@
1
1
  module AMazeIng
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: a_maze_ing
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - at-cuongtran
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-20 00:00:00.000000000 Z
11
+ date: 2017-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -85,6 +85,7 @@ files:
85
85
  - bin/a_maze_ing
86
86
  - bin/console
87
87
  - bin/setup
88
+ - images/annoying_friend.jpg
88
89
  - images/classic.jpg
89
90
  - images/multiplayer.jpg
90
91
  - lib/a_maze_ing.rb