spacewar 0.0.1

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.
Files changed (43) hide show
  1. data/Rakefile +54 -0
  2. data/bin/spacewar +4 -0
  3. data/lib/media/Parallax-scroll-example-layer-0.png +0 -0
  4. data/lib/media/Parallax-scroll-example-layer-1.png +0 -0
  5. data/lib/media/Parallax-scroll-example-layer-2.png +0 -0
  6. data/lib/media/Parallax-scroll-example-layer-3.png +0 -0
  7. data/lib/media/Star.png +0 -0
  8. data/lib/media/Starfighter.bmp +0 -0
  9. data/lib/media/Starfighter_p1.bmp +0 -0
  10. data/lib/media/Starfighter_p2.bmp +0 -0
  11. data/lib/media/background1.png +0 -0
  12. data/lib/media/bullet.png +0 -0
  13. data/lib/media/bullet_hit.wav +0 -0
  14. data/lib/media/circle.png +0 -0
  15. data/lib/media/city1.csv +2 -0
  16. data/lib/media/city1.png +0 -0
  17. data/lib/media/city2.png +0 -0
  18. data/lib/media/droid.bmp +0 -0
  19. data/lib/media/enemy_bullet.png +0 -0
  20. data/lib/media/explosion.wav +0 -0
  21. data/lib/media/fire_bullet.png +0 -0
  22. data/lib/media/fireball.png +0 -0
  23. data/lib/media/foo +0 -0
  24. data/lib/media/laser.wav +0 -0
  25. data/lib/media/particle.png +0 -0
  26. data/lib/media/plane.csv +2 -0
  27. data/lib/media/plane.png +0 -0
  28. data/lib/media/planet.png +0 -0
  29. data/lib/media/rect.png +0 -0
  30. data/lib/media/ruby.png +0 -0
  31. data/lib/media/saucer.csv +4 -0
  32. data/lib/media/saucer.gal +0 -0
  33. data/lib/media/saucer.png +0 -0
  34. data/lib/media/spaceship.png +0 -0
  35. data/lib/media/stickfigure.bmp +0 -0
  36. data/lib/media/stickfigure.png +0 -0
  37. data/lib/media/video_games.png +0 -0
  38. data/lib/media/wood.png +0 -0
  39. data/lib/spacewar.rb +9 -0
  40. data/lib/spacewar/spacewar.rb +217 -0
  41. data/test/helper.rb +10 -0
  42. data/test/test_spacewar.rb +7 -0
  43. metadata +112 -0
