スクリプトを作れるようになろう-02
投稿者: ikosami 投稿日:2012/03/21 20:46
どうも。ikosamiです。
前回を見ていない人は、↓を先に見てください。
http://blog.rmake.jp/ikosami/1662
③チャプターで別々に分けて、何度も使えるようにする
すべてのスクリプトをひとつのチャプターに書くと、
新しい機能を追加したい時に、色々と面倒です。
ですので今回は、チャプターで、別々に分けて作ってみましょう。
まず関数です。
これを一番上のチャプターに設定します。
これはコピーすればいいので、説明は省きます。
自分で関数を作るのは、ある程度理解してからにしましょう。
では、次に設定です。
これは前回と少し変える必要があります
x = 1
などの、楽な変数の設定は、チャプターが変わると初期化されます。
なので、
setVariable("x", x)
と、あとで普通の変数に入れる必要があります。
sの方は、たくさん書かないといけないので、
こういう方法にする理由はわかると思いますが、
setVariable("x", 1)
を、わざわざ
x = 1
setVariable("x", x)
としているのは、解説④で
xとyの数が増えるからです。
では、最後にメインスクリプトの設定です。
チャプターを変えているので、
s = getVariable("s")
などを追加して、設定を読み込む必要があります。
これでチャプター分けは完璧です。
とは言っても、普通は最初からこの状態に作るのですが・・・
④たくさんのステージを作ってみる。
せっかくチャプターごとに分けたのですから、
ステージをたくさん作ってみましょう。
クリアすると次のステージに進むという形式を作るには、
初期設定が必要になります。
とは言っても、難しい物ではありません。
これが初期設定のすべてです。STはStage(ステージ)のSTなので、別にSTである必要はありません。
要するに「今、どのステージか」を表す変数です。
チャプターの位置はここです。
そしてステージのチャプターをこのようにします。
と、こんな感じになります。
条件判定の、
の意味はわかりますよね?
わからない方は、aoihikawaさんの解説を先に読んでください。
http://page.rmake.jp/wikis/105
その条件判定の中に
などのステージ設定を入れただけです。
では、次にメインスクリプトを、
クリアすると次のステージに進むという形式に
対応させます。
これも、とても単純で、
ゴールした時の
を
と、こうするだけです。
setVariable("ST", getVariable("ST")+1)
は、設定のチャプターに行ったと時に
次のステージを読み込むためのものです。
changeChapter("設定")は
「changeChapter」をカタカナ読みすると、
「チェンジチャプター」
チャプター変更(移動)です。
これで、今回の講座は終わりです。
では、成果を確認してみましょう。
「」内がチャプター名です。
「関数」
内容:Wikiから全部コピー
「初期設定」
内容:変数をひとつ設定するだけの存在
「設定」
内容:ステージ設定。これ以上ステージがない場合はクリア
「メイン」
内容:メインスクリプト
暗闇迷路 - 【迷路ゲーム】
わからない部分が、少しでもあったらどんどんコメントしてください。
ちなみに、次回は、地図が登場します。
ツイート
前回を見ていない人は、↓を先に見てください。
http://blog.rmake.jp/ikosami/1662
③チャプターで別々に分けて、何度も使えるようにする
すべてのスクリプトをひとつのチャプターに書くと、
新しい機能を追加したい時に、色々と面倒です。
ですので今回は、チャプターで、別々に分けて作ってみましょう。
まず関数です。
これを一番上のチャプターに設定します。
def Array(a) a = splitString(a, ",") i = 0 while i < getArrayLength(a) a[i] = toNumber(a[i]) i = i + 1 end return a end
これはコピーすればいいので、説明は省きます。
自分で関数を作るのは、ある程度理解してからにしましょう。
では、次に設定です。
これは前回と少し変える必要があります
s = createArray() s[0] = Array("1,1,1,1,1") s[1] = Array("1,0,1,1,0,1") s[2] = Array("1,0,0,0,0,2,1") s[3] = Array("1,0,1,1,0,1") s[4] = Array("1,1,1,1,1") x = 1;y = 1 setVariable("s", s) setVariable("x", x) setVariable("y", y)
x = 1
などの、楽な変数の設定は、チャプターが変わると初期化されます。
なので、
setVariable("x", x)
と、あとで普通の変数に入れる必要があります。
sの方は、たくさん書かないといけないので、
こういう方法にする理由はわかると思いますが、
setVariable("x", 1)
を、わざわざ
x = 1
setVariable("x", x)
としているのは、解説④で
xとyの数が増えるからです。
では、最後にメインスクリプトの設定です。
チャプターを変えているので、
s = getVariable("s")
などを追加して、設定を読み込む必要があります。
s = getVariable("s") x = getVariable("x") y = getVariable("y") loop = true while loop case speakWithSelect(4,"↑","→","←","↓", "どちらに進みますか?") when 0 xi = 0;yi = -1 when 1 xi = 1;yi = 0 when 2 xi = -1;yi = 0 when 3 xi = 0;yi = 1 end if s[y+yi][x+xi] == 0 speak("進みました。") x = x + xi;y = y + yi elsif s[y+yi][x+xi] == 2 speak("ゴールです。") speak("次のステージへ進みます。") goEnding() else s[y+yi][x+xi] == 1 speak("その方向には壁があり、進めません。") end end
これでチャプター分けは完璧です。
とは言っても、普通は最初からこの状態に作るのですが・・・
④たくさんのステージを作ってみる。
せっかくチャプターごとに分けたのですから、
ステージをたくさん作ってみましょう。
クリアすると次のステージに進むという形式を作るには、
初期設定が必要になります。
とは言っても、難しい物ではありません。
setVariable("ST", 1)
これが初期設定のすべてです。STはStage(ステージ)のSTなので、別にSTである必要はありません。
要するに「今、どのステージか」を表す変数です。
チャプターの位置はここです。
そしてステージのチャプターをこのようにします。
s = createArray() 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 elsif getVariable("ST") == 2 s[0] = Array("1,1,1,1,1") s[1] = Array("1,0,1,1,0,1") s[2] = Array("1,0,0,0,0,2,1") s[3] = Array("1,0,1,1,0,1") s[4] = Array("1,1,1,1,1") x = 1;y = 1 elsif getVariable("ST") == 3 s[0] = Array("1,1,1,1,1,1,1") s[1] = Array("1,0,1,1,0,0,1") s[2] = Array("1,0,0,0,0,0,1") s[3] = Array("1,0,1,1,0,0,1") s[4] = Array("1,0,0,0,1,0,1") s[5] = Array("1,1,1,1,1,2,1") x = 3;y = 4 elsif getVariable("ST") == 4 s[0] = Array("1,1,1,1,1,1,1") s[1] = Array("1,0,0,1,0,0,1") s[2] = Array("1,1,0,0,0,1,1") s[3] = Array("1,2,1,1,0,0,1") s[4] = Array("1,0,0,0,0,0,1") s[5] = Array("1,0,1,0,1,0,1") s[5] = Array("1,1,1,1,1,1,1") x = 1;y = 1 else speak("すべてのステージをクリアしました!\nおめでとうございます!") goEnding() end speak("ステージ",getVariable("ST")) setVariable("s", s) setVariable("x", x) setVariable("y", y)
と、こんな感じになります。
条件判定の、
if getVariable("ST") == 1 elsif getVariable("ST") == 2 elsif getVariable("ST") == 3 elsif getVariable("ST") == 4 else end
の意味はわかりますよね?
わからない方は、aoihikawaさんの解説を先に読んでください。
http://page.rmake.jp/wikis/105
その条件判定の中に
s[0] = Array("1,1,1,1,1") s[1] = Array("1,0,1,1,0,1") s[2] = Array("1,0,0,0,0,2,1") s[3] = Array("1,0,1,1,0,1") s[4] = Array("1,1,1,1,1") x = 1;y = 1
などのステージ設定を入れただけです。
では、次にメインスクリプトを、
クリアすると次のステージに進むという形式に
対応させます。
これも、とても単純で、
ゴールした時の
speak("ゴールです。") speak("次のステージへ進みます。") goEnding()
を
speak("ゴールです。") speak("次のステージへ進みます。") setVariable("ST", getVariable("ST")+1) changeChapter("設定")
と、こうするだけです。
setVariable("ST", getVariable("ST")+1)
は、設定のチャプターに行ったと時に
次のステージを読み込むためのものです。
changeChapter("設定")は
「changeChapter」をカタカナ読みすると、
「チェンジチャプター」
チャプター変更(移動)です。
これで、今回の講座は終わりです。
では、成果を確認してみましょう。
「」内がチャプター名です。
「関数」
内容:Wikiから全部コピー
def Array(a) a = splitString(a, ",") i = 0 while i < getArrayLength(a) a[i] = toNumber(a[i]) i = i + 1 end return a end
「初期設定」
内容:変数をひとつ設定するだけの存在
setVariable("ST", 1)
「設定」
内容:ステージ設定。これ以上ステージがない場合はクリア
s = createArray() 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 elsif getVariable("ST") == 2 s[0] = Array("1,1,1,1,1") s[1] = Array("1,0,1,1,0,1") s[2] = Array("1,0,0,0,0,2,1") s[3] = Array("1,0,1,1,0,1") s[4] = Array("1,1,1,1,1") x = 1;y = 1 elsif getVariable("ST") == 3 s[0] = Array("1,1,1,1,1,1,1") s[1] = Array("1,0,1,1,0,0,1") s[2] = Array("1,0,0,0,0,0,1") s[3] = Array("1,0,1,1,0,0,1") s[4] = Array("1,0,0,0,1,0,1") s[5] = Array("1,1,1,1,1,2,1") x = 3;y = 4 elsif getVariable("ST") == 4 s[0] = Array("1,1,1,1,1,1,1") s[1] = Array("1,0,0,1,0,0,1") s[2] = Array("1,1,0,0,0,1,1") s[3] = Array("1,2,1,1,0,0,1") s[4] = Array("1,0,0,0,0,0,1") s[5] = Array("1,0,1,0,1,0,1") s[5] = Array("1,1,1,1,1,1,1") x = 1;y = 1 else speak("すべてのステージをクリアしました!\nおめでとうございます!") goEnding() end speak("ステージ",getVariable("ST")) setVariable("s", s) setVariable("x", x) setVariable("y", y)
「メイン」
内容:メインスクリプト
s = getVariable("s") x = getVariable("x") y = getVariable("y") loop = true while loop case speakWithSelect(4,"↑","→","←","↓", "どちらに進みますか?") when 0 xi = 0;yi = -1 when 1 xi = 1;yi = 0 when 2 xi = -1;yi = 0 when 3 xi = 0;yi = 1 end if s[y+yi][x+xi] == 0 speak("進みました。") x = x + xi;y = y + yi elsif s[y+yi][x+xi] == 2 speak("ゴールです。") speak("次のステージへ進みます。") setVariable("ST", getVariable("ST")+1) changeChapter("設定") else s[y+yi][x+xi] == 1 speak("その方向には壁があり、進めません。") end end
暗闇迷路 - 【迷路ゲーム】
わからない部分が、少しでもあったらどんどんコメントしてください。
ちなみに、次回は、地図が登場します。
コメントする
コメントするには、ログインする必要があります。
コメント一覧
今回もわかりやすかったです。
公開はしませんが、別窓でカンペしながら同じものを作ってみています。
画像を入れられるのが楽しみです。
「メイン」のチャプターを主に計算させていく、ということだと思うのですが
「関数」「初期設定」「設定」のチャプターを前提に「メイン」のチャプターが進んでいく、
という解釈で大丈夫でしょうか?
チャプターは一つずつしか進めないと思っていたので、
全部まとめて一つのシーンだという見方を初めて知りました。
公開はしませんが、別窓でカンペしながら同じものを作ってみています。
画像を入れられるのが楽しみです。
「メイン」のチャプターを主に計算させていく、ということだと思うのですが
「関数」「初期設定」「設定」のチャプターを前提に「メイン」のチャプターが進んでいく、
という解釈で大丈夫でしょうか?
チャプターは一つずつしか進めないと思っていたので、
全部まとめて一つのシーンだという見方を初めて知りました。
>>今回もわかりやすかったです。
>>公開はしませんが、別窓でカンペしながら同じものを作ってみています。
>>画像を入れられるのが楽しみです。
ありがとうございます(^^)
>>「メイン」のチャプターを主に計算させていく、ということだと思うのですが
>>「関数」「初期設定」「設定」のチャプターを前提に「メイン」のチャプターが進んでいく、
>>という解釈で大丈夫でしょうか?
はい。大丈夫です。
「メイン」に入る前の設定を基にして、メインスクリプトを作動させる感じです。
一つにまとめることも可能ですが、
編集の時に、ややこしいので(^^;)
>>チャプターは一つずつしか進めないと思っていたので、
>>全部まとめて一つのシーンだという見方を初めて知りました。
チャプターを行ったり来たりすることで、
少しのスクリプトで、長いゲームを作ることができます。
これを知っているだけで、作れるゲームの幅が一気に膨大しますよ(^^)
<補足>
ちなみに、チャプターを使えないようなRmake外でのプログラミングでは、
def みたいなやつで囲んで、それでチャプター移動みたいなことをします。
>>公開はしませんが、別窓でカンペしながら同じものを作ってみています。
>>画像を入れられるのが楽しみです。
ありがとうございます(^^)
>>「メイン」のチャプターを主に計算させていく、ということだと思うのですが
>>「関数」「初期設定」「設定」のチャプターを前提に「メイン」のチャプターが進んでいく、
>>という解釈で大丈夫でしょうか?
はい。大丈夫です。
「メイン」に入る前の設定を基にして、メインスクリプトを作動させる感じです。
一つにまとめることも可能ですが、
編集の時に、ややこしいので(^^;)
>>チャプターは一つずつしか進めないと思っていたので、
>>全部まとめて一つのシーンだという見方を初めて知りました。
チャプターを行ったり来たりすることで、
少しのスクリプトで、長いゲームを作ることができます。
これを知っているだけで、作れるゲームの幅が一気に膨大しますよ(^^)
<補足>
ちなみに、チャプターを使えないようなRmake外でのプログラミングでは、
def みたいなやつで囲んで、それでチャプター移動みたいなことをします。
ホントに・・・「あんたスゲーよ・・・・」です。
この講座をそのまま一度入力してみるだけでも、何となーく手が覚えてくれて、入力前より怯えなくなりますね。
昔々の「マイコン」という雑誌の偉い読者プログラマーの方達を思い出します。。(年齢がバレます^^;)
ありがとうございます(^^)
マイコンって、発行が終わった時僕は1歳ですね(^^;)
今、第3回の地図作成を書き終えたところですが、
これは、ちょっと難易度が一気に上昇しすぎた気がします・・・
「今回はわかりにくかったです」とか書かれそうですが、
この返信をした時点で、すでに書き込み終えているので、
ぜひ見てみてください。