require 'oekaki'
include Math
L = 400
R1 = 150; R2 = (L - R1 * 2) / 2 - 5
STP1 = (PI / 180) * 0.5; STP2 = (PI / 180) * 10
Oekaki.app width: L, height: L do
draw do
clear
end
i = 0
timer(20) do
x = L / 2 + (R1 * cos(STP1 * i) + R2 * cos(STP2 * i))
y = L / 2 - (R1 * sin(STP1 * i) + R2 * sin(STP2 * i))
color(0, 65535, 0)
arc(false, x, y, 3, 3, 0, 64 * 360)
i += 1
end
key_in do |w, e|
Gtk.main_quit if e.keyval == Gdk::Keyval::GDK_Return
end
end
require 'oekaki'
Oekaki.app width: 300, height: 300 do
draw do
white = color(65535, 65535, 65535)
red = color(65535, 0, 0)
blue = color(0, 0, 65535)
rectangle(true, 0, 0, 300, 300, white)
ar = []
50.times {ar << [rand(300), rand(300)]} #線の数は50本(配列に座標を入れる)
polygon(true, ar, blue) #多角形を描く
text("Polygon", 180, 260, 20 * 1000, red) #文字列を描く
img = get_pic(0, 0, 300, 300) #画像の取り込み
save_pic(img, "sample.png") #画像ファイルに保存
end
end
require 'oekaki'
L = 400
Oekaki.app width: L, height: L, title: "Circle Fall" do
timer(10) do
show = proc do |y|
x = rand(L - 10)
color(rand(65535), rand(65535), rand(65535))
arc(true, x, y, 10, 10, 0, 64 * 360)
end
show.call(0) if rand < 0.15
show.call(rand(L - 10)) if rand < 0.05
img = get_pic(0, 0, L, L)
show_pic(img, 0, 1)
color(0, 0, 0)
rectangle(true, 0, 0, L, 1)
end
key_in do |w, e|
Gtk.main_quit if e.keyval == Gdk::Keyval::GDK_Return
end
draw do
color(0, 0, 0)
rectangle(true, 0, 0, L, L)
end
end
require 'oekaki'
L = 500; R = 25
Oekaki.app width: L, height: L do
draw do
clear
end
quit_window = proc do
make_window do |w|
w.title = ""
b = do
set_size_request(120, 40)
add(Gtk::Label.new.set_markup('<span size="x-large">Quit!</span>'))
signal_connect("clicked") {Gtk.main_quit}
end
add(b)
end
end
do |w, e|
quit_window.call if e. != 1
color(rand(65536), rand(65536), rand(65536))
arc(true, e.x - R, e.y - R, R * 2, R * 2, 0, 64 * 360)
end
end
require 'oekaki'
Width, Height = if ARGV.size == 2
ARGV.map(&:to_i)
else
[1000, 700]
end
Max_r, Min_r = 40, 10
ColorMax = 65535
MaxNum = 60
class Circle
def initialize(ob)
@slot = ob
@width, @height = Width, Height
renewal
@y = rand(@height)
end
attr_reader :height
attr_writer :y
def renewal
@width, @height = @slot.get_window_size
@max_r = rand(Max_r - Min_r) + Min_r
@x = rand(@width)
@y = -rand(@max_r)
@color = [rand(ColorMax), rand(ColorMax), rand(ColorMax)]
@fall_step = 1 + rand * 3
@r = 1
@r_step = rand * 0.2 + 0.8
end
def paint
@slot.color(@color[0], @color[1], @color[2])
@slot.circle(true, @x, @y, @r)
@y += @fall_step
@r += @r_step
@r_step *= -1 if @r > @max_r or @r < 1
renewal if @y > @height + Max_r
true
end
end
Oekaki.app width: Width, height: Height, resizable: true do
circles = []
MaxNum.times {circles << Circle.new(self)}
black = color(0, 0, 0)
draw do
clear
end
timer(60) do
clear(black)
circles.each(&:paint)
end
window_changed do
clear(black)
circles.each do |c|
c.renewal
c.y = rand(c.height)
c.paint
end
end
end