イライラ系ミニゲームモドキ
さっきのサンプルに小さい四角と判定を追加してみた。
ちゃんとした絵にするには、がんばって配列を作るか、グラフィックのデータを添付する必要があるから、テキトーなプログラムは四角でもしょうがない。
こうやってコピペで動くプログラムが作れるのだからよしとしよう。
# 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/
からダウンロードできる。
RubyとDirectXがインストールされている環境なら、dxruby.soとスクリプトのファイルを同じディレクトリにおいて実行すれば動く。
はずだ。