×

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

ゲームを作ろう! 脱出ゲームその2 他の部屋も探索しよう


前回に引き続き、脱出ゲームを作ります。
まず、オープニングを付けてみます。
今回は、タイトルを表示する開始画面を付けてみます。
タイトル画面でSpaceキーを押すとゲームを開始、という感じです。
これなら、タイトル画面でゲーム操作の説明を付けることもできますね。

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

mojicolor = "White"
bgcolor = "Black"

GraphicsWindow.FontName = "Meiryo UI"
GraphicsWindow.FontSize = 60
GraphicsWindow.BackgroundColor = "CadetBlue"
GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(180, 80, "脱出ゲーム")
GraphicsWindow.FontSize = 20
GraphicsWindow.DrawText(160, 300, "Spaceキーを押すとゲームを開始します。")

脱出

投げやりですが、タイトル画面を付けました。
「Spaceキーを押すとゲームを開始」は、「GraphicsWindow.KeyDown」を使います。
これで、キーボード上のキーが押されたときにイベントを発生させることができます。

GraphicsWindow.KeyDown = StartKey

として、サブルーチン「StartKey」を作ってみます。

GraphicsWindow.FontName = "Wingdings 3"
OPkaiwa1 = Controls.AddButton("u", 380, 430)
OPkaiwa2 = Controls.AddButton("u", 380, 430)

Controls.HideControl(OPkaiwa1)
Controls.HideControl(OPkaiwa2)

GraphicsWindow.FontName = "Meiryo UI"
GraphicsWindow.KeyDown = StartKey
Sub StartKey
  If GraphicsWindow.LastKey = "Space" Then
    
    GraphicsWindow.BackgroundColor = bgcolor
    GraphicsWindow.BrushColor = bgcolor
    GraphicsWindow.FillRectangle(0, 0, GraphicsWindow.Width, GraphicsWindow.Height)
        
    'メッセージウィンドウ
    GraphicsWindow.PenColor = mojicolor
    GraphicsWindow.DrawRectangle(5, 305, 430, 170)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(8, 308, "ここはどこだ?")
    Controls.ShowControl(OPkaiwa1)

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

    Controls.ShowControl(OPkaiwa1)
    Controls.ButtonClicked = Tansaku
    tansakuheya = 1
  EndIf
EndSub

GraphicsWindow.LastKey = "Space"」は、「最後に押されたキーがSpace」ということです。
これ以降に、表示したい画面を記述します。
最初は部屋の背景を表示せずに、あえて真っ暗な画面を表示させて、メッセージウィンドウの台詞を「ここはどこだ?」にしてみました。
ついでにここで、メッセージウィンドウやアイテム欄を表示させます。
ここから先のオープニング会話は、ボタンをクリックして進めていきますので、ここに
Controls.ButtonClicked = Tansaku」
つまりボタンをクリックした時のサブルーチン「Tansaku」を開始するように指定しました。
「OPkaiwa1」というボタンをここで表示するようにしています。このボタンを押すと、サブルーチン「Tansaku」内のオープニング会話が開始になるようにします。
最後の「tansakuheya = 1」は、探索している部屋を示す変数です。
探索している部屋を、1なら部屋の左側、2なら部屋の右側と区別するために記述しました。
これは後々で、部屋別に探索のイベントを記述する時に役立ちます。

ボタンをクリックした時のサブルーチン「Tansaku」では、部屋の背景を表示することになるのでやや長いです。

GraphicsWindow.FontSize = 16
GraphicsWindow.BrushColor = "black"
kaisibutton = Controls.AddButton("探索", 350, 430)
migibutton = Controls.AddButton("部屋の右側の探索", 290, 430)
hidaributton = Controls.AddButton("部屋の左側の探索", 290, 430)
GraphicsWindow.FontName = "Wingdings 3"
OPkaiwa1 = Controls.AddButton("u", 380, 430)
OPkaiwa2 = Controls.AddButton("u", 380, 430)

GraphicsWindow.FontName = "Meiryo UI"

Controls.HideControl(kaisibutton)
Controls.HideControl(migibutton)
Controls.HideControl(hidaributton)
Controls.HideControl(OPkaiwa1)
Controls.HideControl(OPkaiwa2)

