snek 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e9b064541769fc02d79b90d8394c226c70d34199
4
- data.tar.gz: 9271b210952c5ab66e427c656bf2b8fea88aade2
3
+ metadata.gz: d1606a1438e6dd977c50ac59a33a5fb808fdd298
4
+ data.tar.gz: f6452fc4942317d8c1d5419c63b7ad0b9b87aecb
5
5
  SHA512:
6
- metadata.gz: 54624bbbd428c6bf48039183ddab94c0df99988a7b26053a78ae3644cd286dfc68efca675f44bf58cf1a7381187c766096b8255cf909deb477e2049ff6addd75
7
- data.tar.gz: 91a641b05a9bb3f8d3acbff651e6703b235675dfc17e7436ed9bb5e8a35fc7efa895324a7d51a9405f4218fad2ca8903d360608f84b8798cdc52c2cb195b8785
6
+ metadata.gz: 6c4b63abcf96d341c3603e98e4c6a91f8fc9341a9a011513b0661e1320ce539c0d60b16e69407ebfc669eb9bc533cd46980b9989efbc74db6c1708f186333302
7
+ data.tar.gz: f50692a188a075d175758c43516b51938d26f8f392d18a3f2d1fc5fba983f19b94f0e1c07c9c30fdc26d8cc77f59ea022f1612040c17416a795f0056fd64bd5f
@@ -1,5 +1,6 @@
1
1
  require 'logger'
2
2
  require 'io/console'
3
+ require 'terminal_game_engine'
3
4
 
4
5
  Dir[File.dirname(__FILE__) + "/**/*.rb"].each { |f| require f }
5
6
 
@@ -17,16 +18,16 @@ module Snek
17
18
  end
18
19
 
19
20
  def start
20
- GameEngine::Sound.play 'startup.wav'
21
+ play_sound 'startup'
21
22
 
22
- @network = GameEngine::Network.new logger: logger
23
+ @network = TerminalGameEngine::Network.new logger: logger
23
24
  @network.open_socket
24
25
 
25
26
  reset_snek
26
27
 
27
- GameEngine::Frame.setup
28
+ TerminalGameEngine::Frame.setup
28
29
 
29
- GameEngine::Engine.tick do |tick|
30
+ TerminalGameEngine::Engine.tick do |tick|
30
31
  @tick = tick
31
32
 
32
33
  render
@@ -82,17 +83,15 @@ module Snek
82
83
  end
83
84
 
84
85
  def rows
85
- GameEngine::Window.rows
86
86
  25
87
87
  end
88
88
 
89
89
  def columns
90
- GameEngine::Window.columns
91
90
  80
92
91
  end
93
92
 
94
93
  def render
95
- @frame = GameEngine::Frame.new columns, rows + 10
94
+ @frame = TerminalGameEngine::Frame.new columns, rows + 10
96
95
 
97
96
  if @tick % 2 == 0 || %w[e w].include?(@snek.direction)
98
97
  new_position = move_snek
@@ -106,7 +105,7 @@ module Snek
106
105
  check_border_collision(border, new_position)
107
106
  check_food_collision(new_position)
108
107
 
109
- GameEngine::Input.call do |key|
108
+ TerminalGameEngine::Input.call do |key|
110
109
  if key
111
110
  return if @tick == @input_in_tick
112
111
  @input_in_tick = @tick
@@ -115,15 +114,15 @@ module Snek
115
114
  head = @snek.last
116
115
 
117
116
  case key
118
- when 'q'.ord, 27, 3 # escape, ctrl-c
117
+ when 'q'.ord, TerminalGameEngine::Input::Keys::ESCAPE, TerminalGameEngine::Input::Keys::CTRL_C
119
118
  exit
120
- when 119 # W up
119
+ when 'w'.ord
121
120
  @snek.direction = 'n' if @snek.direction != 's'
122
- when 115 # S down
121
+ when 's'.ord
123
122
  @snek.direction = 's' if @snek.direction != 'n'
