2009年11月21日

Rubyの勉強19(クリックゲーム/間違い探し2)

クリックゲームの続きになります。
前回の記事とあわせてお読みください。

先にプログラムの続き(construct 以降)を示します。

─────────────
  def construct
self.caption = 'まちがいさがし v.0.1'
@font = @screen.factory.newfont('MS Pゴシック', 12)
@font2 = @screen.factory.newfont('MS Pゴシック', 18)
@bmp1 = SWin::Bitmap.loadFile("ms_buhin/ms_keshiki1.bmp")
@bmp2 = SWin::Bitmap.loadFile("ms_buhin/ms_keshiki2.bmp")
@maru_bmp = SWin::Bitmap.loadFile("ms_buhin/maru_btn1.bmp")
@batsu_bmp = SWin::Bitmap.loadFile("ms_buhin/batu_btn1.bmp")

addControl(VRStatic,'title_area','◆まちがいさがしゲーム◆',
30,15,220,30)
@title_area.setFont(@font2)
addControl(VRStatic,'setsu_area','3つの間違いを探してね!',
250,20,150,20)
@setsu_area.setFont(@font)
addControl(VRStatic,'atari_area','0',70,365,30,30)
@atari_area.setFont(@font2)
addControl(VRStatic,'hazure_area','0',170,365,30,30)
@hazure_area.setFont(@font2)
addControl(VRStatic,'kekka_area',"",250,365,250,30)
@kekka_area.setFont(@font2)

end

def self_paint
drawBitmap @bmp1,20,50
drawBitmap @bmp2,340,50
drawBitmap @maru_bmp,20,360
drawBitmap @batsu_bmp,120,360
end

def self_lbuttondown(shift, x, y)
atta = 0
3.times do |s|
if (@pz[s][0][0]..@pz[s][0][2]) === x and
(@pz[s][0][1]..@pz[s][0][3]) === y or
(@pz[s][1][0]..@pz[s][1][2]) === x and
(@pz[s][1][1]..@pz[s][1][3]) === y
@atari_area.caption = "#{@atari += 1}"
@pz[s] = @sumi
@kekka_area.caption = "#{@g_mes[0]}"
@kekka_area.caption = "#{@g_mes[2]}" if @atari == 3
atta = 1
end
end
if atta == 0
@hazure_area.caption = "#{@hazure += 1}"
@kekka_area.caption = "#{@g_mes[1]}"
@kekka_area.caption = "#{@g_mes[3]}" if @hazure == 3
end
self.refresh
end

end

VRLocalScreen.start(MyForm,100,100,670,450)

─────────────

あらためて画面見本はこんな感じです。
続きを読む
posted by Hol_nice at 17:32| Comment(0) | TrackBack(0) | プログラム | 更新情報をチェックする

2009年11月18日

Rubyの勉強18(クリックゲーム/間違い探し1)

ここまでのおさらいとして vruby の VRMouseFeasible を使ってクリックゲームを作ってみようと思います。
クリックゲームにもいろいろな種類がありますが、今回は間違い探しゲームにします。

仕様としては画面に2枚の絵を並べて表示して、左右の違う箇所をクリックすると判定結果が出るものとします。
今回は間違いは全部で3箇所あるものとします。

絵は適当にお絵描きソフトで描きました。
1枚描いて保存してから、元の絵に間違い部分を加筆して別名保存することで2枚の微妙に違う絵を作りました。

クリックの判定には例のごとくself_lbuttondown を使います。
クリックした座標が間違い部分の座標(一定の範囲を持つとします)の範囲内かどうかを判定させるんですが

絵を用意する段階で間違い部分の座標を意識して描くなんて難しいですよね。

それで自分は前に作った self_mousemove を使ってマウスポインタの位置を随時知らせるプログラムを応用することにしました。

今回のプログラム用に construct 部分だけを先に書いて本番と同じ画面(のレイアウト)を用意し、
その中に上のプログラムを設置しました。こんな感じです。

matigai_s1.jpg

これで画面に実際に並んだ絵の上にマウスのポインタをもっていくとx,y座標が得られます。
左下に座標表示の窓があるのが見えると思います。
絵の中の間違い部分を四角いエリアと捉えて、そのエリアの始点と終点にマウスを持っていって座標をメモっておきます。

上の画像の例だと、間違い判定用のエリアの(わかりやすいように赤い四角で示しました)左上隅が始点、右下隅が終点です。

matigai_s3.jpg

これらの座標を配列にまとめてみました。
initialize メソッドまでを示します。
続きを読む
posted by Hol_nice at 20:32| Comment(0) | TrackBack(0) | プログラム | 更新情報をチェックする

2009年11月13日

Rubyの勉強(番外編)範囲オブジェクトの罠?

範囲オブジェクトの扱いは初心者にはなんとなく難しいですね。
うっかりしていろいろハマリました(汗)

なので今回は主に自分のための備忘録です。

例えばこんな感じです。

hani_obj1.jpg

単純なミスばかりですけど意外とやってしまいます。

上から順に説明します。

続きを読む
posted by Hol_nice at 22:43| Comment(0) | TrackBack(0) | プログラム | 更新情報をチェックする