Sub Tansaku
  Sound.PlayClick()
  If Controls.LastClickedButton = OPkaiwa1 Then 'オープニング会話1
    '部屋の左側背景-----------------------------------
    
    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 = bgcolor
    GraphicsWindow.FillRectangle(7, 307, 425, 150)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(8, 308, "眠っていたのだろうか。いつの間にか、こんな部屋に居た。")
    GraphicsWindow.DrawText(8, 308+30, "見知らぬ部屋だ。さっさと帰ろう。")
    Controls.HideControl(OPkaiwa1)
    Controls.ShowControl(OPkaiwa2)
  EndIf
  If Controls.LastClickedButton = OPkaiwa2 Then 'オープニング会話2
    GraphicsWindow.BrushColor = bgcolor
    GraphicsWindow.FillRectangle(7, 307, 425, 150)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(8, 308, "……ん? このドア、鍵がかかっている。")
    GraphicsWindow.DrawText(8, 308+30, "どうなっているんだ。")
    GraphicsWindow.DrawText(8, 308+60, "部屋を探索してみようか……。")
    Controls.HideControl(OPkaiwa2)
    Controls.ShowControl(kaisibutton)
  EndIf
    If Controls.LastClickedButton = kaisibutton Then '探索している部屋 1=左
    tansakuheya = 1
    GraphicsWindow.BrushColor = bgcolor
    GraphicsWindow.FillRectangle(7, 307, 425, 150)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(8, 308, "部屋を探索しよう。")
    Controls.HideControl(kaisibutton)
    Controls.ShowControl(migibutton)
    GraphicsWindow.MouseDown = TMouseDown
  EndIf
EndSub

ボタン「OPkaiwa1」を押すと同時に、背景を描いています。
また、メッセージウィンドウでは台詞を表示すると同時に、ボタン「OPkaiwa1」を消して、ボタン「OPkaiwa2」を表示し、次の会話に繋がるようにしました。
ボタン「OPkaiwa2」での会話が終わると、前回も登場した「kaisibutton」が表示されて、探索開始、となります。
探索開始と同時に「GraphicsWindow.MouseDown = TMouseDown」で、マウスをクリックした時のサブルーチン「TMouseDown」が動き出すという流れです。
また、Controls.ShowControl(migibutton)で、部屋の右側を探索するためのボタンも表示されます。これを押して部屋の右側に移動するという寸法です。

「部屋の右側に切り替える」を加えてみましょう。
「部屋の右側に切り替える」時は、「migibutton」というボタンを押すイベントなので、ボタンクリック時のサブルーチン「Tansaku」の中に記述を入れます。
この時に、変数tansakuheyaを2にすることも忘れずに。

  If Controls.LastClickedButton = migibutton Then '探索している部屋 2=右
    tansakuheya = 2
    GraphicsWindow.BrushColor = bgcolor
    GraphicsWindow.FillRectangle(7, 307, 425, 150)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(8, 308, "部屋の右側を探索しよう。")
    Controls.HideControl(migibutton)
    Controls.ShowControl(hidaributton)
    GraphicsWindow.MouseDown = TMouseDown
    
    '部屋の右側背景-----------------------------------
    GraphicsWindow.BrushColor = "Cornsilk"
    GraphicsWindow.FillRectangle(0, 0, 640, 300)

    GraphicsWindow.PenColor = "BurlyWood"
    GraphicsWindow.DrawLine(440, 0, 440, 200)
    GraphicsWindow.DrawLine(0, 200, 440, 200)
    GraphicsWindow.DrawLine(440, 200, 640, 300)
    
    '絵
    GraphicsWindow.BrushColor = "Goldenrod"
    GraphicsWindow.FillRectangle(20, 20, 80, 60)
    GraphicsWindow.BrushColor = "Snow"
    GraphicsWindow.FillRectangle(25, 25, 70, 50)
    GraphicsWindow.BrushColor = "PaleGreen"
    GraphicsWindow.FillRectangle(30, 30, 40, 15)
    GraphicsWindow.BrushColor = "PeachPuff"
    GraphicsWindow.FillEllipse(30, 50, 10, 10)
    GraphicsWindow.BrushColor = "SkyBlue"
    GraphicsWindow.FillEllipse(70, 40, 20, 20)
    GraphicsWindow.PenColor = "DarkSalmon"
    GraphicsWindow.DrawTriangle(40, 50, 90, 60, 50, 70)
    
    'テレビ下の紙切れ
    GraphicsWindow.BrushColor = "Gainsboro"
    GraphicsWindow.FillTriangle(240, 220, 248, 230, 260, 220)
    
    'テレビ
    GraphicsWindow.PenColor = "Black"
    GraphicsWindow.DrawRectangle(140, 50, 180, 150)
    GraphicsWindow.BrushColor = "SlateGray"
    GraphicsWindow.FillRectangle(140, 50, 180, 150)
    GraphicsWindow.FillRectangle(160, 70, 180, 150)
    GraphicsWindow.FillTriangle(140, 50+150, 160, 70+150, 160, 140)
    GraphicsWindow.FillTriangle(140+200-20, 50, 140+200-20, 70, 140+200, 70)
    GraphicsWindow.BrushColor = "DimGray"
    GraphicsWindow.FillRectangle(140+20+10, 50+20+10, 160, 100)
    GraphicsWindow.PenColor = "Black"
    GraphicsWindow.DrawRectangle(160, 70, 180, 150)
    GraphicsWindow.DrawLine(140, 50, 160, 70)
    GraphicsWindow.DrawLine(140, 50+150, 160, 70+150)
    GraphicsWindow.DrawLine(140+180, 50, 160+180, 70)

    '窓
    GraphicsWindow.BrushColor = "Beige"
    GraphicsWindow.FillTriangle(440+50, 20, 440+50+100, 20+50, 440+50+100, 20+50+50)
    GraphicsWindow.FillTriangle(440+50, 20, 440+50+100, 20+50+50, 440+50, 20+50)
    GraphicsWindow.PenColor = "Black"
    GraphicsWindow.DrawLine(440+50, 20, 440+50+100, 20+50)
    GraphicsWindow.DrawLine(440+50, 20+50, 440+50+100, 20+50+50)
    GraphicsWindow.DrawLine(440+50, 20, 440+50, 20+50)
    GraphicsWindow.DrawLine(440+50+50, 20+25, 440+50+50, 20+50+25)
    GraphicsWindow.DrawLine(440+50+100, 20+50, 440+50+100, 20+50+50)
    
    '部屋の右側背景ここまで-----------------------------------
  EndIf

