ruby_snake 0.0.5 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|