×

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

ゲームを作ろう! ターン制バトルその2 勇者に行動させよう


「その1 魔王に行動させよう」につづいて、勇者の行動を決めましょう。
前回書いた、

(1)最初に表示されるのは、勇者の行動を選択する「戦う」「回復魔法」「防御」のボタンと、勇者のHPとMP、魔王のHP。

(2)ボタンを押して、勇者の行動を選択する。
(2-1)勇者「戦う」……80%で「通常攻撃」、魔王のHPを「通常攻撃」で与えたダメージ分減らす。20%で「会心の一撃」、魔王のHPを「会心の一撃」で与えたダメージ分減らす。
(2-2)勇者「回復魔法」……まず、勇者のMPが5以上かどうか判定し、5未満なら「MPが足りないので回復魔法は使えません」を表示しボタン選択に戻る。勇者のMPが5以上なら、勇者のHPを回復した後に、MPを-5する。
(2-3)勇者「攻撃魔法」……まず、勇者のMPが10以上かどうか判定し、10未満なら「MPが足りないので攻撃魔法は使えません」を表示しボタン選択に戻る。勇者のMPが10以上なら、魔王のHPを与えたダメージ分減らした後に、MPを-10する。

ここの部分をプログラムとして書いてみます。
ちなみに、(2)の後に魔王が行動するので、前回の「魔王の攻撃」ボタンも(1)で書いておき、すぐに
Controls.ShowControl(maouturn)
を使い画面上から消去します。
そうしないと、このプログラムを始めてすぐに「魔王の攻撃」ボタンを押してしまう人がいるかもしれませんからね。

後、以下では前回の「その1 魔王に行動させよう」プログラムでの反省を生かした変更点も少し加えています。

GraphicsWindow.Title = "勇者VS魔王"
GraphicsWindow.Width = 300
GraphicsWindow.Height = 200

haikeicolor = "white"
mojicolor = "black"

yuusyatuujou = 1000
yuusyakaisin = 2500
yuusyakaihuku = 10000
yuusyamahou = 4000

maoutuujou = 1400
maoumahou = 2800
maouhissatu = 5200

yuusyaHP = 20000
yuusyaMP = 30
maouHP = 30000

'メッセージ表示位置
massagewindowX = 10
massagewindowY = 140
yuusyaHPX = 230
yuusyaHPY = 10
yuusyaMPX = 230
yuusyaMPY = 30
maouHPX = 230
maouHPY = 60

GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(150, 10, "勇者の残りHP:")
GraphicsWindow.DrawText(150, 30, "勇者の残りMP:")
GraphicsWindow.DrawText(150, 60, "魔王の残りHP:")
GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, yuusyaHP)
GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, yuusyaMP)
GraphicsWindow.DrawText(maouHPX, maouHPY, maouHP)

ytatakau = Controls.AddButton("戦う", 10, 10)
ykaihuku = Controls.AddButton("回復魔法", 10, 40)
ymahou = Controls.AddButton("攻撃魔法", 10, 70)
GraphicsWindow.DrawText(10, 100, "*回復魔法は消費MP5、攻撃魔法は消費MP10")
maouturn = Controls.AddButton("魔王の攻撃", 10, 10)
Controls.HideControl(maouturn)

「その1 魔王に行動させよう」の冒頭部分を書き換えました。
Controls.HideControl(maouturn)」で「魔王の攻撃」ボタンを一時的に消しているため、上を実行しても「魔王の攻撃」ボタンは表示されません。
また、勇者関係の初期設定(初期HPと初期MP、ダメージ計算式など)の変数を加えています。
ただし数字は適当です。後で調整することになるでしょう。
他、メッセージ表示位置や、文字色なども変数にしました。これは、今後色々といじるかもしれない値だからです。

次は、3つのボタンを押した時の各行動……といきたいところですが、ここから先の行動は、勇者か魔王のHPがゼロになるまで繰り返しになりますね。
最初に、勇者のMPが5未満の時は回復魔法が使えません&勇者のMPが10未満の時は攻撃魔法が使えません、というプログラムを入れておく必要があります。
ですので、

