×

[PR]この広告は3ヶ月以上更新がないため表示されています。
ホームページを更新後24時間以内に表示されなくなります。

ゲームを作ろう! 脱出ゲームその1 マウスクリックで探索


画面上のカーソルを動かし、気になる場所をクリックして調べる、いわゆる「ポイントアンドクリックゲーム」を作ってみましょう。
逆転●判でいえば探偵パートの「調べる」です。
ここでは、流行り(?)の脱出ゲームを作ってみます。
部屋とか何かに閉じ込められたというシチュエーションで、脱出するための探索をするゲームです。

これまでのテキストアドベンチャーや地下迷宮などと考え方はだいたい同じですが、違うところは「ボタンを設置し、押すボタンを変化させることで話を進めていく」のではなく、「マウスをクリックして反応するポイントを設置し、それによって話を進める」ということです。
更に、隠しパラメータを上手く使えば、
・アイテムを拾ったり、アイテムの有無でフラグ進行を決める
・同じ場所を調べたとしても、2度目からは会話内容を変える
ということも可能ですね。

何にせよ、まずは
・脱出ゲームの仕掛けを考える
・調べるための背景を作る
ここからですね。
背景は今回も、頑張ってGraphicsWindowだけで描いています。
比較的単純に描けそうなものだけ描きました。
そして描けたもので仕掛けを考えるという本末転倒感。

脱出

脱出

ひとまず、2画面分描きました。部屋の左側と右側です。
ドアに対してタンスが大きいとか、テレビなのか何なのかわからない謎の物体にしか見えないとか、そこらへんは目をつぶってください。
テレビの下から何かはみ出していますが、これはゲームの仕掛けとして描いたもので、描画をミスった訳ではありません。
余力があるなら、家具に影を付けて立体感を増すのも良いと思います。

脱出

脱出

描いた背景の座標が重要です。
例えば、ドアを調べた時は、

If (マウスの座標が250≦X≦330 かつ 20≦Y≦200) Then
  (ドアを調べた時のメッセージを表示)
EndIf

というようなプログラムになるからです。
または、

If (マウスでクリックした場所の色=ドアの色) Then
  (ドアを調べた時のメッセージを表示)
EndIf

マウスでクリックした場所の色=ドアの色、の時にドアと判定する方法です。
この場合はもちろん、この画面上ではドアに塗った色を他の場所に塗ってはいけません。
とはいえ、これだと座標を指定する必要がない上、形が四角形以外の時に記述が楽です。
こちらも併用しましょう。

マウスの座標の色を取得するには、

mX = GraphicsWindow.MouseX
mY = GraphicsWindow.MouseY
GraphicsWindow.GetPixel(mX, mY)

これでOKですが、GraphicsWindow.GetPixel(mX, mY)で取得できる色は、Small Basicで使える色見本一覧に掲載した、頭に「#」が付く6文字の文字列の方なのです。
例えば「RosyBrown」という色の場合、GraphicsWindow.GetPixelで取得すると「#BC8F8F」になります。
だから、ドアの色が「RosyBrown」の時、ドアを調べた時のメッセージを表示するには、

If GraphicsWindow.GetPixel(mX, mY) = "#BC8F8F" Then
  (ドアを調べた時のメッセージを表示)
EndIf

こうなります。取得した色は数字ではなく文字列なので、"#BC8F8F"のように""で囲う必要があることに注意。
ただ、これはドアの板部分だけで、ドアノブ部分を加えていません。ドアノブの色を「Or」で条件に追加すれば完成ですね。
……もっとも、ドアは四角形なので、素直に座標で指定してもそんなにめんどくさくないですね。
この絵ではタンスのように、三角形が混ざっている図形の時に、色で指定してみると良いでしょう。

話が長くなりましたが、試しに、左の部屋のみ&ドアを調べた時のみのプログラムを動かしてみましょう。
以下では、ドアについては座標で指定しています。

GraphicsWindow.Title = "脱出ゲーム"
GraphicsWindow.Width = 640
GraphicsWindow.Height = 480

mojicolor = "White"
bgcolor = "Black"

GraphicsWindow.FontName = "Meiryo UI"
GraphicsWindow.FontSize = 16
GraphicsWindow.BackgroundColor = bgcolor

