Skip to content

Instantly share code, notes, and snippets.

@jwoertink
Last active May 8, 2017 16:03
Show Gist options
  • Save jwoertink/3ecfe1f85fbe3ed2f0ff20cedeef6acc to your computer and use it in GitHub Desktop.
Save jwoertink/3ecfe1f85fbe3ed2f0ff20cedeef6acc to your computer and use it in GitHub Desktop.
require "../src/sdl"
require "../src/image"
SDL.init(SDL::Init::VIDEO); at_exit { SDL.quit }
SDL::IMG.init(SDL::IMG::Init::PNG); at_exit { SDL::IMG.quit }
SCREEN_WIDTH = 640
SCREEN_HEIGHT = 480
window = SDL::Window.new("SDL tutorial", SCREEN_WIDTH, SCREEN_HEIGHT)
renderer = SDL::Renderer.new(window, SDL::Renderer::Flags::ACCELERATED | SDL::Renderer::Flags::PRESENTVSYNC)
class Dot
WIDTH = 20
HEIGHT = 20
VELOCITY = 10
def initialize(@renderer : SDL::Renderer, @mPosX = 0, @mPosY = 0, @mVelX = 0, @mVelY = 0)
image = SDL::IMG.load(File.join(__DIR__, "data", "dot.bmp"))
image.color_key = {0, 255, 255}
@texture = SDL::Texture.from(image, @renderer)
end
def handle_event(event : SDL::Event)
if event.keydown? && event.repeat == 0
case event.sym
when .up?
@mVelY -= VELOCITY
when .down?
@mVelY += VELOCITY
when .left?
@mVelX -= VELOCITY
when .right?
@mVelX += VELOCITY
end
elsif event.keyup? && event.repeat == 0
case event.sym
when .up?
@mVelY += VELOCITY
when .down?
@mVelY -= VELOCITY
when .left?
@mVelX += VELOCITY
when .right?
@mVelX -= VELOCITY
end
end
end
def move
@mPosX += @mVelX
if (@mPosX < 0) || (@mPosX + WIDTH > SCREEN_WIDTH)
@mPosX -= @mVelX
end
@mPosY += @mVelY
if (@mPosY < 0) || (@mPosY + HEIGHT > SCREEN_HEIGHT)
@mPosY -= @mVelY
end
end
def render
@renderer.copy(@texture, nil, {@mPosX, @mPosY, @texture.width, @texture.height})
end
end
dot = Dot.new(renderer)
loop do
case event = SDL::Event.poll
when SDL::Event::Quit
break
when SDL::Event::Keyboard
dot.handle_event(event)
end
dot.move
renderer.draw_color = {255, 255, 255, 255}
renderer.clear
dot.render
renderer.present
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment