pirate_game 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +8 -0
- data/.gemtest +0 -0
- data/History.rdoc +5 -0
- data/Manifest.txt +37 -0
- data/README.md +88 -0
- data/Rakefile +24 -0
- data/bin/game_master +6 -0
- data/bin/pirate_game +5 -0
- data/config.json +4 -0
- data/imgs/jolly_roger.jpg +0 -0
- data/imgs/jolly_roger_sm.png +0 -0
- data/imgs/pirate_ship.png +0 -0
- data/imgs/pirate_ship_sm.png +0 -0
- data/lib/pirate_game.rb +21 -0
- data/lib/pirate_game/animation.rb +35 -0
- data/lib/pirate_game/background.rb +95 -0
- data/lib/pirate_game/boot.rb +68 -0
- data/lib/pirate_game/bridge.rb +21 -0
- data/lib/pirate_game/bridge_button.rb +38 -0
- data/lib/pirate_game/client.rb +163 -0
- data/lib/pirate_game/client_app.rb +342 -0
- data/lib/pirate_game/game_master.rb +208 -0
- data/lib/pirate_game/image.rb +23 -0
- data/lib/pirate_game/log_book.rb +39 -0
- data/lib/pirate_game/master_app.rb +103 -0
- data/lib/pirate_game/protocol.rb +10 -0
- data/lib/pirate_game/shoes4_patch.rb +30 -0
- data/lib/pirate_game/stage.rb +96 -0
- data/lib/pirate_game/timeout_renewer.rb +30 -0
- data/lib/pirate_game/wave.rb +46 -0
- data/lib/pirate_game/waving_item.rb +17 -0
- data/state_diagram.graffle +2689 -0
- data/test/test_pirate_game_bridge.rb +14 -0
- data/test/test_pirate_game_client.rb +148 -0
- data/test/test_pirate_game_game_master.rb +107 -0
- data/test/test_pirate_game_log_book.rb +34 -0
- data/test/test_pirate_game_stage.rb +116 -0
- data/test/test_pirate_game_timeout_renewer.rb +15 -0
- metadata +204 -0
data/.autotest
ADDED
data/.gemtest
ADDED
File without changes
|
data/History.rdoc
ADDED
data/Manifest.txt
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
.autotest
|
2
|
+
History.rdoc
|
3
|
+
Manifest.txt
|
4
|
+
README.md
|
5
|
+
Rakefile
|
6
|
+
bin/game_master
|
7
|
+
bin/pirate_game
|
8
|
+
config.json
|
9
|
+
imgs/jolly_roger.jpg
|
10
|
+
imgs/jolly_roger_sm.png
|
11
|
+
imgs/pirate_ship.png
|
12
|
+
imgs/pirate_ship_sm.png
|
13
|
+
lib/pirate_game.rb
|
14
|
+
lib/pirate_game/animation.rb
|
15
|
+
lib/pirate_game/background.rb
|
16
|
+
lib/pirate_game/boot.rb
|
17
|
+
lib/pirate_game/bridge.rb
|
18
|
+
lib/pirate_game/bridge_button.rb
|
19
|
+
lib/pirate_game/client.rb
|
20
|
+
lib/pirate_game/client_app.rb
|
21
|
+
lib/pirate_game/game_master.rb
|
22
|
+
lib/pirate_game/image.rb
|
23
|
+
lib/pirate_game/log_book.rb
|
24
|
+
lib/pirate_game/master_app.rb
|
25
|
+
lib/pirate_game/protocol.rb
|
26
|
+
lib/pirate_game/shoes4_patch.rb
|
27
|
+
lib/pirate_game/stage.rb
|
28
|
+
lib/pirate_game/timeout_renewer.rb
|
29
|
+
lib/pirate_game/wave.rb
|
30
|
+
lib/pirate_game/waving_item.rb
|
31
|
+
state_diagram.graffle
|
32
|
+
test/test_pirate_game_bridge.rb
|
33
|
+
test/test_pirate_game_client.rb
|
34
|
+
test/test_pirate_game_game_master.rb
|
35
|
+
test/test_pirate_game_log_book.rb
|
36
|
+
test/test_pirate_game_stage.rb
|
37
|
+
test/test_pirate_game_timeout_renewer.rb
|
data/README.md
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
# pirate_game
|
2
|
+
|
3
|
+
* https://github.com/davy/pirate_game
|
4
|
+
|
5
|
+
## Description
|
6
|
+
|
7
|
+
You insouciant scalawags will share the experience of a lifetime as you play a game built atop DRb and Shoes based generally upon the phenomenon known as Spaceteam! Except with Pirates!!
|
8
|
+
|
9
|
+
Team up with your fellow pirates to plunder the high seas! Yarrrr….☠
|
10
|
+
|
11
|
+
## INSTALL
|
12
|
+
|
13
|
+
* Install jruby (1.7.4, 1.7.5, 1.7.6 all should work), bundler
|
14
|
+
* Install shoes4
|
15
|
+
|
16
|
+
```
|
17
|
+
$ git clone http://github.com/shoes/shoes4
|
18
|
+
$ git checkout 7d0a1eefea601917dd01419b14ded2812d0acb9f
|
19
|
+
$ gem build shoes.gemspec
|
20
|
+
$ gem install shoes-4.0.0.pre1
|
21
|
+
$ alias shoes4='/path/to/shoes4/bin/shoes'
|
22
|
+
```
|
23
|
+
|
24
|
+
* Install pirate_game
|
25
|
+
|
26
|
+
```
|
27
|
+
$ gem install pirate_game
|
28
|
+
```
|
29
|
+
|
30
|
+
## RUN GAME
|
31
|
+
|
32
|
+
* One person runs game_master
|
33
|
+
|
34
|
+
```
|
35
|
+
$ ring_server
|
36
|
+
$ shoes4 bin/game_master
|
37
|
+
```
|
38
|
+
|
39
|
+
* Players run pirate_game
|
40
|
+
|
41
|
+
```
|
42
|
+
$ shoes4 bin/pirate_game
|
43
|
+
```
|
44
|
+
|
45
|
+
## Credits
|
46
|
+
|
47
|
+
Pirate Ship image used under [CC by-nc-sa
|
48
|
+
3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/) from
|
49
|
+
http://sweetclipart.com/pirate-ship-design
|
50
|
+
|
51
|
+
Jolly Roger Flag image used under [CC by-nc-sa
|
52
|
+
3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/)
|
53
|
+
from http://freestock.ca/flags_maps_g80-jolly_roger_pirate_grunge_flag_p1022.html
|
54
|
+
|
55
|
+
## Developers
|
56
|
+
|
57
|
+
After checking out the source, run:
|
58
|
+
|
59
|
+
$ rake newb
|
60
|
+
|
61
|
+
This task will install any missing dependencies, run the tests/specs,
|
62
|
+
and generate the RDoc.
|
63
|
+
|
64
|
+
## License
|
65
|
+
|
66
|
+
(The MIT License)
|
67
|
+
|
68
|
+
Copyright (c) Davy Stevenson, Eric Hodel
|
69
|
+
|
70
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
71
|
+
a copy of this software and associated documentation files (the
|
72
|
+
'Software'), to deal in the Software without restriction, including
|
73
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
74
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
75
|
+
permit persons to whom the Software is furnished to do so, subject to
|
76
|
+
the following conditions:
|
77
|
+
|
78
|
+
The above copyright notice and this permission notice shall be
|
79
|
+
included in all copies or substantial portions of the Software.
|
80
|
+
|
81
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
82
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
83
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
84
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
85
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
86
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
87
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
88
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- ruby -*-
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hoe'
|
5
|
+
|
6
|
+
Hoe.plugin :minitest
|
7
|
+
Hoe.plugin :git
|
8
|
+
|
9
|
+
Hoe.spec 'pirate_game' do
|
10
|
+
developer 'Davy Stevenson', 'davy.stevenson@gmail.com'
|
11
|
+
developer 'Eric Hodel', 'drbrain@segment7.net'
|
12
|
+
|
13
|
+
rdoc_locations << 'docs.seattlerb.org:/data/www/docs.seattlerb.org/pirate_game/'
|
14
|
+
|
15
|
+
extra_deps << ['json', '~> 1.8.0']
|
16
|
+
extra_deps << ['pirate_command', '~> 0.0', '>= 0.0.2']
|
17
|
+
extra_deps << ['shuttlecraft', '~> 0.0']
|
18
|
+
|
19
|
+
license 'MIT'
|
20
|
+
|
21
|
+
self.readme_file = 'README.md'
|
22
|
+
end
|
23
|
+
|
24
|
+
# vim: syntax=ruby
|
data/bin/game_master
ADDED
data/bin/pirate_game
ADDED
data/config.json
ADDED
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/pirate_game.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
module PirateGame
|
2
|
+
VERSION = '0.0.1'
|
3
|
+
end
|
4
|
+
|
5
|
+
require 'pirate_game/animation'
|
6
|
+
require 'pirate_game/background'
|
7
|
+
require 'pirate_game/boot'
|
8
|
+
require 'pirate_game/waving_item'
|
9
|
+
require 'pirate_game/bridge'
|
10
|
+
require 'pirate_game/bridge_button'
|
11
|
+
require 'pirate_game/client'
|
12
|
+
require 'pirate_game/client_app'
|
13
|
+
require 'pirate_game/game_master'
|
14
|
+
require 'pirate_game/image'
|
15
|
+
require 'pirate_game/log_book'
|
16
|
+
require 'pirate_game/master_app'
|
17
|
+
require 'pirate_game/protocol'
|
18
|
+
require 'pirate_game/stage'
|
19
|
+
require 'pirate_game/timeout_renewer'
|
20
|
+
require 'pirate_game/wave'
|
21
|
+
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'shoes'
|
2
|
+
|
3
|
+
##
|
4
|
+
# An animation that resets the client application if a DRb::DRbConnError is
|
5
|
+
# raised during animation.
|
6
|
+
|
7
|
+
class PirateGame::Animation < Shoes::Animation
|
8
|
+
|
9
|
+
##
|
10
|
+
# See Shoes::Animation for details
|
11
|
+
|
12
|
+
def initialize app, opts, blk
|
13
|
+
blk = wrap_block blk
|
14
|
+
|
15
|
+
super app, opts, blk
|
16
|
+
end
|
17
|
+
|
18
|
+
##
|
19
|
+
# Wraps +block+ in an exception handler that switches to the
|
20
|
+
# select_game_screen.
|
21
|
+
|
22
|
+
def wrap_block block # :nodoc:
|
23
|
+
proc do |*args|
|
24
|
+
begin
|
25
|
+
block.call(*args)
|
26
|
+
rescue DRb::DRbConnError
|
27
|
+
@app.state = :select_game
|
28
|
+
|
29
|
+
@app.select_game_screen
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
@@ -0,0 +1,95 @@
|
|
1
|
+
class PirateGame::Background
|
2
|
+
|
3
|
+
STATES = [:clear, :foggy, :windy]
|
4
|
+
|
5
|
+
def initialize shoes, state=nil
|
6
|
+
@shoes = shoes
|
7
|
+
set_state state
|
8
|
+
|
9
|
+
@items = []
|
10
|
+
|
11
|
+
@items << PirateGame::Wave.new(@shoes, 0)
|
12
|
+
@items << PirateGame::Wave.new(@shoes, 20)
|
13
|
+
|
14
|
+
image = File.expand_path '../../../imgs/pirate_ship_sm.png', __FILE__
|
15
|
+
|
16
|
+
@items << PirateGame::Image.new(@shoes, image, 66, 55)
|
17
|
+
|
18
|
+
[40, 60, 80, 100].each do |top|
|
19
|
+
@items << PirateGame::Wave.new(@shoes, top)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def set_state state
|
24
|
+
@state = state if STATES.include?(state)
|
25
|
+
@state ||= :clear
|
26
|
+
end
|
27
|
+
|
28
|
+
def randomize_state
|
29
|
+
case rand
|
30
|
+
when 0.0..0.1
|
31
|
+
@state = :foggy
|
32
|
+
when 0.2..0.3
|
33
|
+
@state = :windy
|
34
|
+
else
|
35
|
+
@state = :clear
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def send_speed_to_items
|
40
|
+
case @state
|
41
|
+
when :windy
|
42
|
+
all_items.each {|item| item.speed = :fast}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def all_items
|
47
|
+
@items + @extra_items
|
48
|
+
end
|
49
|
+
|
50
|
+
def color
|
51
|
+
case @state
|
52
|
+
when :foggy
|
53
|
+
@shoes.rgb(105, 138, 150, 180)
|
54
|
+
else # :clear, :windy
|
55
|
+
PirateGame::Boot::SKY_COLOR
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def draw
|
60
|
+
randomize_state
|
61
|
+
|
62
|
+
@shoes.background color unless foreground?
|
63
|
+
|
64
|
+
@items.each do |item|
|
65
|
+
item.draw
|
66
|
+
end
|
67
|
+
|
68
|
+
@extra_items = []
|
69
|
+
|
70
|
+
yield if block_given?
|
71
|
+
|
72
|
+
@extra_items.each do |item|
|
73
|
+
item.draw
|
74
|
+
end
|
75
|
+
|
76
|
+
# doesn't draw over input items (buttons, text boxes, etc) >:(
|
77
|
+
@shoes.background color if foreground?
|
78
|
+
|
79
|
+
send_speed_to_items
|
80
|
+
end
|
81
|
+
|
82
|
+
def add_extra_item item
|
83
|
+
@extra_items << item
|
84
|
+
end
|
85
|
+
|
86
|
+
def animate frame
|
87
|
+
all_items.each do |item|
|
88
|
+
item.animate frame
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def foreground?
|
93
|
+
@state == :foggy
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'shoes/color'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module PirateGame
|
5
|
+
module Boot
|
6
|
+
|
7
|
+
DARK_COLOR = '#696969' #dimgray
|
8
|
+
LIGHT_COLOR = '#dcdcdc' #gainsboro
|
9
|
+
SKY_COLOR = '#00ffff' #aqua
|
10
|
+
PUB_COLOR = '#52352b' #brown
|
11
|
+
|
12
|
+
COLORS = {dark: DARK_COLOR, light: LIGHT_COLOR, sky: SKY_COLOR, pub: PUB_COLOR}
|
13
|
+
|
14
|
+
BLUE_COLORS = [
|
15
|
+
Shoes::COLORS[:cornflowerblue],
|
16
|
+
Shoes::COLORS[:darkcyan],
|
17
|
+
Shoes::COLORS[:deepskyblue],
|
18
|
+
Shoes::COLORS[:mediumturquoise],
|
19
|
+
Shoes::COLORS[:steelblue],
|
20
|
+
Shoes::COLORS[:teal],
|
21
|
+
Shoes::COLORS[:turquoise]
|
22
|
+
]
|
23
|
+
|
24
|
+
GREEN_COLORS = [Shoes::COLORS[:lightseagreen],
|
25
|
+
Shoes::COLORS[:mediumaquamarine],
|
26
|
+
Shoes::COLORS[:mediumseagreen],
|
27
|
+
Shoes::COLORS[:seagreen],
|
28
|
+
Shoes::COLORS[:teal]
|
29
|
+
]
|
30
|
+
|
31
|
+
def self.config_file
|
32
|
+
File.expand_path '../../../config.json', __FILE__
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.config_hash
|
36
|
+
begin
|
37
|
+
JSON.parse(open(self.config_file).read)
|
38
|
+
rescue
|
39
|
+
{"stage_duration" => 30, "action_duration" => 8}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.config
|
44
|
+
@config ||= self.config_hash
|
45
|
+
@config
|
46
|
+
end
|
47
|
+
|
48
|
+
def self.waving_offset(frame, seed, delta_x, delta_y, speed = :normal)
|
49
|
+
t1 = frame + seed
|
50
|
+
t2 = frame + seed * 2
|
51
|
+
vel = 10.0
|
52
|
+
|
53
|
+
case speed
|
54
|
+
when :slow
|
55
|
+
vel = 20.0
|
56
|
+
when :fast
|
57
|
+
vel = 2.0
|
58
|
+
delta_x *= 2
|
59
|
+
delta_y *= 2
|
60
|
+
end
|
61
|
+
|
62
|
+
offset_x = Math.sin(t1/vel) * delta_x
|
63
|
+
offset_y = Math.cos(t2/vel) * delta_y
|
64
|
+
|
65
|
+
return offset_x, offset_y
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class PirateGame::Bridge
|
2
|
+
|
3
|
+
attr_accessor :items, :stage_items
|
4
|
+
|
5
|
+
def initialize(items, stage_items)
|
6
|
+
@items = items
|
7
|
+
@stage_items = stage_items
|
8
|
+
end
|
9
|
+
|
10
|
+
def sample_item
|
11
|
+
item = @stage_items.sample
|
12
|
+
|
13
|
+
# if we selected an item in the current bridge
|
14
|
+
# reselect a new item 80% of the time
|
15
|
+
if items.include?(item) && items.size < stage_items.size
|
16
|
+
item = sample_item if rand > 0.2
|
17
|
+
end
|
18
|
+
|
19
|
+
return item
|
20
|
+
end
|
21
|
+
end
|