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.
@@ -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 = '0'
9
+ @message ||= '0'
10
10
 
11
- loop do
12
- sleep 0.1
11
+ server = TCPSocket.new host, 2000
13
12
 
14
- begin
15
- server = TCPSocket.new host, 2000
16
- rescue => err
17
- @message = '10'
18
- break
19
- end
13
+ server.send @message, 0
14
+ server_message = server.recv(4096)
20
15
 
21
- server.send @message, 0
22
- server_message = server.recv(4096)
23
-
24
- case server_message
25
- when '0'
26
- @message = '1'
27
- when '1'
28
- @message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
29
- when '2'
30
- Game.win
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
@@ -6,15 +6,16 @@ module RubySnake
6
6
  # common
7
7
 
8
8
  def start(role=nil)
9
- self.role = role unless role.nil?
9
+ self.role = role
10
10
  @time_flag = Time.now.to_f
11
- if role == 'server'
12
- start_server_thread
11
+ if role.nil?
12
+ UI.draw
13
+ elsif role == 'server'
14
+ Server.start
13
15
  elsif role == 'client'
14
- start_client_thread
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 @operation == UP && o == DOWN
153
- return true if @operation == DOWN && o == UP
154
- return true if @operation == LEFT && o == RIGHT
155
- return true if @operation == RIGHT && o == LEFT
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 = '3'
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 countdown
246
- 3.times do |i|
247
- puts 3 - i
248
- sleep 1
249
- end
245
+ def host
246
+ @host
250
247
  end
251
248
 
252
- def start_server_thread
249
+ def get_host
253
250
  system 'clear'
254
- puts '=' * 40
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
@@ -9,28 +9,51 @@ module RubySnake
9
9
  @message = '0'
10
10
 
11
11
  server = TCPServer.new 2000
12
- loop do
13
- client = server.accept
14
- if client
15
- client_message = client.recv(4096)
16
- client.send @message, 0
17
-
18
- case client_message
19
- when '0'
20
- @message = '1'
21
- when '1'
22
- @message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
23
- when '2'
24
- Game.win
25
- break
26
- when '3'
27
- Game.lose
28
- break
29
- else
30
- @message = ([Game.snake.food] + Game.snake.body).join(',').to_s if Game.snake
31
- @receive = client_message.split(',').map(&:to_i).each_slice(2).to_a if client_message
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
@@ -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 ||= Snake.new local_window.getmaxx, local_window.getmaxy
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 head, ' '
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
- draw_map
133
- operation = Game.listen_operation
126
+ Client.connect Game.host
134
127
 
135
- if Game.win?
136
- draw_win
137
- sleep 1
138
- window.getch
139
- break
140
- elsif Game.lose?
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
@@ -1,3 +1,3 @@
1
1
  module RubySnake
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
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.5
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-27 00:00:00.000000000 Z
12
+ date: 2012-12-28 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ncurses-ruby