ついでに、右側から左側に戻る時(ボタン「hidaributton」を押した時)もサブルーチン「Tansaku」内に書いておきます。
もちろんここでtansakuheya = 1に戻します。

  If Controls.LastClickedButton = hidaributton Then '探索している部屋 1=左
    tansakuheya = 1
    GraphicsWindow.BrushColor = bgcolor
    GraphicsWindow.FillRectangle(7, 307, 425, 150)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(8, 308, "部屋の左側を探索しよう。")
    Controls.ShowControl(migibutton)
    Controls.HideControl(hidaributton)
    GraphicsWindow.MouseDown = TMouseDown
    '部屋の左側背景-----------------------------------
    
    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)
    
    '部屋の左側背景 ここまで-----------------------------------
  EndIf

最後に、「部屋の右側の探索時のメッセージ表示」を加えます。
つまり、マウスクリック時のサブルーチン「TMouseDown」です。
前回は部屋の左側のドアを調べた時のメッセージを記述しました。
今回はとりあえず、「部屋の右側のテレビを調べた時にメッセージが出るようにする」ようにしてみましょうか。
テレビは四角形と三角形の組み合わせで描いています。
座標で位置指定するより、色で位置指定した方が楽です。
……ここで気付いた、テレビの色が他の場所と被っていることに。
テレビの色もこっそり修正します。

'テレビ
GraphicsWindow.PenColor = "DimGray"
GraphicsWindow.DrawRectangle(140, 50, 180, 150)
GraphicsWindow.BrushColor = "SlateGray"
GraphicsWindow.FillRectangle(140, 50, 180, 150)
GraphicsWindow.FillRectangle(160, 70, 180, 150)
GraphicsWindow.FillTriangle(140, 50+150, 160, 70+150, 160, 140)
GraphicsWindow.FillTriangle(140+200-20, 50, 140+200-20, 70, 140+200, 70)
GraphicsWindow.BrushColor = "DimGray"
GraphicsWindow.FillRectangle(140+20+10, 50+20+10, 160, 100)
GraphicsWindow.PenColor = "DimGray"
GraphicsWindow.DrawRectangle(160, 70, 180, 150)
GraphicsWindow.DrawLine(140, 50, 160, 70)
GraphicsWindow.DrawLine(140, 50+150, 160, 70+150)
GraphicsWindow.DrawLine(140+180, 50, 160+180, 70)

テレビを、DimGrayとSlateGrayのみで描き直し。
そして、マウスをクリックした時のサブルーチン「TMouseDown」を以下のようにします。

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

  If Mouse.IsLeftButtonDown And tansakuheya = 2 Then
    If iro = "#696969" Or iro = "#708090" Then '#696969 = DimGray  / #708090 = SlateGray
      GraphicsWindow.BrushColor = bgcolor
      GraphicsWindow.FillRectangle(7, 307, 425, 150)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(8, 308, "大きなテレビが置いてある。")
    EndIf
  EndIf
EndSub

前回のドアを調べた時の条件を、「Mouse.IsLeftButtonDown And tansakuheya = 1」に修正しました。
つまり、「tansakuheya = 1」で部屋左側を調べている時のみに変更しています。
そして「If Mouse.IsLeftButtonDown And tansakuheya = 2 Then」以下が今回の追加分です。
「tansakuheya = 2」で部屋右側という条件にして、マウスをクリックした場所の色がDimGrayまたはSlateGrayの時に「大きなテレビが置いてある。」というメッセージが表示されるようにしました。

脱出

この先は、
・他の場所をクリックした時にもメッセージを出すようにする。
・メッセージが長い時は、台詞送り用のボタンを用意して、メッセージをボタンをクリックした時のサブルーチン「Tansaku」に追加していく。メッセージが長い間は「tansakuheya = 0」にして、部屋を調べられないようにして、メッセージ終了と同時に「tansakuheya = 1又は2」に戻す
・他に、ゲームを進める為のフラグがあれば変数を設定して記述していく。
という作業が必要になります。
それは次回に。

次:その3 謎解きを作ろう


▲TOPへ戻る