124
- when 100 # D right
123
+ when 'd'.ord
125
124
  @snek.direction = 'e' if @snek.direction != 'w'
126
- when 97 # A left
125
+ when 'a'.ord
127
126
  @snek.direction = 'w' if @snek.direction != 'e'
128
127
  end
129
128
  end
@@ -142,7 +141,7 @@ module Snek
142
141
 
143
142
  def check_food_collision(new_position)
144
143
  if @food == new_position
145
- GameEngine::Sound.play 'pickup.wav'
144
+ play_sound 'pickup'
146
145
  @snek.snek_length += 1
147
146
  @local_food_position = random_position
148
147
  @food_eaten_count += 1
@@ -270,8 +269,13 @@ module Snek
270
269
  end
271
270
 
272
271
  def crash_snek
273
- GameEngine::Sound.play 'explosion.wav'
272
+ play_sound 'explosion'
274
273
  reset_snek
275
274
  end
275
+
276
+ def play_sound(name)
277
+ path = File.expand_path("../../assets/sounds/#{name}.wav", __FILE__)
278
+ TerminalGameEngine::Sound.play path
279
+ end
276
280
  end
277
281
  end
@@ -1,3 +1,3 @@
1
1
  module Snek
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
@@ -17,6 +17,8 @@ Gem::Specification.new do |spec|
17
17
  spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
18
  spec.require_paths = ['lib']
19
19
 
20
+ spec.add_dependency 'terminal_game_engine', '~> 0.1.2'
21
+
20
22
  spec.add_development_dependency 'bundler', '~> 1.10'
21
23
  spec.add_development_dependency 'rake', '~> 11.0'
22
24
  spec.add_development_dependency 'rspec'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: snek
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Odin Dutton
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-07-11 00:00:00.000000000 Z
11
+ date: 2016-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: terminal_game_engine
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.2
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -76,7 +90,6 @@ extra_rdoc_files: []
76
90
  files:
77
91
  - ".gitignore"
78
92
  - Gemfile
79
- - Gemfile.lock
80
93
  - README.markdown
81
94
  - Rakefile
82
95
  - assets/sounds/explosion.wav
@@ -84,12 +97,6 @@ files:
84
97
  - assets/sounds/startup.wav
85
98
  - bin/snek
86
99
  - lib/game.rb
87
- - lib/game_engine/engine.rb
88
- - lib/game_engine/frame.rb
89
- - lib/game_engine/input.rb
90
- - lib/game_engine/network.rb
91
- - lib/game_engine/sound.rb
92
- - lib/game_engine/window.rb
93
100
  - lib/snek.rb
94
101
  - lib/snek/version.rb
95
102
  - snek.gemspec
