ゲームを作ろう! テキストアドベンチャーその1 テキストアドベンチャーゲームを作ろう!


その3 見た目をもっとゲームっぽく!」で、戦闘前に会話を設定してみました。
これを使えば、選択肢を選びながらプレイするテキストアドベンチャーゲームが作れそうです。
魔王戦の前の魔王城探索はテキストアドベンチャーゲームっぽくする、というのも良さそうだし。

まず、簡単な例を考えてみましょう。

勇者の前に、扉A、扉B、扉Cがある。
扉A→部屋Aに入る。中には何もなかった。扉の前に戻ろう。
扉B→部屋Bに入る。宝箱を発見した。中には、鍵が入っていた。他には何もないので扉の前に戻ろう。
扉C→部屋Cに入る。中には、鍵がかかった扉があった。鍵がないと先に進めないので扉の前に戻り、部屋Bで鍵を取っていたら先に進む。

要するに、部屋Bで鍵ゲット→部屋Cの扉を開ける が正解ルートです。
部屋Cに入った時に、条件分岐が起こりますね。
プログラムではどう書けば良いでしょうか。
「鍵を持っているか、持っていないか」はどう判断するか?

色々と方法はあるでしょうが、ここでは、勇者にHPのような内部数値を設定します。
Key = 0
を初期値(鍵を持っていない状態)として、部屋Bに入ったら、
Key = 1
に変更します。
その状態で部屋Cに入ったら、

If Key = 0 Then
  (扉の前に戻る)
EndIf
If Key = 1 Then
  (先に進む)
EndIf

というように分岐させればOKのはずです。
↓例によって長いので折りたたみにしてあります。

GraphicsWindow.Title = "勇者VS魔王 魔王城探索"
GraphicsWindow.Width = 600
GraphicsWindow.Height = 400
GraphicsWindow.BackgroundColor = haikeicolor

haikeicolor = "black"
mojicolor = "white"

'メッセージ表示位置
massagewindowX = 130 'メッセージウィンドウのX座標
massagewindowY = 280 'メッセージウィンドウのY座標

GraphicsWindow.FontName = "メイリオ"

'メッセージウィンドウの枠
GraphicsWindow.PenColor = mojicolor
GraphicsWindow.DrawRectangle(massagewindowX - 2, massagewindowY - 2, 365, 100)

'アイテムウィンドウの枠
itemwindowX = 370
itemwindowY = 10
GraphicsWindow.PenColor = mojicolor
GraphicsWindow.DrawRectangle(itemwindowX - 2, itemwindowY - 2, 200, 80)
GraphicsWindow.BrushColor = "DarkSlateGray"
GraphicsWindow.FillRectangle(itemwindowX - 5, itemwindowY - 5, 80, 18)
GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(itemwindowX + 11, itemwindowY - 4, "アイテム")

'居場所ウィンドウの枠
basyowindowX = 10
basyowindowY = 10
GraphicsWindow.DrawRectangle(basyowindowX - 2, basyowindowY - 2, 150, 80)
GraphicsWindow.BrushColor = "DarkSlateGray"
GraphicsWindow.FillRectangle(basyowindowX - 5, basyowindowY - 5, 80, 18)
GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(basyowindowX + 14, basyowindowY - 4, "現在地")

'背景用座標設定
haikeiX = 0
haikeiY = 90
haikeisizeX = 600
haikeisizeY = 183

'ボタン設定
GraphicsWindow.FontSize = 18
GraphicsWindow.BrushColor = "black"
tobira1 = Controls.AddButton("左の扉", 500, 280)
tobira2 = Controls.AddButton("中央の扉", 500, 320)
tobira3 = Controls.AddButton("右の扉", 500, 360)
For i = 1 to 10 'ここから、それぞれの部屋の会話用ボタン
  heya1[i] = Controls.AddButton("|>", 520, 360)
Endfor
For i = 1 to 10
  heya2[i] = Controls.AddButton("|>", 520, 360)
Endfor
For i = 1 to 10
  heya3[i] = Controls.AddButton("|>", 520, 360)
