Submission
[ruby]# Based on: Script by MicKo
# Changes: 5 of 5 lines added, 1 of 3 lines modified
class Bitmap
#--------------------------------------------------------------------------
# credit for this goes to Trickster, as it's taken from the MACL
def draw_circle(x, y, radius, color = Color.new(255, 255, 255, 255))
for i in (x - radius)..(x + radius) # MOD
sa = (x - i).abs # ADD
x_ = i < x ? x - sa : i == x ? x : x + sa # ADD
y_ = Integer((radius ** 2 - sa ** 2) ** 0.5) # ADD
self.fill_rect(x_, y - y_, 1, y_ * 2, color) # ADD
end # ADD
end
#-------------------------------------------------------------------------
end
class Scene_OurScene
#--------------------------------------------------------------------------
def initialize(level = 1)
@level = level
@sprite = Sprite.new
@sprite.x = 304
@sprite.y = 224
@sprite.bitmap = Bitmap.new(32, 32)
@sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(196, 196, 196))
@hole_sprite = Sprite.new
@hole_sprite.x = 484
@hole_sprite.y = 89
@hole_sprite.bitmap = Bitmap.new(32, 32)
@hole_sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(72, 120, 0))
@hole_sprite.ox = @hole_sprite.bitmap.width / 2
@hole_sprite.oy = @hole_sprite.bitmap.height / 2
@hole_sprite.z = @sprite.z - 1
@speed = [9, 27]
@current_speed = @speed[0]
@score = 0
@score_max = (level ** 1.5 * 20).to_i
@score_sprite = Sprite.new
@score_sprite.bitmap = Bitmap.new("Score: #{@score_max}".size * Font.default_size, 40)
@score_sprite.x = 10
@score_sprite.bitmap.draw_text(0,0, "Score: #{@score_max}".size * Font.default_size, 40, "Score: #{@score}", 0)
@hole_timer = 10 - (level - 1) * 0.1
@timer_sprite = Sprite.new
@timer_sprite.x = 630 - @hole_timer.to_s.size * Font.default_size
@timer_sprite.y = @score_sprite.y = 5
@timer_sprite.z = @score_sprite.z = @sprite.z + 1 # MOD (@score_sprite.z = @sprite.z + 1)
@timer_sprite.bitmap = Bitmap.new("Time: #{@hole_timer.to_i}".size * Font.default_size, 40)
end
#--------------------------------------------------------------------------
# please leave this alone if you don't know what you're doing
def draw_sprite(sprite, type)
case type
when 0
end
end
#--------------------------------------------------------------------------
def main
Graphics.transition
until $scene != self
Input.update
Graphics.update
update
end
Graphics.freeze
@sprite.dispose
@hole_sprite.dispose
@score_sprite.dispose
end
#--------------------------------------------------------------------------
def update
@hole_timer -= 1 if Graphics.frame_count % Graphics.frame_rate == 0
@hole_sprite.angle = (@hole_sprite.angle + 2) % 360
# transparency handler
if Input.press?(Input::A)
@sprite.opacity -= 2 unless @sprite.opacity <= 128
else
@sprite.opacity += 2 unless @sprite.opacity == 255
end
# boost handler
if Input.press?(Input::X)
if @sprite.opacity == 255
@current_speed += 1 unless @current_speed == @speed[1]
else
@current_speed -= 1 unless @current_speed == @speed[0]
end
else
@current_speed -= 1 unless @current_speed == @speed[0]
end
speed = @current_speed
# exit handlers
if Input.press?(Input::C) || Input.press?(Input::B)
$scene = nil
end
# movement handlers
if Input.press?(Input::LEFT)
speed /= 1.4 if Input.press?(Input::DOWN) or Input.press?(Input::UP)
@sprite.x -= speed
@sprite.x = 0 if @sprite.x < 0
end
if Input.press?(Input::DOWN)
speed /= 1.4 if Input.press?(Input::LEFT) or Input.press?(Input::RIGHT)
@sprite.y += speed
@sprite.y = 448 if @sprite.y > 448
end
if Input.press?(Input::UP)
speed /= 1.4 if Input.press?(Input::LEFT) or Input.press?(Input::RIGHT)
@sprite.y -= speed
@sprite.y = 0 if @sprite.y < 0
end
if Input.press?(Input::RIGHT)
speed /= 1.4 if Input.press?(Input::DOWN) or Input.press?(Input::UP)
@sprite.x += speed
@sprite.x = 608 if @sprite.x > 608
end
# sprite's visuals handler
if @current_speed == @speed[0]
@sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(196, 196, 196))
elsif @current_speed == @speed[1]
@sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(255, 128, 0))
end
# handles collision with hole
if collision_between?(@sprite, @hole_sprite)
@score += 1
@score_sprite.bitmap.clear
@score_sprite.bitmap.draw_text(0, 0, "Score: #{@score_max}".size * Font.default_size, 40, "Score: #{@score}", 0)
@hole_sprite.x = 16 + rand(608)
@hole_sprite.y = 16 + rand(448)
@speed[1] -= 1 if @speed[1] > @speed[0] + 1 && @score % 5 == 0
@current_speed = @current_speed > @speed[0] ? @speed[1] : @speed[0]
$scene = Scene_OurScene.new(@level + 1) if @score >= @score_max
end
if @hole_timer < 0
end
end
#--------------------------------------------------------------------------
def collision_between?(object1, object2, size=[32, 32])
if (object1.x + size[0]).between?(object2.x - 8, object2.x + 40) &&
(object1.y + size[1]).between?(object2.y - 8, object2.y + 40)
return true
end
return false
end
#--------------------------------------------------------------------------
end
[/ruby]
[ruby]# Based on: Script by MicKo
# Changes: 5 of 5 lines added, 1 of 3 lines modified
class Bitmap
#--------------------------------------------------------------------------
# credit for this goes to Trickster, as it's taken from the MACL
def draw_circle(x, y, radius, color = Color.new(255, 255, 255, 255))
for i in (x - radius)..(x + radius) # MOD
sa = (x - i).abs # ADD
x_ = i < x ? x - sa : i == x ? x : x + sa # ADD
y_ = Integer((radius ** 2 - sa ** 2) ** 0.5) # ADD
self.fill_rect(x_, y - y_, 1, y_ * 2, color) # ADD
end # ADD
end
#-------------------------------------------------------------------------
end
class Scene_OurScene
#--------------------------------------------------------------------------
def initialize(level = 1)
@level = level
@sprite = Sprite.new
@sprite.x = 304
@sprite.y = 224
@sprite.bitmap = Bitmap.new(32, 32)
@sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(196, 196, 196))
@hole_sprite = Sprite.new
@hole_sprite.x = 484
@hole_sprite.y = 89
@hole_sprite.bitmap = Bitmap.new(32, 32)
@hole_sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(72, 120, 0))
@hole_sprite.ox = @hole_sprite.bitmap.width / 2
@hole_sprite.oy = @hole_sprite.bitmap.height / 2
@hole_sprite.z = @sprite.z - 1
@speed = [9, 27]
@current_speed = @speed[0]
@score = 0
@score_max = (level ** 1.5 * 20).to_i
@score_sprite = Sprite.new
@score_sprite.bitmap = Bitmap.new("Score: #{@score_max}".size * Font.default_size, 40)
@score_sprite.x = 10
@score_sprite.bitmap.draw_text(0,0, "Score: #{@score_max}".size * Font.default_size, 40, "Score: #{@score}", 0)
@hole_timer = 10 - (level - 1) * 0.1
@timer_sprite = Sprite.new
@timer_sprite.x = 630 - @hole_timer.to_s.size * Font.default_size
@timer_sprite.y = @score_sprite.y = 5
@timer_sprite.z = @score_sprite.z = @sprite.z + 1 # MOD (@score_sprite.z = @sprite.z + 1)
@timer_sprite.bitmap = Bitmap.new("Time: #{@hole_timer.to_i}".size * Font.default_size, 40)
end
#--------------------------------------------------------------------------
# please leave this alone if you don't know what you're doing
def draw_sprite(sprite, type)
case type
when 0
end
end
#--------------------------------------------------------------------------
def main
Graphics.transition
until $scene != self
Input.update
Graphics.update
update
end
Graphics.freeze
@sprite.dispose
@hole_sprite.dispose
@score_sprite.dispose
end
#--------------------------------------------------------------------------
def update
@hole_timer -= 1 if Graphics.frame_count % Graphics.frame_rate == 0
@hole_sprite.angle = (@hole_sprite.angle + 2) % 360
# transparency handler
if Input.press?(Input::A)
@sprite.opacity -= 2 unless @sprite.opacity <= 128
else
@sprite.opacity += 2 unless @sprite.opacity == 255
end
# boost handler
if Input.press?(Input::X)
if @sprite.opacity == 255
@current_speed += 1 unless @current_speed == @speed[1]
else
@current_speed -= 1 unless @current_speed == @speed[0]
end
else
@current_speed -= 1 unless @current_speed == @speed[0]
end
speed = @current_speed
# exit handlers
if Input.press?(Input::C) || Input.press?(Input::B)
$scene = nil
end
# movement handlers
if Input.press?(Input::LEFT)
speed /= 1.4 if Input.press?(Input::DOWN) or Input.press?(Input::UP)
@sprite.x -= speed
@sprite.x = 0 if @sprite.x < 0
end
if Input.press?(Input::DOWN)
speed /= 1.4 if Input.press?(Input::LEFT) or Input.press?(Input::RIGHT)
@sprite.y += speed
@sprite.y = 448 if @sprite.y > 448
end
if Input.press?(Input::UP)
speed /= 1.4 if Input.press?(Input::LEFT) or Input.press?(Input::RIGHT)
@sprite.y -= speed
@sprite.y = 0 if @sprite.y < 0
end
if Input.press?(Input::RIGHT)
speed /= 1.4 if Input.press?(Input::DOWN) or Input.press?(Input::UP)
@sprite.x += speed
@sprite.x = 608 if @sprite.x > 608
end
# sprite's visuals handler
if @current_speed == @speed[0]
@sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(196, 196, 196))
elsif @current_speed == @speed[1]
@sprite.bitmap.fill_rect(0, 0, 32, 32, Color.new(255, 128, 0))
end
# handles collision with hole
if collision_between?(@sprite, @hole_sprite)
@score += 1
@score_sprite.bitmap.clear
@score_sprite.bitmap.draw_text(0, 0, "Score: #{@score_max}".size * Font.default_size, 40, "Score: #{@score}", 0)
@hole_sprite.x = 16 + rand(608)
@hole_sprite.y = 16 + rand(448)
@speed[1] -= 1 if @speed[1] > @speed[0] + 1 && @score % 5 == 0
@current_speed = @current_speed > @speed[0] ? @speed[1] : @speed[0]
$scene = Scene_OurScene.new(@level + 1) if @score >= @score_max
end
if @hole_timer < 0
end
end
#--------------------------------------------------------------------------
def collision_between?(object1, object2, size=[32, 32])
if (object1.x + size[0]).between?(object2.x - 8, object2.x + 40) &&
(object1.y + size[1]).between?(object2.y - 8, object2.y + 40)
return true
end
return false
end
#--------------------------------------------------------------------------
end
[/ruby]