maze-server 0.9.2 → 0.9.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 +4 -4
- data/.travis.yml +5 -0
- data/README.rdoc +2 -2
- data/lib/maze/game/maze_game.rb +16 -0
- data/lib/maze/game/maze_player.rb +3 -1
- data/lib/maze/server/maze_server.rb +11 -9
- data/lib/maze/server/version.rb +1 -1
- data/maze-server.gemspec +2 -0
- data/spec/maze/game/generator/maze_generator_spec.rb +1 -0
- data/spec/maze/game/generator/maze_walker_spec.rb +1 -0
- data/spec/maze/game/maze_game_spec.rb +26 -0
- data/spec/maze/game/maze_player_spec.rb +8 -0
- data/spec/maze/game/maze_spec.rb +1 -0
- data/spec/maze/server/maze_server_spec.rb +2 -1
- data/spec/spec_helper.rb +2 -0
- metadata +19 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 37e53347bcf52bf94d22d9cead52640ddaaf0a26
|
4
|
+
data.tar.gz: a81750259cea435728de7006e9296f087bc9b933
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6cea12fb5d013e2eeac9ea49c7ef91e1f53f6ad296352248b971c900c9192b412721be7ac8ed2f116c2f6e5f0526953445387d9f83286cd33813b5955fa04381
|
7
|
+
data.tar.gz: 6226a861f016fd42e4cff19b4d81863b71c2e5bc2afac6e63d986b5bcf78849750c7ec7ed69d5a089bf9d50a6f942582de4e3c87c005b56113bda3f149340d21
|
data/.travis.yml
ADDED
data/README.rdoc
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
= \Maze Server
|
2
2
|
{<img src="https://badge.fury.io/rb/maze-server.png" alt="Gem Version" />}[http://badge.fury.io/rb/maze-server]
|
3
|
-
{<img src="https://
|
3
|
+
{<img src="https://travis-ci.org/FuriKuri/maze-server.png?branch=master" alt="Build Status" />}[https://travis-ci.org/FuriKuri/maze-server]
|
4
4
|
{<img src="https://gemnasium.com/FuriKuri/maze-server.png"/>}[https://gemnasium.com/FuriKuri/maze-server]
|
5
5
|
{<img src="https://codeclimate.com/github/FuriKuri/maze-server.png" />}[https://codeclimate.com/github/FuriKuri/maze-server]
|
6
|
-
|
6
|
+
{<img src="https://coveralls.io/repos/FuriKuri/maze-server/badge.png" alt="Coverage Status" />}[https://coveralls.io/r/FuriKuri/maze-server]
|
7
7
|
== Installation
|
8
8
|
|
9
9
|
Add this line to your application's Gemfile:
|
data/lib/maze/game/maze_game.rb
CHANGED
@@ -21,6 +21,14 @@ class MazeGame
|
|
21
21
|
@players[client].move(orientation)
|
22
22
|
end
|
23
23
|
|
24
|
+
def moves
|
25
|
+
player_moves = {}
|
26
|
+
@players.each do |client, player|
|
27
|
+
player_moves[client.name] = player.moves
|
28
|
+
end
|
29
|
+
player_moves
|
30
|
+
end
|
31
|
+
|
24
32
|
def maze(client)
|
25
33
|
@maze.to_s_for_player(client.number, @players[client].current_position)
|
26
34
|
end
|
@@ -30,6 +38,14 @@ class MazeGame
|
|
30
38
|
puts @maze.to_s
|
31
39
|
end
|
32
40
|
|
41
|
+
def player_reached_exit?(client)
|
42
|
+
@maze.exit?(@players[client].current_position)
|
43
|
+
end
|
44
|
+
|
45
|
+
def all_players_reached_exit?
|
46
|
+
@players.reject{|client, _| player_reached_exit? client }.empty?
|
47
|
+
end
|
48
|
+
|
33
49
|
def reached_player_exit?
|
34
50
|
!winning_players.empty?
|
35
51
|
end
|
@@ -1,9 +1,10 @@
|
|
1
1
|
class MazePlayer
|
2
|
-
attr_reader :current_position, :name
|
2
|
+
attr_reader :current_position, :name, :moves
|
3
3
|
|
4
4
|
def initialize(current_position, name)
|
5
5
|
@current_position = current_position
|
6
6
|
@name = name
|
7
|
+
@moves = 0
|
7
8
|
end
|
8
9
|
|
9
10
|
def move(orientation)
|
@@ -39,5 +40,6 @@ class MazePlayer
|
|
39
40
|
def do_move(diff)
|
40
41
|
@current_position = [@current_position[0] + diff[0],
|
41
42
|
@current_position[1] + diff[1]]
|
43
|
+
@moves += 1
|
42
44
|
end
|
43
45
|
end
|
@@ -37,28 +37,30 @@ class MazeServer
|
|
37
37
|
end
|
38
38
|
|
39
39
|
def start_game
|
40
|
-
until @maze_game.
|
40
|
+
until @maze_game.all_players_reached_exit?
|
41
41
|
do_moves
|
42
42
|
end
|
43
|
-
puts @maze_game.
|
43
|
+
puts @maze_game.moves
|
44
44
|
confirm_clients
|
45
45
|
end
|
46
46
|
|
47
47
|
private
|
48
48
|
def do_moves
|
49
49
|
@players.each do |player_number, client|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
unless @maze_game.player_reached_exit?(client)
|
51
|
+
puts "Print maze for player #{client.name}"
|
52
|
+
puts @maze_game.maze(client)
|
53
|
+
next_moves = @maze_game.show_next_moves(client).map { |move| move.to_s }
|
54
|
+
client.socket.puts('{"operation" : "NEXT_MOVE", "messageId" : 2, "type": "REQUEST", "data" : ' + next_moves.to_s + '}')
|
55
|
+
move = JSON.parse(client.socket.gets.chop)['move'].to_sym
|
56
|
+
@maze_game.move(client, move)
|
57
|
+
end
|
56
58
|
end
|
57
59
|
end
|
58
60
|
|
59
61
|
def confirm_clients
|
60
62
|
@players.each do |player_number, client|
|
61
|
-
client.socket.puts('{"operation" : "WINNING_PLAYERS", "messageId" : 3, "type": "NOTIFICATION", "data" : ' + @maze_game.
|
63
|
+
client.socket.puts('{"operation" : "WINNING_PLAYERS", "messageId" : 3, "type": "NOTIFICATION", "data" : ' + @maze_game.moves.to_s + '}')
|
62
64
|
client_msg = client.socket.gets.chop
|
63
65
|
puts "#{client.name} send message #{client_msg}"
|
64
66
|
end
|
data/lib/maze/server/version.rb
CHANGED
data/maze-server.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative '../../../lib/maze/game/maze_game'
|
2
2
|
require_relative '../../../lib/maze/server/maze_server'
|
3
|
+
require_relative '../../../spec/spec_helper'
|
3
4
|
|
4
5
|
describe MazeGame do
|
5
6
|
before do
|
@@ -46,4 +47,29 @@ describe MazeGame do
|
|
46
47
|
Maze.any_instance.stub(:to_s_for_player).and_return('maze')
|
47
48
|
@maze_game.maze(@client).should == 'maze'
|
48
49
|
end
|
50
|
+
|
51
|
+
it 'returns the moves for each player' do
|
52
|
+
MazePlayer.any_instance.stub(:moves).and_return(3)
|
53
|
+
@maze_game.moves.should include('Player' => 3)
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'can say if player reached exit' do
|
57
|
+
MazePlayer.any_instance.stub(:current_position).and_return([1, 1])
|
58
|
+
@maze_game.reached_player_exit?.should be_true
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'can say if player is still in maze' do
|
62
|
+
MazePlayer.any_instance.stub(:current_position).and_return([1, 2])
|
63
|
+
@maze_game.reached_player_exit?.should be_false
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'can say if all players reached exit' do
|
67
|
+
MazePlayer.any_instance.stub(:current_position).and_return([1, 1])
|
68
|
+
@maze_game.all_players_reached_exit?.should be_true
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'can say if not all players reached exit' do
|
72
|
+
MazePlayer.any_instance.stub(:current_position).and_return([1, 2])
|
73
|
+
@maze_game.all_players_reached_exit?.should be_false
|
74
|
+
end
|
49
75
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require_relative '../../../lib/maze/game/maze_player'
|
2
|
+
require_relative '../../../spec/spec_helper'
|
2
3
|
|
3
4
|
describe MazePlayer do
|
4
5
|
before do
|
@@ -52,4 +53,11 @@ describe MazePlayer do
|
|
52
53
|
@player.move(:right)
|
53
54
|
@player.current_position.should == [6, 5]
|
54
55
|
end
|
56
|
+
|
57
|
+
it 'count the moves' do
|
58
|
+
@player.move(:right)
|
59
|
+
@player.move(:right)
|
60
|
+
@player.move(:right)
|
61
|
+
@player.moves.should == 3
|
62
|
+
end
|
55
63
|
end
|
data/spec/maze/game/maze_spec.rb
CHANGED
@@ -2,6 +2,7 @@ require_relative '../../../lib/maze/server/maze_server'
|
|
2
2
|
require_relative '../../../lib/maze/server/version'
|
3
3
|
require_relative '../../../lib/maze/game/maze_game'
|
4
4
|
require 'socket'
|
5
|
+
require_relative '../../../spec/spec_helper'
|
5
6
|
|
6
7
|
describe MazeServer do
|
7
8
|
|
@@ -30,7 +31,7 @@ describe MazeServer do
|
|
30
31
|
end
|
31
32
|
|
32
33
|
it 'handle a game' do
|
33
|
-
MazeGame.any_instance.stub(:
|
34
|
+
MazeGame.any_instance.stub(:all_players_reached_exit?).and_return(false, true)
|
34
35
|
response = double('response', :chop => '{"move" : "left"}')
|
35
36
|
socket = double('socket', :gets => response, :puts => nil)
|
36
37
|
Client.any_instance.stub(:socket).and_return(socket)
|
data/spec/spec_helper.rb
ADDED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: maze-server
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Theo Pack
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-12-
|
11
|
+
date: 2013-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -66,6 +66,20 @@ dependencies:
|
|
66
66
|
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: coveralls
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
69
83
|
description: Maze server
|
70
84
|
email:
|
71
85
|
- tf.pack@googlemail.com
|
@@ -75,6 +89,7 @@ extensions: []
|
|
75
89
|
extra_rdoc_files: []
|
76
90
|
files:
|
77
91
|
- .gitignore
|
92
|
+
- .travis.yml
|
78
93
|
- Gemfile
|
79
94
|
- LICENSE.txt
|
80
95
|
- README.rdoc
|
@@ -94,6 +109,7 @@ files:
|
|
94
109
|
- spec/maze/game/maze_player_spec.rb
|
95
110
|
- spec/maze/game/maze_spec.rb
|
96
111
|
- spec/maze/server/maze_server_spec.rb
|
112
|
+
- spec/spec_helper.rb
|
97
113
|
homepage: https://github.com/FuriKuri/maze-server
|
98
114
|
licenses:
|
99
115
|
- MIT
|
@@ -125,3 +141,4 @@ test_files:
|
|
125
141
|
- spec/maze/game/maze_player_spec.rb
|
126
142
|
- spec/maze/game/maze_spec.rb
|
127
143
|
- spec/maze/server/maze_server_spec.rb
|
144
|
+
- spec/spec_helper.rb
|