If Controls.LastClickedButton = ymahou And yuusyaMP < 10 Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "MPが足りません。")
ElseIf Controls.LastClickedButton = ykaihuku And yuusyaMP < 5 Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "MPが足りません。")
Else

EndIf

これを最初に書いて、条件1「MPが5未満の時は回復魔法は使えません」、条件2「勇者のMPが10未満の時は攻撃魔法が使えません」を満たさない場合は魔王ターンには飛ばず、最初のコマンドが表示されたままにします。

さて、次は3つのボタンを押した時の各行動です。上のElseEndIfの間にはいるプログラムです。
まずは「戦う」です。
以下では80%の確率で通常攻撃、20%の確率で会心の一撃が出るように設定しました。
……会心の一撃の確率、ちょっと高いかな?

'勇者の行動その1 戦う(確率で通常・会心の一撃)
If Controls.LastClickedButton = ytatakau Then
  yuusyakougeki = Math.GetRandomNumber(10) '通常・会心の確率をランダム取得
  If 1 <= yuusyakougeki And yuusyakougeki <= 8 Then '通常攻撃80%
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者の攻撃!")
    GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
    ydamage = yuusyatuujou + Math.GetRandomNumber(101) - 1
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, ydamage)
    MaouHP = MaouHP - ydamage
    If MaouHP  <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "勇者の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(maouHPX, maouHPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(maouHPX, maouHPY, MaouHP)
      Controls.HideControl(ytatakau)
      Controls.HideControl(ykaihuku)
      Controls.HideControl(ymahou)
      Controls.ShowControl(maouturn)
    EndIf
  EndIf
  If 9 <= yuusyakougeki And yuusyakougeki <= 10 Then '会心の確率20%
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者の攻撃! 会心の一撃!!")
    GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
    ydamage = yuusyakaisin + Math.GetRandomNumber(201) - 1
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, ydamage)
    MaouHP = MaouHP - ydamage
    If MaouHP  <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "勇者の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(maouHPX, maouHPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(maouHPX, maouHPY, MaouHP)
      Controls.HideControl(ytatakau)
      Controls.HideControl(ykaihuku)
      Controls.HideControl(ymahou)
      Controls.ShowControl(maouturn)
    EndIf
  EndIf
EndIf

魔王の行動と同じように、魔王のHPが0以下になったら「勇者の勝ち!」と表示されるようにしています。
また、魔王のHPが1以上の時は魔王の行動に移ることになりますから、勇者の行動を行うボタンは隠し、魔王の行動を行うボタンを表示する、

Controls.ShowControl(ytatakau)
Controls.ShowControl(ykaihuku)
Controls.ShowControl(ybougyo)
Controls.HideControl(maouturn)

を追加しています。

続いて、回復魔法です。
HP回復して、勇者の最大HPを越えてしまう場合も考慮しなければなりません。
そこで「YuusyaHP」とは別に、勇者の最大HPを変数「YuusyaMXHP」として、以下のようにしました。

YuusyaMXHP = 20000

'勇者の行動その2 回復魔法
If Controls.LastClickedButton = ykaihuku Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は回復魔法を唱えた!")
  GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, "勇者のHPが回復した。")
  ykaihukuryou = yuusyakaihuku + Math.GetRandomNumber(1001) - 1
  YuusyaHP = YuusyaHP + ykaihukuryou
  YuusyaMP = YuusyaMP - 5
  If YuusyaMXHP <= YuusyaHP Then '回復したHPが勇者の最大HP以上の時は、表示するHPを最大HPに強制変更
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
    GraphicsWindow.FillRectangle(yuusyaMPX, yuusyaMPY, 40, 20)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, YuusyaMXHP)
    GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, YuusyaMP)
    Controls.HideControl(ytatakau)
    Controls.HideControl(ykaihuku)
    Controls.HideControl(ymahou)
    Controls.ShowControl(maouturn)
  Else
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
    GraphicsWindow.FillRectangle(yuusyaMPX, yuusyaMPY, 40, 20)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, YuusyaHP)
    GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, YuusyaMP)
    Controls.HideControl(ytatakau)
    Controls.HideControl(ykaihuku)
    Controls.HideControl(ymahou)
    Controls.ShowControl(maouturn)
  EndIf