@@ -1,22 +0,0 @@
1
- module GameEngine
2
- class Engine
3
- attr_accessor :tick
4
-
5
- def self.tick(&block)
6
- self.new(&block).tap(&:call)
7
- end
8
-
9
- def initialize(&block)
10
- @tick = 0
11
- @block = block
12
- end
13
-
14
- def call
15
- loop do
16
- @block.call @tick
17
- @tick += 1
18
- sleep 0.1
19
- end
20
- end
21
- end
22
- end
@@ -1,84 +0,0 @@
1
- module GameEngine
2
- class Frame
3
- attr_reader :rows
4
-
5
- def initialize(width, height)
6
- @rows = height.times.map { ' ' * width }
7
- end
8
-
9
- def width
10
- @rows.first.size
11
- end
12
-
13
- def height
14
- @rows.size
15
- end
16
-
17
- def draw(x, y, sprite)
18
- lines = sprite.split("\n")
19
-
20
- lines.each_with_index do |line, i|
21
- if line.size > 0 && y+lines.size <= self.height && y+i >= 0
22
- # crop when drawing off left
23
- if x < 0
24
- line = line[x.abs..-1]
25
- x = 0
26
- end
27
-
28
- # crop when drawing off right
29
- if x+line.size-1 >= self.width
30
- line = line[0..(self.width-1)-(x+line.size)]
31
- end
32
-
33
- @rows[y+i][x..x+line.size-1] = line
34
- end
35
- end
36
- end
37
-
38
- def draw_center(y, sprite)
39
- sprite_width = sprite.split("\n").first.size
40
- x = self.width / 2 - sprite_width / 2
41
- draw x, y, sprite
42
- end
43
-
44
- def render
45
- @rows.each_with_index do |row, i|
46
- Frame.move_cursor 0, i
47
- print row
48
- end
49
- end
50
-
51
- def self.move_cursor(x, y)
52
- print "\033[#{y+1};#{x+1}H"
53
- end
54
-
55
- def self.clear_screen
56
- print "\033[2J"
57
- end
58
-
59
- def self.disable_cursor
60
- print "\x1B[?25l"
61
- end
62
-
63
- def self.enable_cursor
64
- print "\x1B[?25h"
65
- end
66
-
67
- def self.setup
68
- clear_screen
69
- disable_cursor
70
-
71
- $stdin.raw!
72
- at_exit do
73
- puts "\r"
74
- enable_cursor
75
- $stdin.cooked!
76
- system 'stty sane'
77
- end
78
-
79
- trap 'WINCH' do
80
- clear_screen
81
- end
82
- end
83
- end
84
- end
@@ -1,13 +0,0 @@
1
- module GameEngine
2
- class Input
3
- def self.call(&block)
4
- begin
5
- loop do
6
- key = $stdin.read_nonblock(1).ord
7
- block.call key
8
- end
9
- rescue Errno::EAGAIN
10
- end
11
- end
12
- end
13
- end
@@ -1,52 +0,0 @@
1
- require 'logger'
2
- require 'socket'
3
- require 'yaml'
4
-
5
- module GameEngine
6
- class Network
7
- PORT = 47357
8
-
9
- attr_reader :logger
10
-
11
- def initialize(logger: Logger.new('/dev/null'))
12
- @logger = logger
13
- end
14
-
15
- def open_socket
16
- @socket = UDPSocket.new
17
- @socket.bind '0.0.0.0', PORT
18
- @socket.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true
19
- @socket.setsockopt Socket::SOL_SOCKET, Socket::SO_BROADCAST, true
20
- rescue Errno::EADDRINUSE
21
- $stderr.puts "Game is already running."
22
- exit 1
23
- end
24
-
25
- def receive_updates(&block)
26
- loop do
27
- begin
28
- data, addr = @socket.recvfrom_nonblock 8192
29
- data = YAML.load(data)
30
- block.call(data)
31
- rescue Psych::SyntaxError => error
32
- logger.error error
33
- end
34
- end
35
- rescue Errno::EAGAIN
36
- end
37
-
38
- def send_update(data)
39
- data = data.merge(hostname: hostname)
40
-
41
- begin
42
- @socket.send data.to_yaml, 0, '255.255.255.255', PORT
43
- rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::EMSGSIZE, Errno::ENETDOWN => error
44
- logger.error error
45
- end
46
- end
47
-
48
- def hostname
49
- @hostname ||= `hostname -s`.strip
50
- end
51
- end
52
- end
@@ -1,12 +0,0 @@
1
- module GameEngine
2
- class Sound
3
- def self.play(sound)
4
- case RUBY_PLATFORM
5
- when /darwin/
6
- system "afplay assets/sounds/#{sound} &"
7
- when /linux/
8
- system "command -v mplayer >/dev/null 2>&1 && mplayer -msglevel all=-1 -nolirc assets/sounds/#{sound} &"
9
- end
10
- end
11
- end
12
- end
@@ -1,11 +0,0 @@
1
- module GameEngine
2
- class Window
3
- def self.rows
4
- $stdin.winsize[0]
5
- end
6
-
7
- def self.columns
8
- $stdin.winsize[1]
9
- end
10
- end
11
- end