スクリプト/コツ/敵を倒すとお金が手に入る

最終投稿者:Material 6858 mini akasata 更新:2010/01/21 21:34:50
このページでは、2DRPGで、敵を倒すとお金が手に入る仕組みを
どうやって作るのか解説します。

アクションRPGでは実現できないのでご注意ください。

また、このページを理解するには、スクリプト/変数を理解している
必要があります。

敵を倒すとお金が手に入るゲーム



概要


戦闘でお金を与えるには、以下のような流れで処理を行います。

  • 開始スクリプトでお金の変数を定義する
  • NPCで戦闘を起こす
  • 勝利したらお金に対応する変数の値を上昇させる
  • NPCの敵モンスターを消去する
  • マップを移動したら倒した敵を復活させる

開始スクリプトでお金の変数を定義する


まずは開始スクリプトで開始時の所持金を設定しましょう。

# 開始時の所持金は50Gold
setVariable("Gold", 50) 


NPCで戦闘を起こす


2DRPGで戦闘を起こすには、マップ上に敵モンスターを配置します。
しかし、この方法ではお金を渡すことはできません。

ノンプレイヤーキャラクタ(イベント)から戦闘を起こす必要があります。
イベントから戦闘を開始するには、startTurnBattle関数を使います。

勝利したらお金に対応する変数の値を上昇させる


戦闘に勝利したら、お金を渡します。お金は「gold」という変数に
格納することにしましょう。

# 100Gold渡す
setVariable("Gold", getVariable("Gold") + 100) 


NPCの敵モンスターを消去する


フラグを使って敵モンスターを消去しましょう。

setFlag("敵Aを倒した", true)


NPCの敵モンスターの開始条件に以下を入れてください。

!getFlag("敵Aを倒した")


フラグは敵モンスター毎に変える必要があることに注意してください。

マップを移動したら倒した敵を復活させる


マップを移動したら、倒した敵モンスターを復活させる場合は、以下の
ように書いてください。

setFlag("敵Aを倒した", false)


まとめ


現在のRmakeでは、敵モンスターを倒すとお金が手に入る仕組みは、
手間はかかりますが、実現可能です。応用すればもっと面白いことが
できると思います。(敵モンスターを一定数倒したらイベント発生とか。)

ぜひ、工夫してみてください!

コメントする

コメントするには、ログインする必要があります。

コメント一覧

User icon mini rmk100111(投稿日:2010/01/21 21:34, 履歴)
開始スクリプトでユーザー関数の定義が出来るみたいなので、それにまとめれば手間掛からないんじゃないかな?
    mini 199492(投稿日:2009/12/22 20:02, 履歴)
ありがとうございます。
      mini shirosaboten(投稿日:2009/12/22 19:48, 履歴)
画面テキストで表示する場合は基本的に変数が変わるたびに表示しなおす必要があるのだと思います。
となるとテキスト表示が必要なのはこういうときのようですね
・敵を倒し、お金が手に入ったとき
・お店でお金を消費したとき
・画面を切り替えたとき

setText(textID,"所持金", getVariable("Gold"),"Gold")
をコピペしていけばいいのでそんなに大変ではないですが、敵が多い場合は見落としがないように気をつけてください^^
    mini 199492(投稿日:2009/12/22 17:55, 履歴)
またですみません。
敵を倒すとお金が手に入るようにしたんですが、敵を倒しても表示されているお金が50goldのままです。どうすれば増えていきますか?
    mini 199492(投稿日:2009/12/22 17:24, 履歴)
ありがとうございます。
      mini shirosaboten(投稿日:2009/12/21 21:32, 履歴)
あと画面が切り替わると表示が消えるとのことですが、「自動的に実行」をつかってもう一度同じテキストを表示させるんじゃないでしょうか?

1.自動実行のイベントの開始条件を「!getFlag("金表示イベント")」にし、実行内容でテキストを表示させる。("金表示イベント")をtrueにする。
2.画面切り替えを行うイベントでワープ関数の設定とともに、("金表示イベント")をfalseにする。

これを各マップで行えば、とりあえずはいいのかな?と思います。セーブロードに対応してるかはわかりませんが^^;
      mini shirosaboten(投稿日:2009/12/21 21:21, 履歴)
199492さん>コメントを見たところ、setとgetで("")内の文字が違います。
setVariable("Gold")
getVariable("gold")
となっています。呼び出す変数が違うからnullになっちゃうんじゃないでしょうか?
    mini 199492(投稿日:2009/12/21 19:53, 履歴)
開始スクリプトに、
# 開始時の所持金は50Gold
setVariable("Gold", 50)
textID = createText(64, 64, 220, 220)
setText(textID,"所持金", getVariable("gold"),"Gold")
と入れたら
所持金nullGold
と表示され、マップが変わると消えてしまいます。
どうすればちゃんとしたお金の量が表示されて、ずっと残るのですか?
Aaaaaaa mini sakatagin(投稿日:2009/12/14 19:26, 履歴)
ありがとうございます。
Zararu128x128 mini dycoon(投稿日:2009/12/14 14:22, 履歴)
すみません、思い違いをしていました。
shirosabotenさんの情報で正しいです。

よろしくお願いします。
      mini shirosaboten(投稿日:2009/12/14 00:53, 履歴)
setText(textID,"所持金", getVariable("gold"),"Gold")
という書き方が出来たと思います。
二個作らなくてもたぶん大丈夫です。(幅は必要)
Zararu128x128 mini dycoon(投稿日:2009/12/13 13:03, 履歴)
文字列は入れ子構造で書くことができないため
""お金 = ", getVariable("Gold")"
のような書き方をすることができません。
また、現在文字列と数値を結合することはできません。

とりあえず、createTextを2回呼んで複数の文字列表示領域を作り、
文字列用と、数値用を用意することで対処できるのではないかと思います。

よろしくお願いします。

Aaaaaaa mini sakatagin(投稿日:2009/12/13 10:48, 履歴)
Goldの表示をしたくて、開始スクリプトに

textID = createText(64, 64, 220, 220)
setText(textID, ""お金 = ", getVariable("Gold")")

と入力すると、

開始スクリプト : syntax error, コードに文法的な間違いがあります。 line(行): 24

と、エラーが発生しました
どこが間違っているのですか?
Material 6858 mini akasata(投稿日:2009/12/11 22:51, 履歴)
>rxozihkkさん

それでOKです。
RmakeのスクリプトはgetVariableとsetVariableが
キモですね。

>sakataginさん

幽霊屋敷のようなことをしたいのであれば、createText関数と
setText関数を使ってみてください。

createText関数
http://rmake.jp/document/function_reference#createText%E9%96%A2%E6%95%B0

setText関数
http://rmake.jp/document/function_reference#setText%E9%96%A2%E6%95%B0
Aaaaaaa mini sakatagin(投稿日:2009/12/11 20:04, 履歴)
常にGOIDを表示するにはどのようにすればよいのですか?
User icon mini 退会したユーザー(投稿日:2009/12/11 19:29, 履歴)
お金を減らす場合、これでいいんですよね?
# 100Gold減らす
setVariable("Gold", getVariable("Gold") - 100)