EndIf

回復魔法を使った後は、魔王の行動に移るためボタンを隠したり出したりしています。

最後は攻撃魔法です。
「戦う」を流用して作ることができますが、魔法の場合はMPを減らすことも忘れずに。

'勇者の行動その3 攻撃魔法
If Controls.LastClickedButton = ymahou Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は攻撃魔法を唱えた!")
  GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
  ydamage = yuusyamahou + Math.GetRandomNumber(201) - 1
  GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, ydamage)
  MaouHP = MaouHP - ydamage
  YuusyaMP = YuusyaMP - 10
    If MaouHP  <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "勇者の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(maouHPX, maouHPY, 40, 20)
      GraphicsWindow.FillRectangle(yuusyaMPX, yuusyaMPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(maouHPX, maouHPY, MaouHP)
      GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, YuusyaMP)
      Controls.HideControl(ytatakau)
      Controls.HideControl(ykaihuku)
      Controls.HideControl(ymahou)
      Controls.ShowControl(maouturn)
  EndIf
EndIf

以上、全ての勇者の行動が終了すると、
・勇者が勝つ
・ボタンは、勇者の行動ボタンが全て消えて「魔王の攻撃」ボタンのみになる
の、どちらかになるはずです。
なので、この後に前回作成した魔王の行動を加えれば……完成か?

プログラム全体が長くなったので、下をクリックして全体を表示するようにしました。

GraphicsWindow.Title = "勇者VS魔王"
GraphicsWindow.Width = 300
GraphicsWindow.Height = 200

haikeicolor = "white"
mojicolor = "black"

yuusyatuujou = 1000
yuusyakaisin = 2500
yuusyakaihuku = 10000
yuusyamahou = 4000

maoutuujou = 1400
maoumahou = 2800
maouhissatu = 5200

YuusyaMXHP = 20000
yuusyaHP = 20000
yuusyaMP = 30
maouHP = 30000

'メッセージ表示位置
massagewindowX = 10
massagewindowY = 140
yuusyaHPX = 230
yuusyaHPY = 10
yuusyaMPX = 230
yuusyaMPY = 30
maouHPX = 230
maouHPY = 60

GraphicsWindow.BrushColor = mojicolor
GraphicsWindow.DrawText(150, 10, "勇者の残りHP:")
GraphicsWindow.DrawText(150, 30, "勇者の残りMP:")
GraphicsWindow.DrawText(150, 60, "魔王の残りHP:")
GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, yuusyaHP)
GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, yuusyaMP)
GraphicsWindow.DrawText(maouHPX, maouHPY, maouHP)

ytatakau = Controls.AddButton("戦う", 10, 10)
ykaihuku = Controls.AddButton("回復魔法", 10, 40)
ymahou = Controls.AddButton("攻撃魔法", 10, 70)
GraphicsWindow.DrawText(10, 100, "*回復魔法は消費MP5、攻撃魔法は消費MP10")
maouturn = Controls.AddButton("魔王の攻撃", 10, 10)
Controls.HideControl(maouturn)

Controls.ButtonClicked = OnClick

Sub OnClick

'ここから勇者の行動
'MPが足りない時に魔法が使えない、というメッセージを出す

If Controls.LastClickedButton = ymahou And yuusyaMP < 10 Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "MPが足りません。")
ElseIf Controls.LastClickedButton = ykaihuku And yuusyaMP < 5 Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "MPが足りません。")
Else
'勇者の行動その1 戦う(確率で通常・会心の一撃)
If Controls.LastClickedButton = ytatakau Then
  yuusyakougeki = Math.GetRandomNumber(10) '通常・会心の確率をランダム取得
  If 1 <= yuusyakougeki And yuusyakougeki <= 8 Then '通常攻撃80%
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者の攻撃!")
    GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
    ydamage = yuusyatuujou + Math.GetRandomNumber(101) - 1
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, ydamage)
    MaouHP = MaouHP - ydamage
    If MaouHP  <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "勇者の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(maouHPX, maouHPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(maouHPX, maouHPY, MaouHP)
      Controls.HideControl(ytatakau)
      Controls.HideControl(ykaihuku)
      Controls.HideControl(ymahou)
      Controls.ShowControl(maouturn)
    EndIf
  EndIf
  If 9 <= yuusyakougeki And yuusyakougeki <= 10 Then '会心の確率20%
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者の攻撃! 会心の一撃!!")
    GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
    ydamage = yuusyakaisin + Math.GetRandomNumber(201) - 1
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, ydamage)
    MaouHP = MaouHP - ydamage
    If MaouHP  <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "勇者の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(maouHPX, maouHPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(maouHPX, maouHPY, MaouHP)
      Controls.HideControl(ytatakau)
      Controls.HideControl(ykaihuku)
      Controls.HideControl(ymahou)
      Controls.ShowControl(maouturn)
    EndIf
  EndIf
EndIf

'勇者の行動その2 回復魔法
If Controls.LastClickedButton = ykaihuku Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は回復魔法を唱えた!")
  GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, "勇者のHPが回復した。")
  ykaihukuryou = yuusyakaihuku + Math.GetRandomNumber(1001) - 1
  YuusyaHP = YuusyaHP + ykaihukuryou
  YuusyaMP = YuusyaMP - 5
  If YuusyaMXHP <= YuusyaHP Then '回復したHPが勇者の最大HP以上の時は、表示するHPを最大HPに強制変更
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
    GraphicsWindow.FillRectangle(yuusyaMPX, yuusyaMPY, 40, 20)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, YuusyaMXHP)
    GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, YuusyaMP)
    Controls.HideControl(ytatakau)
    Controls.HideControl(ykaihuku)
    Controls.HideControl(ymahou)
    Controls.ShowControl(maouturn)
  Else
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
    GraphicsWindow.FillRectangle(yuusyaMPX, yuusyaMPY, 40, 20)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, YuusyaHP)
    GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, YuusyaMP)
    Controls.HideControl(ytatakau)
    Controls.HideControl(ykaihuku)
    Controls.HideControl(ymahou)
    Controls.ShowControl(maouturn)
  EndIf
EndIf
  
'勇者の行動その3 攻撃魔法
If Controls.LastClickedButton = ymahou Then
  GraphicsWindow.BrushColor = haikeicolor
  GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
  GraphicsWindow.BrushColor = mojicolor
  GraphicsWindow.DrawText(massagewindowX, massagewindowY, "勇者は攻撃魔法を唱えた!")
  GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
  ydamage = yuusyamahou + Math.GetRandomNumber(201) - 1
  GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, ydamage)
  MaouHP = MaouHP - ydamage
  YuusyaMP = YuusyaMP - 10
    If MaouHP  <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "勇者の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(maouHPX, maouHPY, 40, 20)
      GraphicsWindow.FillRectangle(yuusyaMPX, yuusyaMPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(maouHPX, maouHPY, MaouHP)
      GraphicsWindow.DrawText(yuusyaMPX, yuusyaMPY, YuusyaMP)
      Controls.HideControl(ytatakau)
      Controls.HideControl(ykaihuku)
      Controls.HideControl(ymahou)
      Controls.ShowControl(maouturn)
  EndIf
EndIf
EndIf

If Controls.LastClickedButton = maouturn Then

'ここから魔王の行動
  maoukoudou = Math.GetRandomNumber(100)
'魔王の行動その1 通常攻撃
  If 1 <= maoukoudou And maoukoudou <= 70 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "魔王の攻撃!")
    GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
    mdamage = maoutuujou + Math.GetRandomNumber(201) - 1
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, mdamage)
    yuusyaHP = yuusyaHP - mdamage
    If yuusyaHP <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "魔王の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, yuusyaHP)
      Controls.ShowControl(ytatakau)
      Controls.ShowControl(ykaihuku)
      Controls.ShowControl(ymahou)
      Controls.HideControl(maouturn)
    EndIf
  EndIf
