イライラ系ミニゲームモドキ

さっきのサンプルに小さい四角と判定を追加してみた。
ちゃんとした絵にするには、がんばって配列を作るか、グラフィックのデータを添付する必要があるから、テキトーなプログラムは四角でもしょうがない。
こうやってコピペで動くプログラムが作れるのだからよしとしよう。

# DXRuby Ver 0.0.2 サンプルプログラム
require 'dxruby'

Window.caption = "サンプル"

# 配列からimageオブジェクトを生成
image = Image.createFromArray(32,32,[255,255,255,255]*32*32)
image2 = Image.createFromArray(32,32,[255,255,0,0]*32*32)

x = 100.0
y = 100.0
dx = 0.0
dy = 0.0

# 弾クラス
class Tama
  @@tama_image = Image.createFromArray(16,16,[255,255,255,0]*16*16)
  def initialize
    @x = rand(640)
    @y = 0
    @angle = (rand(90)+45) * 2 * Math::PI / 360
    @speed = rand(5)+3
  end

  def move
    @x = @x + Math.cos(@angle) * @speed
    @y = @y + Math.sin(@angle) * @speed
    Window.draw(@x, @y, 0, @@tama_image)
  end

  attr_reader :x, :y
end

# 弾配列
tama = []

# メインループ
Window.loop do

  # 弾生成
  if rand(4) == 0 then
    tama.push(Tama.new)
  end

  # 弾移動と破棄
  tama.delete_if do |t|
    t.move
    t.y > 480
  end

  # カーソルとの位置関係から方向を求めて加速
  mx, my = Input.mousePos
  dx = dx + Math.cos(Math.atan2((my - y - 16), (mx - x - 16))) / 2.0
  dy = dy + Math.sin(Math.atan2((my - y - 16), (mx - x - 16))) / 2.0

  # 画面から出たらはねかえる
  if x + dx < 0 or x + dx > 639 - image.width then
    dx = -dx
  end
  if y + dy < 0 or y + dy > 479 - image.height then
    dy = -dy
  end

  # 移動
  x = x + dx
  y = y + dy

  # 微妙に減速していく
  dx = dx * 0.99
  dy = dy * 0.99

  # 判定
  flag = false
  tama.each do |t|
    if t.x < (x + 31) and (t.x + 15) > x and 
       t.y < (y + 31) and (t.y + 15) > y then
       flag = true
       break
    end
  end

  # 描画
  if flag == false then
    Window.draw(x, y, 0, image)
  else
    Window.draw(x, y, 0, image2)
  end

  # エスケープキーで終了
  if Input.key(K_ESCAPE) == true then
    break
  end
end

ところでDXRuby0.0.2は
http://sourceforge.jp/projects/dxruby/releases/
からダウンロードできる。
RubyDirectXがインストールされている環境なら、dxruby.soとスクリプトのファイルを同じディレクトリにおいて実行すれば動く。
はずだ。