Endfor
'左の部屋探索用
hidari1Yes = Controls.AddButton("探索する", 500, 280)
hidari1No = Controls.AddButton("出る", 500, 320)
hidari2Yes = Controls.AddButton("探索する", 500, 280)
hidari2No = Controls.AddButton("出る", 500, 320)
'中央の部屋探索用
chuou1Yes = Controls.AddButton("探索する", 500, 280)
chuou1No = Controls.AddButton("出る", 500, 320)
chuou2Yes = Controls.AddButton("探索する", 500, 280)
chuou2No = Controls.AddButton("出る", 500, 320)
'右の部屋探索用
migigoldYes = Controls.AddButton("使う", 500, 280)
migisilYes = Controls.AddButton("使う", 500, 280)
miniNo = Controls.AddButton("出る", 500, 320)
migi2goldYes = Controls.AddButton("金色の鍵", 500, 280)
migi2silYes = Controls.AddButton("銀色の鍵", 500, 320)

'ボタン初期表示設定。tobira1-3だけ表示したままで他は隠す
For i = 1 to 10
  Controls.HideControl(heya1[i])
Endfor
For i = 1 to 10
  Controls.HideControl(heya2[i])
Endfor
For i = 1 to 10
  Controls.HideControl(heya3[i])
Endfor
Controls.HideControl(hidari1Yes)
Controls.HideControl(hidari1No)
Controls.HideControl(hidari2Yes)
Controls.HideControl(hidari2No)
Controls.HideControl(chuou1Yes)
Controls.HideControl(chuou1No)
Controls.HideControl(chuou2Yes)
Controls.HideControl(chuou2No)
Controls.HideControl(migigoldYes)
Controls.HideControl(migisilYes)
Controls.HideControl(miniNo)
Controls.HideControl(migi2goldYes)
Controls.HideControl(migi2silYes)

'フラグ設定用の変数
Goldkey = 0 'アイテム「金色の鍵」をもっているかどうか
Silverkey = 0 'アイテム「銀色の鍵」をもっているかどうか
itemnumber = 0 '所持しているアイテムの数
hidaritakara = 0  '左の部屋の宝箱の裏を見たかどうか
chuotakara = 0  '中央の部屋の宝箱の裏を見たかどうか

'アイテム表示位置
item1X = itemwindowX + 11 '1つ目のアイテム表示位置X座標
item1Y = itemwindowY + 15 '1つ目のアイテム表示位置Y座標
item2X = itemwindowX + 11 '2つ目のアイテム表示位置X座標
item2Y = itemwindowY + 40 '2つ目のアイテム表示位置Y座標

'勇者のメッセージウィンドウ横の顔グラフィック。開始時に勇者の顔を表示
yuusyakaoimage1 = "http://farm3.staticflickr.com/2861/34019110651_b5d2da3fb4_b.jpg"
GraphicsWindow.DrawImage(yuusyakaoimage1, massagewindowX - 110, massagewindowY)

'開始時のメッセージウィンドウ内セリフ
GraphicsWindow.FontSize = 17
GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(massagewindowX, massagewindowY, "目の前に、三つの扉がある。")
GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")

'開始時の背景
tobiraheyabg = "https://farm3.staticflickr.com/2934/33405150203_0b19e43e55_b.jpg"
GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示

'開始時の場所
GraphicsWindow.BrushColor = mojicolor
basyohyoujiwindowX = basyowindowX + 8
basyohyoujiwindowY = basyowindowY + 15
GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")

Controls.ButtonClicked = OnClick

'左の扉に入った かつ 「金色の鍵」を持っていない
Sub OnClick
  If Controls.LastClickedButton = tobira1 And Goldkey = 0 And hidaritakara = 0 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は左の扉に入った。")
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "左の部屋")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(heya1[1])
  ElseIf Controls.LastClickedButton = heya1[1]Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は宝箱を見つけた!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "宝箱を開いた。")
    Controls.HideControl(heya1[1])
    Controls.ShowControl(heya1[2])
  ElseIf Controls.LastClickedButton = heya1[2] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は「金色の鍵」を見つけた!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "「金色の鍵」を手に入れた。")
    Goldkey = Goldkey + 1 '変数Goldkeyを1にすることで金色の鍵を持っていることにする
    Controls.HideControl(heya1[2])
    Controls.ShowControl(heya1[3])
    If itemnumber = 0 Then 'アイテムを持っている数が0の時は、金色の鍵をアイテム欄の一番上に表示
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(item1X, item1Y, "金色の鍵")
      itemnumber = itemnumber + 1
    ElseIf itemnumber = 1 Then 'アイテムを持っている数が1の時は、金色の鍵をアイテム欄の二番目に表示
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(item2X, item2Y, "金色の鍵")
      itemnumber = itemnumber + 1
    EndIf
  ElseIf Controls.LastClickedButton = heya1[3] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "この部屋をもう少し探索する?")
    Controls.HideControl(heya1[3])
    Controls.ShowControl(hidari1Yes)
    Controls.ShowControl(hidari1No)
  ElseIf Controls.LastClickedButton = hidari1Yes Then '探索する場合の台詞
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "宝箱の蓋の裏に、")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "「銀は地の底深く落ちる」と書いてある。")
    hidaritakara = hidaritakara + 1
    Controls.HideControl(hidari1Yes)
    Controls.HideControl(hidari1No)
    Controls.ShowControl(heya1[4])
  ElseIf Controls.LastClickedButton = heya1[4] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "どういうことだろうか。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "他には何もないので扉の前に戻ろう。")
    Controls.HideControl(heya1[4])
    Controls.ShowControl(heya1[5])
  ElseIf Controls.LastClickedButton = hidari1No Then '探索しない場合の台詞
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "扉の前に戻ろう。")
    Controls.HideControl(hidari1Yes)
    Controls.HideControl(hidari1No)
    Controls.ShowControl(heya1[6])
  ElseIf Controls.LastClickedButton = heya1[5] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya1[5])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  ElseIf Controls.LastClickedButton = heya1[6] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya1[6])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf
  
'左の扉に入った かつ 「金色の鍵」を持っている かつ 宝箱裏を見ていない
  If Controls.LastClickedButton = tobira1 And Goldkey = 1 And hidaritakara = 0 Then
    GraphicsWindow.BrushColor = haikeicolor
     GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "左の部屋")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "左の部屋の宝箱は開けたが、")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "もっと探索してみるか?")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(hidari2Yes)
    Controls.ShowControl(hidari2No)
  ElseIf Controls.LastClickedButton = hidari2Yes Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "宝箱の蓋の裏に、")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "「銀は地の底深く落ちる」と書いてある。")
    hidaritakara = hidaritakara + 1
    Controls.HideControl(hidari2Yes)
    Controls.HideControl(hidari2No)
    Controls.ShowControl(heya1[7])
  ElseIf Controls.LastClickedButton = heya1[7] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "どういうことだろうか。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "他には何もないので扉の前に戻ろう。")
    Controls.HideControl(heya1[7])
    Controls.ShowControl(heya1[8])
  ElseIf Controls.LastClickedButton = hidari2No Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "扉の前に戻ろう。")
    Controls.HideControl(hidari2Yes)
    Controls.HideControl(hidari2No)
    Controls.ShowControl(heya1[8])
  ElseIf Controls.LastClickedButton = heya1[8] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya1[8])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf
  
'左の扉に入った かつ 「金色の鍵」を持っている かつ 宝箱裏を見た
  If Controls.LastClickedButton = tobira1 And Goldkey = 1 And hidaritakara = 1 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "この部屋の探索は済ませている。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "他の部屋を探索しよう。")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(heya1[9])
  ElseIf Controls.LastClickedButton = heya1[9] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya1[9])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf
    
