#!/usr/bin/ruby -w require "gosu" RED = Gosu::Color.argb(0xff_ff0000) GREEN = Gosu::Color.argb(0xff_00ff00) BLUE = Gosu::Color.argb(0xff_0000ff) WHITE = Gosu::Color.argb(0xff_ffffff) class PhysObj attr_accessor :xspeed, :yspeed, :xaccel, :yaccel, :ela, :x, :y attr_reader :width, :height def initialize(xspeed=0, yspeed=0, xaccel=0, yaccel=0.1, ela=-0.5, xpos=0, ypos=0) @x, @y = xpos, ypos @xspeed, @yspeed = xspeed, yspeed @xaccel, @yaccel = xaccel, yaccel @ela = ela @width, @height = 64, 64 end def physics(width, height) self.xspeed += self.xaccel self.yspeed += self.yaccel if( self.y >= height - self.height || self.y < 0 ) then self.yspeed *= self.ela end if( self.x >= width - self.width || self.x < 0 ) then self.xspeed *= self.ela end self.x += self.xspeed self.y += self.yspeed puts("#{self.x}, #{self.y} : #{self.xspeed}, #{self.yspeed}") end def render Gosu.draw_quad(self.x, self.y, RED, self.x + self.width, self.y, GREEN, self.x, self.y + self.height, BLUE, self.x + self.width, self.y + self.height, WHITE) end end class Game < Gosu::Window attr_accessor :caption attr_reader :width, :height def initialize(width, height, physobjs = []) super width, height @width, @height = width, height self.caption = "Test | #{width}x#{height}" @physobjs = physobjs end def update @physobjs.each do |obj| obj.physics(self.width, self.height) end end def draw @physobjs.each do |obj| obj.render end end end physobjs = [] for i in 0...1 do physobjs << PhysObj.new(4, 0, 0, 0.1, -0.8, i, 0) end game = Game.new(640, 480, physobjs) game.show