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.
@@ -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