@@ -0,0 +1,54 @@
1
+ require 'rake'
2
+ require 'rake/clean'
3
+ require 'rake/gempackagetask'
4
+ require 'fileutils'
5
+ require 'lib/spacewar'
6
+
7
+ include FileUtils
8
+
9
+ version = Spacewar::VERSION
10
+ name = "spacewar"
11
+
12
+ spec = Gem::Specification.new do |s|
13
+ s.name = name
14
+ s.version = version
15
+ s.summary = 'There are two spaceships, a planet, gravity, missiles, and lasers. Do the math.'
16
+ s.description = 'A brave group-effort by the gentlemen at Ottawa.rb (aka OGRE), spacewar is a legitimate heir to the glory that is the original game you likely played on an xt or more ancient beast of a machine.'
17
+ s.authors = ["Edward Ocampo-Gooding", "John Duff", "Justin Bowes", "Chris Saunders", "Schwab", "Pranav Singh", "Dwayne Litzenberger", "Jean Claude Batista"]
18
+
19
+ s.email = 'edward@edwardog.net'
20
+ s.homepage = "http://github.com/edward/spacewar"
21
+ s.executables = [ "spacewar" ]
22
+ s.default_executable = "spacewar"
23
+ s.rubyforge_project = "spacewar"
24
+
25
+ s.platform = Gem::Platform::RUBY
26
+ s.has_rdoc = false
27
+
28
+ s.files = %w(Rakefile) +
29
+ Dir.glob("{bin,lib,test}/**/*")
30
+
31
+ s.require_path = "lib"
32
+ s.bindir = "bin"
33
+
34
+ s.add_dependency('chingu', '>= 0.6.7')
35
+ end
36
+
37
+ Rake::GemPackageTask.new(spec) do |p|
38
+ p.need_tar = true if RUBY_PLATFORM !~ /mswin/
39
+ end
40
+
41
+ desc "Install #{name} gem (#{version})"
42
+ task :install => [ :test, :package ] do
43
+ sh %{sudo gem install pkg/#{name}-#{version}.gem}
44
+ end
45
+
46
+ desc "Uninstall #{name} gem"
47
+ task :uninstall => [ :clean ] do
48
+ sh %{sudo gem uninstall #{name}}
49
+ end
50
+
51
+ desc "Release #{name} gem (#{version})"
52
+ task :release => [ :test, :package ] do
53
+ sh %{gem push pkg/#{name}-#{version}.gem}
54
+ end
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'spacewar'
4
+ Spacewar.play
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ "Name","Transparent Color","Transparent Color(Hex)"
2
+ "Frame1","-1","FFFFFFFF"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
File without changes
Binary file
Binary file
@@ -0,0 +1,2 @@
1
+ "Name","Transparent Color","Transparent Color(Hex)"
2
+ "Frame1","-1","FFFFFFFF"
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,4 @@
1
+ "Name","Transparent Color","Transparent Color(Hex)"
2
+ "Frame1","-1","FFFFFFFF"
3
+ "Copy_Frame1","-1","FFFFFFFF"
4
+ "Copy_Copy_Frame1","-1","FFFFFFFF"
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,9 @@
1
+ libdir = File.dirname(__FILE__)
2
+ $LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)
3
+
4
+ module Spacewar
5
+ VERSION = '0.0.1'
6
+ ROOT = File.dirname(__FILE__)
7
+ end
8
+
9
+ require 'spacewar/spacewar'
@@ -0,0 +1,217 @@
1
+ require 'gosu'
2
+ require 'chingu'
3
+
4
+ # TODO - I'd like to move these includes into the Spacewar module
5
+ include Gosu
6
+ include Chingu
7
+
8
+ module Chingu
9
+ ROOT = Spacewar::ROOT
10
+ end
11
+
12
+ module Spacewar
13
+ G_CONST = 2000
14
+
15
+ SCREEN_WIDTH = 1280
16
+ SCREEN_HEIGHT = 800
17
+
18
+ class Game < Chingu::Window
19
+ def initialize
20
+ super(Spacewar::SCREEN_WIDTH, Spacewar::SCREEN_HEIGHT)
21
+
22
+ Image.autoload_dirs << File.join(ROOT, 'media')
23
+
24
+ self.input = {:esc => :exit}
25
+
26
+ @planet = Planet.create
27
+
28
+ @player1 = Player.create({:holding_right => :turn_right,
29
+ :holding_left => :turn_left,
30
+ :holding_up => :accelerate},
31
+ :zorder => 2,
32
+ :x => 180,
33
+ :y => 240,
34
+ :image => 'Starfighter_p1.bmp')
35
+
36
+ @player2 = Player.create({:holding_d => :turn_right,
37
+ :holding_a => :turn_left,
38
+ :holding_w => :accelerate},
39
+ :zorder => 2,
40
+ :x => 400,
41
+ :y => 240,
42
+ :image => 'Starfighter_p2.bmp')
43
+ @score = 0
44
+ @score_text = Chingu::Text.create("Score: #{@score}", :x => 10, :y => 10, :zorder => 55, :size=>20)
45
+ end
46
+
47
+ def update
48
+ super
49
+
50
+ if rand(100) < 4 && Star.all.size < 25
51
+ Star.create
52
+ end
53
+
54
+ #
55
+ # Collide @player with all instances of class Star
56
+ #
57
+ @player1.each_collision(Star) do |player, star|
58
+ star.destroy
59
+ @score+=10
60
+ end
61
+
62
+ @player2.each_collision(Star) do |player, star|
63
+ star.destroy
64
+ @score-=5
65
+ end
66
+
67
+ @player1.adjust_gravity(@planet)
68
+ @player2.adjust_gravity(@planet)
69
+
70
+ Star.all.each{|star| star.adjust_gravity(@planet)}
71
+
72
+ @player1.each_collision(Player) do |player1, player2|
73
+ if player2 == @player2
74
+ player1.destroy
75
+ player2.destroy
76
+ @player1 = Player.create({:holding_right => :turn_right,
77
+ :holding_left => :turn_left,
78
+ :holding_up => :accelerate},
79
+ :zorder => 2,
80
+ :x => 180,
81
+ :y => 240,
82
+ :image => 'Starfighter_p1.bmp')
83
+ @player2 = Player.create({:holding_d => :turn_right,
84
+ :holding_a => :turn_left,
85
+ :holding_w => :accelerate},
86
+ :zorder => 2,
87
+ :x => 400,
88
+ :y => 240,
89
+ :image => 'Starfighter_p2.bmp')
90
+ end
91
+ end
92
+
93
+ @planet.each_collision(Player) do |planet, player|
94
+ player.destroy
95
+ @score-=10000
96
+ end
97
+
98
+ @score_text.text = "Score: #{@score}"
99
+ self.caption = "Chingu Game - " + @score_text.text
100
+ end
101
+ end
102
+
103
+ # extend game object with gravity features
104
+ class Chingu::GameObject
105
+ def adjust_gravity(source)
106
+ # Calculate vector to source
107
+ vect_x = -(self.x - source.x)
108
+ vect_y = -(self.y - source.y)
109
+
110
+ # Get length of vector to source
111
+ length = (vect_x**2 + vect_y**2)**0.5
112
+
113
+ # Calculate unit vector
114
+ vect_x = vect_x/length
115
+ vect_y = vect_y/length
116
+
117
+ # Diminish unit vector as 1/r**2
118
+ vect_x *= (1/length ** 2)
119
+ vect_y *= (1/length ** 2)
120
+
121
+ # Scale to strength of gravity and apply
122
+ self.velocity_x += vect_x * Spacewar::G_CONST
123
+ self.velocity_y += vect_y * Spacewar::G_CONST
124
+ end
125
+ end
126
+
127
+ class Player < Chingu::GameObject
128
+ has_trait :bounding_circle, :debug => $DEBUG
129
+ has_traits :collision_detection, :effect, :velocity
130
+
131
+ def initialize(input, options={})
132
+ super(options)
133
+ @image = Image[options[:image]]
134
+ self.input = input
135
+ self.max_velocity = 1
136
+ end
137
+
138
+ def accelerate
139
+ self.velocity_x += Gosu::offset_x(self.angle, 0.5) * self.max_velocity
140
+ self.velocity_y += Gosu::offset_y(self.angle, 0.5) * self.max_velocity
141
+ end
142
+
143
+ def turn_right
144
+ # The same can be achieved without trait 'effect' as: self.angle += 4.5
145
+ rotate(4.5)
146
+ end
147
+
148
+ def turn_left
149
+ # The same can be achieved without trait 'effect' as: self.angle -= 4.5
150
+ rotate(-4.5)
151
+ end
152
+
153
+ def update
154
+ self.velocity_x *= 0.99 # dampen the movement
155
+ self.velocity_y *= 0.99
156
+
157
+ @x %= $window.width # wrap around the screen
158
+ @y %= $window.height
159
+ end
160
+ end
161
+
162
+ class Planet < Chingu::GameObject
163
+ has_trait :bounding_circle, :debug => true
164
+ has_trait :collision_detection
165
+
166
+ def initialize(options = {})
167
+ super(:zorder => 1)
168
+ @image = Image["planet.png"]
169
+ self.color = Gosu::Color.new(0xff000000)
170
+ self.color.red = rand(255 - 40) + 40
171
+ self.color.green = rand(255 - 40) + 40
172
+ self.color.blue = rand(255 - 40) + 40
173
+ self.x = $window.width / 2
174
+ self.y = $window.height / 2
175
+
176
+ cache_bounding_circle
177
+ end
178
+ end
179
+
180
+ class Star < Chingu::GameObject
181
+ has_trait :bounding_circle, :debug => $DEBUG
182
+ has_traits :collision_detection, :velocity
183
+
184
+ def initialize(options={})
185
+ super(:zorder => 1)
186
+ @animation = Chingu::Animation.new(:file => media_path("Star.png"), :size => [25,25])
187
+ @image = @animation.next
188
+ self.color = Gosu::Color.new(0xff000000)
189
+ self.color.red = rand(255 - 40) + 40
190
+ self.color.green = rand(255 - 40) + 40
191
+ self.color.blue = rand(255 - 40) + 40
192
+ self.x = rand * $window.width
193
+ self.y = rand * $window.height
194
+ self.velocity_x = rand(10)
195
+ self.velocity_y = rand(10)
196
+
197
+ #
198
+ # A cached bounding circle will not adapt to changes in size, but it will follow objects X / Y
199
+ # Same is true for "cache_bounding_box"
200
+ #
201
+ cache_bounding_circle
202
+ end
203
+
204
+ def update
205
+ @x %= $window.width # wrap around the screen
206
+ @y %= $window.height
207
+
208
+ # Move the animation forward by fetching the next frame and putting it into @image
209
+ # @image is drawn by default by GameObject#draw
210
+ @image = @animation.next
211
+ end
212
+ end
213
+
214
+ def self.play
215
+ Game.new.show
216
+ end
217
+ end
@@ -0,0 +1,10 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+
5
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
6
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
7
+ require 'spacewar'
8
+
9
+ class Test::Unit::TestCase
10
+ end
@@ -0,0 +1,7 @@
1
+ require 'helper'
2
+
3
+ class TestSpacewar < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spacewar
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Edward Ocampo-Gooding
8
+ - John Duff
9
+ - Justin Bowes
10
+ - Chris Saunders
11
+ - Schwab
12
+ - Pranav Singh
13
+ - Dwayne Litzenberger
14
+ - Jean Claude Batista
15
+ autorequire:
16
+ bindir: bin
17
+ cert_chain: []
18
+
19
+ date: 2009-12-24 00:00:00 -05:00
20
+ default_executable: spacewar
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: chingu
24
+ type: :runtime
25
+ version_requirement:
26
+ version_requirements: !ruby/object:Gem::Requirement
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ version: 0.6.7
31
+ version:
32
+ description: A brave group-effort by the gentlemen at Ottawa.rb (aka OGRE), spacewar is a legitimate heir to the glory that is the original game you likely played on an xt or more ancient beast of a machine.
33
+ email: edward@edwardog.net
34
+ executables:
35
+ - spacewar
36
+ extensions: []
37
+
38
+ extra_rdoc_files: []
39
+
40
+ files:
41
+ - Rakefile
42
+ - bin/spacewar
43
+ - lib/media/background1.png
44
+ - lib/media/bullet.png
45
+ - lib/media/bullet_hit.wav
46
+ - lib/media/circle.png
47
+ - lib/media/city1.csv
48
+ - lib/media/city1.png
49
+ - lib/media/city2.png
50
+ - lib/media/droid.bmp
51
+ - lib/media/enemy_bullet.png
52
+ - lib/media/explosion.wav
53
+ - lib/media/fire_bullet.png
54
+ - lib/media/fireball.png
55
+ - lib/media/foo
56
+ - lib/media/laser.wav
57
+ - lib/media/Parallax-scroll-example-layer-0.png
58
+ - lib/media/Parallax-scroll-example-layer-1.png
59
+ - lib/media/Parallax-scroll-example-layer-2.png
60
+ - lib/media/Parallax-scroll-example-layer-3.png
61
+ - lib/media/particle.png
62
+ - lib/media/plane.csv
63
+ - lib/media/plane.png
64
+ - lib/media/planet.png
65
+ - lib/media/rect.png
66
+ - lib/media/ruby.png
67
+ - lib/media/saucer.csv
68
+ - lib/media/saucer.gal
69
+ - lib/media/saucer.png
70
+ - lib/media/spaceship.png
71
+ - lib/media/Star.png
72
+ - lib/media/Starfighter.bmp
73
+ - lib/media/Starfighter_p1.bmp
74
+ - lib/media/Starfighter_p2.bmp
75
+ - lib/media/stickfigure.bmp
76
+ - lib/media/stickfigure.png
77
+ - lib/media/video_games.png
78
+ - lib/media/wood.png
79
+ - lib/spacewar/spacewar.rb
80
+ - lib/spacewar.rb
81
+ - test/helper.rb
82
+ - test/test_spacewar.rb
83
+ has_rdoc: false
84
+ homepage: http://github.com/edward/spacewar
85
+ licenses: []
86
+
87
+ post_install_message:
88
+ rdoc_options: []
89
+
90
+ require_paths:
91
+ - lib
92
+ required_ruby_version: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ version:
98
+ required_rubygems_version: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: "0"
103
+ version:
104
+ requirements: []
105
+
106
+ rubyforge_project: spacewar
107
+ rubygems_version: 1.3.5
108
+ signing_key:
109
+ specification_version: 3
110
+ summary: There are two spaceships, a planet, gravity, missiles, and lasers. Do the math.
111
+ test_files: []
112
+