Added the trunk/branches/tags directories at repository root, and moved previous root into trunk/
git-svn-id: https://sfml.svn.sourceforge.net/svnroot/sfml/trunk@1002 4e206d99-4929-0410-ac5d-dfc041789085
This commit is contained in:
commit
2f524481c1
974 changed files with 295448 additions and 0 deletions
102
ruby/test/Tutorial.rb
Normal file
102
ruby/test/Tutorial.rb
Normal file
|
@ -0,0 +1,102 @@
|
|||
require 'RubySFML'
|
||||
include SFML
|
||||
|
||||
TURN = 180
|
||||
THRUST = 200
|
||||
|
||||
class Player < VSprite
|
||||
attr_reader :score
|
||||
|
||||
def initialize(image)
|
||||
super(image, image.w, image.h)
|
||||
@sb = SoundBuffer.new("media/Beep.wav")
|
||||
@beep = Sound.new(@sb)
|
||||
@score = 0
|
||||
end
|
||||
|
||||
def warp(x, y)
|
||||
self.x = x
|
||||
self.y = y
|
||||
end
|
||||
|
||||
def turn_left(time) super(TURN*time); end
|
||||
def turn_right(time) super(TURN*time); end
|
||||
def accelerate(time) super(upVector, THRUST*time); end
|
||||
def update(time)
|
||||
super(time)
|
||||
self.x %= 640
|
||||
self.y %= 480
|
||||
scale_speed(1.0 - 0.5*time)
|
||||
end
|
||||
|
||||
def collect(stars)
|
||||
stars.reject! { |star|
|
||||
if distance(star) < 35 then
|
||||
@score += 10
|
||||
@beep.play
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
class Star < TSprite
|
||||
def initialize(image)
|
||||
super(image, image.h, image.h)
|
||||
self.color = Color.new(rand(255 - 40) + 40, rand(255 - 40) + 40, rand(255 - 40) + 40, 255)
|
||||
self.x = rand * 640
|
||||
self.y = rand * 480
|
||||
self.subRect = IntRect.new(0, 0, image.h, image.h)
|
||||
@last_change = $clock.to_f
|
||||
end
|
||||
|
||||
def update(time)
|
||||
if $clock.to_f - @last_change >= 0.1 # Change every 10th of a second
|
||||
@tx = (@tx+1) % 10
|
||||
@last_change = $clock.to_f
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
$clock = Clock.new
|
||||
mode = VideoMode.new(640, 480, 32)
|
||||
win = RenderWindow.new(mode, "RubySFML Test", Window::Fullscreen)
|
||||
win.showMouseCursor(false)
|
||||
win.useVerticalSync(true)
|
||||
background_image = Image.new("media/Space.png")
|
||||
player_image = Image.new("media/Starfighter.png")
|
||||
star_image = Image.new("media/Star.png")
|
||||
|
||||
background = Sprite.new(background_image)
|
||||
player_image.createMaskFromColor(Color.new(255, 0, 255, 255))
|
||||
player = Player.new(player_image)
|
||||
player.warp(320, 240)
|
||||
stars = []
|
||||
10.times { stars << Star.new(star_image) }
|
||||
|
||||
# Simple game loop
|
||||
done = false
|
||||
while !done
|
||||
while e = win.getEvent()
|
||||
done = true if e.type == Event::Closed or
|
||||
(e.type == Event::KeyReleased and e.code == Key::Escape)
|
||||
end
|
||||
time = win.frameTime
|
||||
input = win.input
|
||||
player.turn_left(time) if input.isKeyDown(Key::Left)
|
||||
player.turn_right(time) if input.isKeyDown(Key::Right)
|
||||
player.accelerate(time) if input.isKeyDown(Key::Up)
|
||||
player.update(time)
|
||||
player.collect(stars)
|
||||
stars << Star.new(star_image) if rand(100) < 1 and stars.size < 10
|
||||
stars.each {|star| star.update(time) }
|
||||
|
||||
win.draw(background)
|
||||
stars.each {|star| win.draw(star) }
|
||||
win.draw(player)
|
||||
win.draw(Text.new("Score: #{player.score}", "", 20))
|
||||
win.display()
|
||||
end
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue