GTK+ で落書き 14(Ruby)


自作の Gem 'oekaki' を使っています。
oekaki | RubyGems.org | your community gem host
GTK+でお絵かきしてみた(Ruby) - Camera Obscura
 
oekaki_sample17.rb

require 'oekaki'

circles = []

check = ->(x, y, r) {
  return false if x < r or y < r or x > 500 - r or y > 500 - r
  circles.each do |x1, y1, r1|
    l = Math.sqrt((x1 - x) ** 2 + (y1 - y) ** 2)
    return false if l < r + r1
  end
  circles << [x, y, r]
  true
}

Oekaki.app width: 500, height: 500 do
  draw do
    clear(color(0xad * 256, 0xd8 * 256, 0xe6 * 256))    #lightblue
  end
  
  id = timer(100) do
    catch(:jump) {
      x = y = r = i = 0
      loop do
        x, y = rand(500), rand(500)
        r = rand(10..100)
        break if check.(x, y, r)
        i += 1
        if i > 10000
          timer_stop(id)
          throw(:jump)
        end
      end
      color(rand(65535), rand(65535), rand(65535))
      circle(true, x, y, r)
    }
    true
  end
end

つまらないものなのですけれど、じつは Kernel#rand の引数に Range オブジェクトを使ってみたかっただけなのでした…。一箇所だけ、わかりますかね。