'メッセージウィンドウ
GraphicsWindow.PenColor = mojicolor
GraphicsWindow.DrawRectangle(5, 305, 430, 170)
GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(8, 308, "ここはどこだ?")

'アイテム欄
GraphicsWindow.DrawRectangle(445, 305, 190, 170)
GraphicsWindow.BrushColor = "MediumBlue"
GraphicsWindow.FillRectangle(447, 307, 55, 25)
GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(448, 308, "アイテム")

'左の部屋-----------------------------------

GraphicsWindow.BrushColor = "Cornsilk"
GraphicsWindow.FillRectangle(0, 0, 640, 300)

GraphicsWindow.PenColor = "BurlyWood"
GraphicsWindow.DrawLine(200, 0, 200, 200)
GraphicsWindow.DrawLine(200, 200, 100, 300)
GraphicsWindow.DrawLine(200, 200, 640, 200)

'ドア
GraphicsWindow.BrushColor = "RosyBrown"
GraphicsWindow.FillRectangle(250, 20, 80, 180)
GraphicsWindow.BrushColor = "Bisque"
GraphicsWindow.FillEllipse(315, 110, 10, 10)

'タンス
GraphicsWindow.BrushColor = "Sienna"
GraphicsWindow.FillRectangle(410, 100, 150, 100)
GraphicsWindow.FillRectangle(360, 150, 150, 100)
GraphicsWindow.FillTriangle(410, 100, 360, 150, 410, 150)
GraphicsWindow.FillTriangle(510, 200, 510, 250, 560, 200)
GraphicsWindow.PenColor = "Maroon"
GraphicsWindow.DrawRectangle(360, 150, 150, 100)
GraphicsWindow.DrawLine(410, 100, 410-50, 100+50)
GraphicsWindow.DrawLine(560, 100, 560-50, 100+50)
GraphicsWindow.DrawLine(560, 200, 560-50, 200+50)
GraphicsWindow.DrawLine(410, 100, 560, 100)
GraphicsWindow.DrawLine(560, 100, 560, 200)
GraphicsWindow.DrawLine(360, 200, 360+150, 200)
GraphicsWindow.BrushColor = "Bisque"
GraphicsWindow.FillEllipse(360+70, 150+70, 10, 10)
GraphicsWindow.FillEllipse(360+70, 150+20, 10, 10)

'ゴミ箱
GraphicsWindow.BrushColor = "Aquamarine"
GraphicsWindow.FillEllipse(130, 220, 30, 20)
GraphicsWindow.FillEllipse(130, 270, 30, 20)
GraphicsWindow.FillRectangle(130, 220+15, 30, 270-220)
GraphicsWindow.PenColor = "DarkCyan"
GraphicsWindow.DrawEllipse(130, 220, 30, 20)

'左の部屋 ここまで-----------------------------------

GraphicsWindow.BrushColor = "black"
kaisibutton = Controls.AddButton("探索", 380, 420)

Controls.ButtonClicked = Tansaku

Sub Tansaku
  Controls.HideControl(kaisibutton)
  GraphicsWindow.MouseDown = TMouseDown
EndSub

Sub TMouseDown
  If Mouse.IsLeftButtonDown Then
    mX = GraphicsWindow.MouseX
    mY = GraphicsWindow.MouseY
    If 250 <= mX And mX <= 330 And 20 <= mY And mY <= 200 Then
      GraphicsWindow.BrushColor = bgcolor
      GraphicsWindow.FillRectangle(7, 307, 410, 150)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(8, 308, "ドアだ。")
      GraphicsWindow.DrawText(8, 308+30, "鍵がかけられていて、ドアノブをいじってみても全く開く様子がない。")
    EndIf
  EndIf
EndSub

脱出

脱出

「探索」ボタンを押すと、ドア部分をクリック時にメッセージが出るようになるプログラムです。
「探索」を押すまでは、ドアをクリックしてもメッセージは出ません。
「探索」を押すと、「探索」ボタンが消えてドアを調べた時にメッセージが出るようになります。

次回は、この部屋以外も調べたり、オープニングの会話を付けてみたりとボリュームUPしてみましょう。

次:その2 他の部屋も探索しよう


▲TOPへ戻る