'魔王の行動その2 魔法攻撃
  If 71 <= maoukoudou And maoukoudou <= 85 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "魔王はなんかすごい魔法を唱えた!")
    GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
    mdamage = maoumahou + Math.GetRandomNumber(301) - 1
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, mdamage)
    yuusyaHP = yuusyaHP - mdamage
    If yuusyaHP <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "魔王の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, yuusyaHP)
      Controls.ShowControl(ytatakau)
      Controls.ShowControl(ykaihuku)
      Controls.ShowControl(ymahou)
      Controls.HideControl(maouturn)
    EndIf
  EndIf
'魔王の行動その3 必殺技
  If 86 <= maoukoudou And maoukoudou <= 90 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 200, 300)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "魔王はなんかすごい必殺技を放った!")
    GraphicsWindow.DrawText(massagewindowX + 40, massagewindowY + 20, "のダメージを与えた。")
    mdamage = maouhissatu + Math.GetRandomNumber(401) - 1
    GraphicsWindow.DrawText(massagewindowX, massagewindowY + 20, mdamage)
    yuusyaHP = yuusyaHP - mdamage
    If yuusyaHP <= 0 Then
      GraphicsWindow.Clear()
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.FontSize = 20
      GraphicsWindow.DrawText(80, 80, "魔王の勝ち!")
    Else
      GraphicsWindow.BrushColor = haikeicolor
      GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
      GraphicsWindow.BrushColor = mojicolor
      GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, yuusyaHP)
      Controls.ShowControl(ytatakau)
      Controls.ShowControl(ykaihuku)
      Controls.ShowControl(ymahou)
      Controls.HideControl(maouturn)
    EndIf
  EndIf
'魔王の行動その4 様子見
  If 91 <= maoukoudou And maoukoudou <= 100 Then
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(massagewindowX, massagewindowY, 500, 500)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(massagewindowX, massagewindowY, "魔王は様子を見ている。")
    GraphicsWindow.BrushColor = haikeicolor
    GraphicsWindow.FillRectangle(yuusyaHPX, yuusyaHPY, 40, 20)
    GraphicsWindow.BrushColor = mojicolor
    GraphicsWindow.DrawText(yuusyaHPX, yuusyaHPY, yuusyaHP)
    Controls.ShowControl(ytatakau)
    Controls.ShowControl(ykaihuku)
    Controls.ShowControl(ymahou)
    Controls.HideControl(maouturn)
    EndIf
EndIf
EndSub


rpg

rpg

rpg

rpg

rpg

実際にやってみると、MPは回復魔法に温存しておいて、ひたすら通常攻撃していれば勝てそうなバランスになっている……かな?
下手に攻撃魔法を使うとMPが切れて、回復できず魔王が勝ちますね。
しかも魔王のHPが高くてバトルが長い。w
攻撃魔法の威力をもっと上げると、
・攻撃魔法連発で速攻で魔王を倒す
・MPを節約して、HP回復重視しつつ通常攻撃で魔王を倒す
のどっちかで攻略するようなバトルになりそうです。

何はともあれ、「なんかRPGのバトルっぽい何か」が出来ました!
ただ、これをプレイすると単調だなーって思いますよね。
そりゃあ、白地に黒の文字だけだし、淡々と数字が減っていくのを見ているだけですから。w
ここに演出を加えて、ようやく「いかにもゲーム」な雰囲気にできるはずです。

……それは、RPGを作る専用ソフトウェアを使った方が楽だと、ここまでの流れでわかっていただけたでしょうか。w

次:その3 見た目をもっとゲームっぽく!


▲TOPへ戻る