スクリプトを作れるようになろう-04
投稿者: ikosami 投稿日:2012/04/22 15:34
どうも。ikosamiです。
前回を見ていない人は、↓を先に見てください。
http://blog.rmake.jp/ikosami/1674
⑤戦闘を追加する
階層を進むごとに、戦闘があるようにしてみましょう。
戦闘は、思うほど難しいものではありません。
まず、「メインチャプター」の
を
にして、「メインチャプター」の下に、
「戦闘」のチャプターを作りましょう。
「主人公」の部分は、好きな名前を入れてください。
台詞も、ご自由に。
では、戦闘スクリプトを作ってみましょう。
戦闘スクリプトには、最低でも、
最大HP,HP,攻撃力,防御力を
自分と敵の分が必要です。
敵の分の最大HPは回復技を作らない限り必要ないですが、
まぁ一応作っておきましょう。
まず、自分のステータスです。
これは、初期設定で設定します。
数字の大きさはお好みで。
ちなみに、一番下のKは戦闘中回復できる回数です。
今回は傷薬の数ってことにしておきましょう。
次に、敵ステータスです。
これは、「設定チャプター」で設定します。
敵ステータスもお好みでいいのですが、
主人公ステータスとのバランスを考えてください。
絶対勝てないと、ゲームになりませんし、
弱すぎてもつまらないですし、
倒すのに時間がかかりすぎても嫌になります。
戦闘は、一度しかないわけではないので、
だんだん強くするようにしましょう。
敵は、とりあえず、すべての階に設定してください。
(最下層以外は、いなくても問題はないですけど・・・)
あと、ついでに、台詞も入れときましょう。
とは言っても、そのまま書くわけにはいきません。
なので、defを使って
後で呼び出せるようにしておきましょう。
と言う感じで。
これをすべての階層に追加しましょう。
defはユーザー定義関数を作るときに使うもので
def [新しく作る関数名](引数)
と、書きます。
例えば、
と書けば、
台詞
「こんにちは」
と、表示されます。
参考:「スクリプト言語のマニュアル」
それと、
setVariable("T",showImagePosition(200, 100, 64270))
が画像表示
setVariable("tn","トカゲ")
が敵の名前です。
戦闘中の「○○の攻撃!」という文章などに使います。
ちなみに、今回の例で使用した画像は、↓です。
http://rmake.jp/published_items/25361
では、準備が終わったので、早速戦闘スクリプトを作ってみましょう。
メインスクリプトと同じく、
から作っていきます。
戦闘のあるゲームを思い出してみてください。
「○○が現れた!」
※
「どうする?」(選択肢)
「主人公の攻撃!」
「▽△のダメージを与えた!」
「○○の攻撃!」
「□■のダメージを受けた!」
[※に戻る]
ってな感じですよね。
これを、そのまま当てはめてみます。
(上のほうのは、毎度おなじみの読み込みです。
おなじみでない人は1から順番に読みましょう)
ほぼ、そのまま書くと
体力が減ったとか回復したとか、文字で表示しているだけで
無駄な文章の繰り返しになります。
体力などの変数を実際にちゃんと使ってみましょう。
ついでにいろいろな場合の判定も。
これで、戦闘が追加されました。
⑥オープニングを作る
オープニングのないゲームだと、何をすれば良いのかがよくわかりません。
なので、ゲームにオープニングを加えてみましょう。
まず、「初期設定チャプター」と「設定チャプター」の間に、
「オープニング」と言う名前のチャプターを追加します。
ここにまず、オープニングを入れてみましょう。
迷路なので、それに見合ったオープニングを作りましょう。
みたいな感じなら、
「なにをすればいいのか?」
がはっきりします。
⑦エンディング(or後日談)を作る
設定チャプターの
の、
の部分を、
に変えます。
そして、戦闘チャプターの下に、
エンディングチャプターを作ります。
そこにエンディング、もしくは後日談を書いていきましょう。
など、御自由に。
今回の解説の内容で作るゲームは、
どちらかというと、文章力が必要になるものなので、
僕の書いたゲームのストーリーの内容は、
ほとんど気にしなくても結構です。
暗闇迷路 - 【迷路ゲーム】
わからない部分が、少しでもあったらどんどんコメントしてください。
次回は、キーボード入力を取り入れて、
操作性をよくしてみたいと思います。
ツイート
前回を見ていない人は、↓を先に見てください。
http://blog.rmake.jp/ikosami/1674
⑤戦闘を追加する
階層を進むごとに、戦闘があるようにしてみましょう。
戦闘は、思うほど難しいものではありません。
まず、「メインチャプター」の
speak("ゴールです。") speak("次のステージへ進みます。") setVariable("ST", getVariable("ST")+1) changeChapter("設定")
を
setText(t, "") setVariable("ST", getVariable("ST")+1) changeChapter("戦闘")
にして、「メインチャプター」の下に、
「戦闘」のチャプターを作りましょう。
「主人公」の部分は、好きな名前を入れてください。
台詞も、ご自由に。
では、戦闘スクリプトを作ってみましょう。
戦闘スクリプトには、最低でも、
最大HP,HP,攻撃力,防御力を
自分と敵の分が必要です。
敵の分の最大HPは回復技を作らない限り必要ないですが、
まぁ一応作っておきましょう。
まず、自分のステータスです。
これは、初期設定で設定します。
setVariable("MHP", 100) setVariable("HP", 100) setVariable("AT", 20) setVariable("DT", 10) setVariable("K", 10)
数字の大きさはお好みで。
ちなみに、一番下のKは戦闘中回復できる回数です。
今回は傷薬の数ってことにしておきましょう。
次に、敵ステータスです。
これは、「設定チャプター」で設定します。
if getVariable("ST") == 1 s[0] = Array("1,1,1,1,1") s[1] = Array("1,0,1,2,1") s[2] = Array("1,0,0,0,1") s[3] = Array("1,0,1,1,1") s[4] = Array("1,1,1,1,1") x = 1;y = 1 setVariable("tMHP", 30) setVariable("tHP", 30) setVariable("tAT", 10) setVariable("tDT", 8)
敵ステータスもお好みでいいのですが、
主人公ステータスとのバランスを考えてください。
絶対勝てないと、ゲームになりませんし、
弱すぎてもつまらないですし、
倒すのに時間がかかりすぎても嫌になります。
戦闘は、一度しかないわけではないので、
だんだん強くするようにしましょう。
敵は、とりあえず、すべての階に設定してください。
(最下層以外は、いなくても問題はないですけど・・・)
あと、ついでに、台詞も入れときましょう。
とは言っても、そのまま書くわけにはいきません。
なので、defを使って
後で呼び出せるようにしておきましょう。
def spe1() speak("主人公\n「階段を見つけた!」") setVariable("T",showImagePosition(200, 100, 64270)) setVariable("tn","トカゲ") speak("主人公\n「ん? なんだこいつ・・・」") speak("トカゲ\n「・・・うきゃー!」") speak("主人公\n「うわっ!」") end def spe2() speak("トカゲ\n「・・・うきゅー・・・」") hideImagePosition(getVariable("T")) speak("主人公\n「トカゲは『うきゃー』とも『うきゅー』とも言わないだろ・・・」") speak("主人公\n「まぁいいや。先へ進もう」") end
と言う感じで。
これをすべての階層に追加しましょう。
defはユーザー定義関数を作るときに使うもので
def [新しく作る関数名](引数)
と、書きます。
例えば、
def spe(a) speak("台詞\n「",a、"」") end spe("こんにちは")
と書けば、
台詞
「こんにちは」
と、表示されます。
参考:「スクリプト言語のマニュアル」
それと、
setVariable("T",showImagePosition(200, 100, 64270))
が画像表示
setVariable("tn","トカゲ")
が敵の名前です。
戦闘中の「○○の攻撃!」という文章などに使います。
ちなみに、今回の例で使用した画像は、↓です。
http://rmake.jp/published_items/25361
では、準備が終わったので、早速戦闘スクリプトを作ってみましょう。
メインスクリプトと同じく、
loop = true while loop end
から作っていきます。
戦闘のあるゲームを思い出してみてください。
「○○が現れた!」
※
「どうする?」(選択肢)
「主人公の攻撃!」
「▽△のダメージを与えた!」
「○○の攻撃!」
「□■のダメージを受けた!」
[※に戻る]
ってな感じですよね。
これを、そのまま当てはめてみます。
(上のほうのは、毎度おなじみの読み込みです。
おなじみでない人は1から順番に読みましょう)
spe1() mhp = getVariable("MHP") hp = getVariable("HP") at = getVariable("AT") dt = getVariable("DT") tn = getVariable("tn") tmhp = getVariable("tMHP") thp = getVariable("tHP") tat = getVariable("tAT") tdt = getVariable("tDT") speak(tn,"○○が現れた!") loop = true while loop case speakWithSelect(3,"攻撃","回復","逃げる", "どうする?") when 0 speak("主人公の攻撃") speak(tn,"に13のダメージを与えた!") when 1 speak("主人公のは傷薬を使った") speak("体力を25回復した!") when 2 speak("主人公は逃げ出した!") speak("しかし、何も起こらなかった!") end speak(tn,"の攻撃!") speak("主人公は10のダメージを受けた!") end
ほぼ、そのまま書くと
体力が減ったとか回復したとか、文字で表示しているだけで
無駄な文章の繰り返しになります。
体力などの変数を実際にちゃんと使ってみましょう。
ついでにいろいろな場合の判定も。
#//////前略//////// loop = true while loop case speakWithSelect(3,"攻撃","回復","逃げる", "どうする?\nHP:",hp,"/",mhp,"\n傷薬:",getVariable("K"),"個") when 0 speak("主人公の攻撃") ko = at - tdt - rand(floor(at/6)) # 一定にならないように if ko < 0 speak(tn,"は、笑っている!") else thp = thp - ko speak(tn,"に",ko,"のダメージを与えた!") if thp <= 0 speak(tn,"を倒した!") spe2() #さっき設定したやつ changeChapter("設定") end end when 1 if getVariable("K") > 0 speak("主人公のは傷薬を使った") if hp < mhp hp = hp + 25 setVariable("K",getVariable("K")-1) if hp > mhp hp = mhp end else speak("しかし傷が見当たらなかった!") end else speak("傷薬はもうない!") end when 2 speak("主人公は逃げ出した!") speak("しかし、何も変わらなかった!") end speak(tn,"の攻撃!") ko = tat - dt - rand(floor(tat/6)) # 一定にならないように if ko <= 0 speak("主人公は、微動だにしない!") else hp = hp - ko speak("主人公は",ko,"のダメージを受けた!") if hp <= 0 speak("主人公\n「負けた・・・」") speak(tn,"「ゲームオーバー」") speak("主人公\n「しゃべった!?」") goBadEnding() end end end
これで、戦闘が追加されました。
⑥オープニングを作る
オープニングのないゲームだと、何をすれば良いのかがよくわかりません。
なので、ゲームにオープニングを加えてみましょう。
まず、「初期設定チャプター」と「設定チャプター」の間に、
「オープニング」と言う名前のチャプターを追加します。
ここにまず、オープニングを入れてみましょう。
迷路なので、それに見合ったオープニングを作りましょう。
主人公「う~む・・・ これが家宝の宝刀か・・・」 #盗賊画像表示 主人公「ん? あんな誰?」 主人公「わっ! なにするんだ!」 盗賊「この宝刀は、もらって行くぞ!」 主人公「まて~!」 #洞窟の背景表示 主人公「この洞窟に逃げ込んだみたいだ。追いかけよう!」 #背景画像消去 主人公「うわっ! まっくらだ!一度もどって、 明かりになるものを取りに行こう。」 主人公「ん? こんなところにカンテラが・・・」 #薄暗い洞窟背景表示 主人公「大して変わらないな・・・ まぁいいや。このまま進もう」
みたいな感じなら、
「なにをすればいいのか?」
がはっきりします。
⑦エンディング(or後日談)を作る
設定チャプターの
#####<<<前略>>>##### if getVariable("ST") == 1 #####<<<中略>>>##### elsif getVariable("ST") == 2 #####<<<中略>>>##### def spe1() #####<<<中略>>>##### elsif getVariable("ST") == 3 #####<<<中略>>>##### elsif getVariable("ST") == 4 #####<<<中略>>>##### else speak("すべてのステージをクリアしました!\nおめでとうございます!") goEnding() end #####<<<後略>>>#####
の、
speak("すべてのステージをクリアしました!\nおめでとうございます!") goEnding()
の部分を、
changeChapter("エンディング")
に変えます。
そして、戦闘チャプターの下に、
エンディングチャプターを作ります。
そこにエンディング、もしくは後日談を書いていきましょう。
主人公「やっと見つけたぞ!」 盗賊「くっ・・・あいつらをこうもあっさり倒すなんて・・・ なんて強さだ・・・」 主人公「宝刀を返せ!」 盗賊「わかったわかった。返すから勘弁してくれ」 宝刀を取り返した! 盗賊「というか、俺の懐中電灯の電池が切れたんだが、 お前のそのカンテラで、出口まで連れてってくれないか?」 主人公「しかたないな・・・・・・」 主人公「やっと出られた~・・・」 盗賊「じゃぁ、逃げさせてもらうよ」 主人公「えっ!?」 主人公「・・・・・・」 goEnding()
など、御自由に。
今回の解説の内容で作るゲームは、
どちらかというと、文章力が必要になるものなので、
僕の書いたゲームのストーリーの内容は、
ほとんど気にしなくても結構です。
暗闇迷路 - 【迷路ゲーム】
わからない部分が、少しでもあったらどんどんコメントしてください。
次回は、キーボード入力を取り入れて、
操作性をよくしてみたいと思います。
コメントする
コメントするには、ログインする必要があります。
分かりやすかったです^^