'中央の扉に入った かつ 「銀色の鍵」を持っていない
  If Controls.LastClickedButton = tobira2 And Silverkey = 0 And chuotakara = 0 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は中央の扉に入った。")
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "中央の部屋")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(heya2[1])
  ElseIf Controls.LastClickedButton = heya2[1] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は宝箱を見つけた!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "宝箱を開いた。")
    Controls.HideControl(heya2[1])
    Controls.ShowControl(heya2[2])
  ElseIf Controls.LastClickedButton = heya2[2] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は「銀色の鍵」を見つけた!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "「銀色の鍵」を手に入れた。")
    Silverkey = Silverkey + 1 '変数Silverkeyを1にすることで銀色の鍵を持っていることにする
    If itemnumber = 0 Then
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(item1X, item1Y, "銀色の鍵")
      itemnumber = itemnumber + 1
    ElseIf itemnumber = 1 Then
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(item2X, item2Y, "銀色の鍵")
      itemnumber = itemnumber + 1
    EndIf
    Controls.HideControl(heya2[2])
    Controls.ShowControl(heya2[3])
ElseIf Controls.LastClickedButton = heya2[3] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "この部屋をもう少し探索する?")
    Controls.HideControl(heya2[3])
    Controls.ShowControl(chuou1Yes)
    Controls.ShowControl(chuou1No)
  ElseIf Controls.LastClickedButton = chuou1Yes Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "宝箱の蓋の裏に、")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "「黄金は先の道を開く」と書いてある。")
    chuotakara = chuotakara + 1
    Controls.HideControl(chuou1Yes)
    Controls.HideControl(chuou1No)
    Controls.ShowControl(heya2[4])
  ElseIf Controls.LastClickedButton = heya2[4] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "どういうことだろうか。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "他には何もないので扉の前に戻ろう。")
    Controls.HideControl(heya2[4])
    Controls.ShowControl(heya2[5])
  ElseIf Controls.LastClickedButton = chuou1No Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "扉の前に戻ろう。")
    Controls.HideControl(chuou1Yes)
    Controls.HideControl(chuou1No)
    Controls.ShowControl(heya2[5])
  ElseIf Controls.LastClickedButton = heya2[5] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya2[5])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf

'中央の扉に入った かつ 「銀色の鍵」を持っている かつ 宝箱裏を見ていない
  If Controls.LastClickedButton = tobira2 And Silverkey = 1 And chuotakara = 0 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "中央の部屋")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "中央の部屋の宝箱は開けたが、")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "もっと探索してみるか?")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(chuou2Yes)
    Controls.ShowControl(chuou2No)
  ElseIf Controls.LastClickedButton = chuou2Yes Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "宝箱の蓋の裏に、")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "「黄金は先の道を開く」と書いてある。")
    chuotakara = chuotakara + 1
    Controls.HideControl(chuou2Yes)
    Controls.HideControl(chuou2No)
    Controls.ShowControl(heya2[6])
  ElseIf Controls.LastClickedButton = heya2[6] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "どういうことだろうか。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "他には何もないので扉の前に戻ろう。")
    Controls.HideControl(heya2[6])
    Controls.ShowControl(heya2[7])
  ElseIf Controls.LastClickedButton = chuou2No Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "扉の前に戻ろう。")
    Controls.HideControl(chuou2Yes)
    Controls.HideControl(chuou2No)
    Controls.ShowControl(heya2[7])
  ElseIf Controls.LastClickedButton = heya2[7] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya2[7])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf
  
'中央の扉に入った かつ 「銀色の鍵」を持っている かつ 宝箱裏を見た
  If Controls.LastClickedButton = tobira2 And Silverkey = 1 And chuotakara = 1 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "この部屋の探索は済ませている。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "他の部屋を探索しよう。")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(heya2[8])
  ElseIf Controls.LastClickedButton = heya2[8] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya2[8])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf

'右の扉に入った かつ 鍵を持っていない
  If Controls.LastClickedButton = tobira3  And Goldkey = 0 And Silverkey = 0 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "右の部屋")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "部屋の中には、錠前で閉ざされた扉があった。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "鍵がないと、開きそうにない。")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(heya3[1])
  ElseIf Controls.LastClickedButton = heya3[1] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "鍵を探すために戻ろう。")
    Controls.HideControl(heya3[1])
    Controls.ShowControl(heya3[2])
  ElseIf Controls.LastClickedButton = heya3[2] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya3[2])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf
  
