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 メソッドまでを示します。
─────────────
#! ruby -Ks
require'vr/vruby'
require 'vr/vrcontrol'
require 'vr/vrhandler'

class MyForm < VRForm
include VRMouseFeasible
include VRDrawable

def initialize
@hazure = 0 ; @atari = 0
@g_mes = ["正解!!","違うよ","全部みつけたのであなたの勝ち!",
"3回間違えたのであなたの負け!"]
@pz = [
[[250,75,300,125],[570,75,620,125]],
[[75,160,95,190],[395,160,410,190]],
[[140,330,186,350],[460,330,498,350]]
]
@sumi = [[0,0,0,0],[0,0,0,0]]
end

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

@pz というのが間違いエリアの座標を収めた変数(配列)です。
間違いは3箇所なんで、この配列には3つの要素(配列)があります。でもその中にさらにそれぞれ2つづつ入ってます。
これは左右の絵の同じ箇所を分けて収めてるんです。(ああ説明が下手でごめんなさい)

プレイヤーは間違い探しゲームの画面に表示された2枚の絵のどちらをクリックしても良いことにしようと思ったんです。
もっとわかりやすいように下に示します。

matigai_s2.jpg

長くなりそうなんで連載にしたいと思いますが、一応その他の変数の説明も簡単にしておきます。

@atari と @hazure はクリックした場所が合ってた回数と間違ってた回数を保存します。

@g_mes はゲームで使うメッセージをまとめたものです。

@sumi はクリックした場所が正しかったときに後始末として使うんですが、その説明は次回にします。

次回は今回の配列をどう使ったかのお話です。

今回もどこか間違ってたら暖かいツッコミをお願いいたします


人気ブログランキングに参加してます。
ポチッ!としてくださると嬉しいです
にほんブログ村 IT技術ブログ プログラム・プログラマへ
にほんブログ村

 
posted by Hol_nice at 20:32| Comment(0) | TrackBack(0) | プログラム | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください

この記事へのトラックバック
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。