ruby_snake 0.0.5 → 0.1.0
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.
- data/lib/ruby_snake/client.rb +14 -27
- data/lib/ruby_snake/game.rb +17 -38
- data/lib/ruby_snake/server.rb +43 -20
- data/lib/ruby_snake/ui/two.rb +13 -24
- data/lib/ruby_snake/version.rb +1 -1
- metadata +2 -2
data/lib/ruby_snake/client.rb
CHANGED
@@ -6,36 +6,23 @@ module RubySnake
|
|
6
6
|
attr_accessor :message, :receive
|
7
7
|
|
8
8
|
def connect(host='127.0.0.1')
|
9
|
-
@message
|
9
|
+
@message ||= '0'
|
10
10
|
|
11
|
-
|
12
|
-
sleep 0.1
|
11
|
+
server = TCPSocket.new host, 2000
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
rescue => err
|
17
|
-
@message = '10'
|
18
|
-
break
|
19
|
-
end
|
13
|
+
server.send @message, 0
|
14
|
+
server_message = server.recv(4096)
|
20
15
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
break
|
32
|
-
when '3'
|
33
|
-
Game.lose
|
34
|
-
break
|
35
|
-
else
|
36
|
-
@message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
|
37
|
-
@receive = server_message.split(',').map(&:to_i).each_slice(2).to_a if server_message
|
38
|
-
end
|
16
|
+
case server_message
|
17
|
+
when '0'
|
18
|
+
@message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
|
19
|
+
when '1'
|
20
|
+
Game.win
|
21
|
+
when '2'
|
22
|
+
Game.lose
|
23
|
+
else
|
24
|
+
@message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
|
25
|
+
@receive = server_message.split(',').map(&:to_i).each_slice(2).to_a if server_message
|
39
26
|
end
|
40
27
|
end
|
41
28
|
end
|
data/lib/ruby_snake/game.rb
CHANGED
@@ -6,15 +6,16 @@ module RubySnake
|
|
6
6
|
# common
|
7
7
|
|
8
8
|
def start(role=nil)
|
9
|
-
self.role = role
|
9
|
+
self.role = role
|
10
10
|
@time_flag = Time.now.to_f
|
11
|
-
if role
|
12
|
-
|
11
|
+
if role.nil?
|
12
|
+
UI.draw
|
13
|
+
elsif role == 'server'
|
14
|
+
Server.start
|
13
15
|
elsif role == 'client'
|
14
|
-
|
16
|
+
get_host
|
17
|
+
UI::Two.draw
|
15
18
|
end
|
16
|
-
|
17
|
-
UI.draw
|
18
19
|
end
|
19
20
|
|
20
21
|
def choise_role
|
@@ -145,14 +146,14 @@ module RubySnake
|
|
145
146
|
end
|
146
147
|
|
147
148
|
def operation
|
148
|
-
@operation
|
149
|
+
@operation ||= RIGHT
|
149
150
|
end
|
150
151
|
|
151
152
|
def direction_opposite? o
|
152
|
-
return true if
|
153
|
-
return true if
|
154
|
-
return true if
|
155
|
-
return true if
|
153
|
+
return true if operation == UP && o == DOWN
|
154
|
+
return true if operation == DOWN && o == UP
|
155
|
+
return true if operation == LEFT && o == RIGHT
|
156
|
+
return true if operation == RIGHT && o == LEFT
|
156
157
|
end
|
157
158
|
|
158
159
|
def pause?
|
@@ -189,7 +190,7 @@ module RubySnake
|
|
189
190
|
end
|
190
191
|
|
191
192
|
def win!
|
192
|
-
role_class.message = '
|
193
|
+
role_class.message = '1'
|
193
194
|
Ncurses.nodelay window, false
|
194
195
|
UI::Two.draw_win
|
195
196
|
sleep 1
|
@@ -205,7 +206,6 @@ module RubySnake
|
|
205
206
|
end
|
206
207
|
|
207
208
|
def lose!
|
208
|
-
role_class.message = '2'
|
209
209
|
Ncurses.nodelay window, false
|
210
210
|
UI::Two.draw_lose
|
211
211
|
sleep 1
|
@@ -242,37 +242,16 @@ module RubySnake
|
|
242
242
|
!!self.role
|
243
243
|
end
|
244
244
|
|
245
|
-
def
|
246
|
-
|
247
|
-
puts 3 - i
|
248
|
-
sleep 1
|
249
|
-
end
|
245
|
+
def host
|
246
|
+
@host
|
250
247
|
end
|
251
248
|
|
252
|
-
def
|
249
|
+
def get_host
|
253
250
|
system 'clear'
|
254
|
-
|
255
|
-
puts 'Waiting for a connection...'
|
256
|
-
puts '=' * 40
|
257
|
-
Thread.new { Server.start }
|
258
|
-
loop do
|
259
|
-
sleep 0.2
|
260
|
-
if Server.message != '0'
|
261
|
-
countdown
|
262
|
-
break
|
263
|
-
end
|
264
|
-
end
|
265
|
-
end
|
266
|
-
|
267
|
-
def start_client_thread
|
268
|
-
host = connected_host
|
269
|
-
Thread.new { Client.connect host }
|
270
|
-
sleep 0.35
|
271
|
-
raise 'Connect failed' if Client.message == '10'
|
251
|
+
@host = connected_host
|
272
252
|
puts '=' * 40
|
273
253
|
puts "Connect to #{host}..."
|
274
254
|
puts '=' * 40
|
275
|
-
countdown
|
276
255
|
end
|
277
256
|
end
|
278
257
|
end
|
data/lib/ruby_snake/server.rb
CHANGED
@@ -9,28 +9,51 @@ module RubySnake
|
|
9
9
|
@message = '0'
|
10
10
|
|
11
11
|
server = TCPServer.new 2000
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
12
|
+
|
13
|
+
UI::Two.init_windows
|
14
|
+
Ncurses.nodelay UI::Two.window, true
|
15
|
+
|
16
|
+
begin
|
17
|
+
system 'clear'
|
18
|
+
puts '=' * 40
|
19
|
+
puts 'Waiting for a connection...'
|
20
|
+
puts '=' * 40
|
21
|
+
loop do
|
22
|
+
client = server.accept
|
23
|
+
|
24
|
+
if client
|
25
|
+
client_message = client.recv(4096)
|
26
|
+
client.send @message, 0
|
27
|
+
|
28
|
+
case client_message
|
29
|
+
when '0'
|
30
|
+
@message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
|
31
|
+
when '1'
|
32
|
+
Game.win
|
33
|
+
when '2'
|
34
|
+
Game.lose
|
35
|
+
else
|
36
|
+
@message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
|
37
|
+
@receive = client_message.split(',').map(&:to_i).each_slice(2).to_a if client_message
|
38
|
+
end
|
39
|
+
|
40
|
+
UI::Two.draw_map
|
41
|
+
operation = Game.listen_operation
|
42
|
+
if Game.lose?
|
43
|
+
Game.lose!
|
44
|
+
break
|
45
|
+
elsif Game.win?
|
46
|
+
Game.win!
|
47
|
+
break
|
48
|
+
elsif !UI::Two.snake.move(operation)
|
49
|
+
@message = '1'
|
50
|
+
elsif UI::Two.score == 0
|
51
|
+
@message = '2'
|
52
|
+
end
|
32
53
|
end
|
33
54
|
end
|
55
|
+
ensure
|
56
|
+
Ncurses.endwin
|
34
57
|
end
|
35
58
|
end
|
36
59
|
end
|
data/lib/ruby_snake/ui/two.rb
CHANGED
@@ -7,6 +7,7 @@ module RubySnake
|
|
7
7
|
remote_window.border *([0]*8)
|
8
8
|
local_window.noutrefresh
|
9
9
|
remote_window.noutrefresh
|
10
|
+
@snake ||= Snake.new local_window.getmaxx, local_window.getmaxy
|
10
11
|
end
|
11
12
|
|
12
13
|
def local_window
|
@@ -26,7 +27,7 @@ module RubySnake
|
|
26
27
|
end
|
27
28
|
|
28
29
|
def snake
|
29
|
-
@snake
|
30
|
+
@snake
|
30
31
|
end
|
31
32
|
|
32
33
|
def window
|
@@ -102,16 +103,9 @@ module RubySnake
|
|
102
103
|
remote_window.color_set 2, nil
|
103
104
|
head = snake.shift
|
104
105
|
remote_display head, '@'
|
105
|
-
snake.each do |body|
|
106
|
-
remote_display body, 'o'
|
107
|
-
end
|
108
106
|
|
109
107
|
remote_window.noutrefresh
|
110
|
-
remote_display
|
111
|
-
|
112
|
-
snake.each do |body|
|
113
|
-
remote_display body, ' '
|
114
|
-
end
|
108
|
+
remote_display snake.last, ' '
|
115
109
|
rescue
|
116
110
|
nil
|
117
111
|
end
|
@@ -129,24 +123,19 @@ module RubySnake
|
|
129
123
|
Ncurses.nodelay window, true
|
130
124
|
begin
|
131
125
|
loop do
|
132
|
-
|
133
|
-
operation = Game.listen_operation
|
126
|
+
Client.connect Game.host
|
134
127
|
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
draw_lose
|
142
|
-
sleep 1
|
143
|
-
window.getch
|
144
|
-
break
|
145
|
-
end
|
146
|
-
if !snake.move(operation)
|
128
|
+
draw_map
|
129
|
+
|
130
|
+
operation = Game.listen_operation
|
131
|
+
if !snake.move(operation) || Game.lose?
|
132
|
+
Game.role_class.message = '1'
|
133
|
+
Client.connect
|
147
134
|
Game.lose!
|
148
135
|
break
|
149
|
-
elsif score == 0
|
136
|
+
elsif score == 0 || Game.win?
|
137
|
+
Game.role_class.message = '2'
|
138
|
+
Client.connect Game.host
|
150
139
|
Game.win!
|
151
140
|
break
|
152
141
|
end
|
data/lib/ruby_snake/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_snake
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ncurses-ruby
|