'右の扉に入った かつ 1つだけ鍵を持っている
If Controls.LastClickedButton = tobira3 And itemnumber = 1 Then '「itemnumber = 1」で、鍵を1つだけ持っていると判定する
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "右の部屋")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "部屋の中には、錠前で閉ざされた扉があった。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "持っている鍵を使う? それとも探索に戻る?")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(miniNo)
    If Goldkey = 1 And Silverkey = 0 Then
      Controls.ShowControl(migigoldYes)
    ElseIf Goldkey = 0 And Silverkey = 1 Then
      Controls.ShowControl(migisilYes)
    EndIf
  ElseIf Controls.LastClickedButton = migigoldYes Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "解錠することができた!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "扉を開き、先に進もう。(おわり)")
    Controls.HideControl(miniNo)
    Controls.HideControl(migigoldYes)
  ElseIf Controls.LastClickedButton = migisilYes Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "なんと、落とし穴が開き勇者は奈落の底へ!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "銀色の鍵は罠だった……。 BAD END")
    Controls.HideControl(miniNo)
    Controls.HideControl(migisilYes)
  ElseIf Controls.LastClickedButton = miniNo Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻ろう。")
    Controls.HideControl(miniNo)
    Controls.ShowControl(heya3[3])
  ElseIf Controls.LastClickedButton = heya3[3] Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.DrawImage(tobiraheyabg, haikeiX, haikeiY) '扉の部屋背景表示
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "三つの扉の前")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "三つの扉の前に戻った。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの扉に入る?")
    Controls.HideControl(heya3[3])
    Controls.ShowControl(tobira1)
    Controls.ShowControl(tobira2)
    Controls.ShowControl(tobira3)
  EndIf
  
  '右の扉に入った かつ 2つ鍵を持っている
  If Controls.LastClickedButton = tobira3 And itemnumber = 2 Then '「itemnumber = 2」で、鍵を2つ持っていると判定する
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(haikeiX, haikeiY, haikeisizeX, haikeisizeY) '背景消去用
    GraphicsWindow.FillRectangle(basyohyoujiwindowX, basyohyoujiwindowY, 135, 20) '場所消去用
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(basyohyoujiwindowX, basyohyoujiwindowY, "右の部屋")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "部屋の中には、錠前で閉ざされた扉があった。")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "どの鍵を使おうか?")
    Controls.HideControl(tobira1)
    Controls.HideControl(tobira2)
    Controls.HideControl(tobira3)
    Controls.ShowControl(migi2goldYes)
    Controls.ShowControl(migi2silYes)
  ElseIf Controls.LastClickedButton = migi2goldYes Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "解錠することができた!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "扉を開き、先に進もう。(おわり)")
    Controls.HideControl(migi2goldYes)
    Controls.HideControl(migi2silYes)
  ElseIf Controls.LastClickedButton = migi2silYes Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 360, 90) 'メッセージウィンドウ台詞消去用
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "なんと、落とし穴が開き勇者は奈落の底へ!")
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 30, "銀色の鍵は罠だった……。 BAD END")
    Controls.HideControl(migi2goldYes)
    Controls.HideControl(migi2silYes)
  EndIf
EndSub


rpg

rpg

rpg

黒地に白文字のみですが、とりあえず「鍵(Key)の有無により分岐するテキストアドベンチャーゲーム」になりました。
上のプログラムでは、Keyの値が常に表示されていますが、本当のゲームの場合は隠しパラメータということで表示させないことになるでしょうね。
もちろん、鍵以外のアイテムも設定して様々な分岐が作れるはずです(分岐を増やすとその分記述は大変になっていきますが……w)
背景を加えたり会話を増やせば、もっとゲームっぽくなるはず。

次:その2 隠しパラメータでフラグ管理


▲TOPへ戻る