スクリプト/つくってみよう0

最終投稿者:Nyan mini rurun9 更新:2012/03/19 14:41:08
Rmakeの何が凄いって、話題のクラウドコンピューティング
(データもソフトもサーバーに置いておき端末からアクセスするだけ。端末に特殊装備は不要)
であって、コンパイル作業も不要、且つ公開したらインターネットブラウザで気軽に遊べる事だよね。

ココを読んでるくらいのアナタ、最早つくるしかないのです。
そんな感じで
プログラムを組むに当たって、根本的なルールをまずは把握しておきましょう。

ヘルプ/スクリプト言語のマニュアル
スクリプト/変数

には必ず目を通しておいて下さい
それから、用意されている関数がどんな機能なのかはこちらでわかります。

ヘルプ/関数リファレンス

これは辞典みたいなものなので、慣れるまで作業中は開きっぱなしにしておき、 わからないのが出てきたら、意味と使い方を確認していきましょう

スクリプトの書き方としては、一行にひとつの処理を書くのが基本です。
ここで言う一行とは、Enterキーで改行するまでを意味します。画面の表示都合上、長いと自動的に画面右端で折り返す場合がありますが、これは改行ではありません。
コピー&ペーストした場合に、よく改行を忘れるので注意しましょー。

スクリプトは必ず書かれた順にひとつずつ実行されていきます。
文法を間違えたりしてるとそこでエラーが出て、場合によっては止まってしまいます。

変数と関数を組み合わせてつくっていくわけですが、
関数がそれぞれ「〇〇する」という細かい動作を担当してるので、
実は全体的な組み立て方としては次の3つのパーツでしかありません。

  • ランダム
  • 分岐
  • 繰り返し

思ってたより簡単ですね。順に見ていきましょう



■ランダム


関数リファレンス>システム>乱数 にある、
rand関数 を使って結果を分岐させれば
ゲームっぽくなりますよね。
#例1
a = rand(3) # aに入る値は0,1,2の三つのうちいずれか


■分岐


【 if 条件式 ~end 】を使います。
#例2
i = rand(5) # iに入る値は 0,1,2,3,4 の五種類
if i == 0
  speak("0 だよ")
elsif i == 1 #0では無かった場合に、更に分岐
  speak("1 だね")
else #残りは全部こちら
  speak("ハズレ")
end

→例2
条件式とは、値を比較する部分の事です。
比較に使う記号と書き方は、スクリプト言語のマニュアルにあった通りです。
if文は必ずendで閉じないといけません
elsifやelseは省略する事ができます。

シャープ記号 # は、それ以降の文字をコメントにします。
つまり#より後に書かれた文字は、プログラムの実行内容に全く影響を与えない落書きです。
後々自分で見てもスグ判るように、適度に説明を書き残しておくと良いかと思います。
尚、スクリプトは根本的に半角英数字しか使えません
全角日本語文字が使えるのは、ダブルクォーテーション " " で括られた文字列か、コメントだけです。

例2ではspeak関数によりrandの結果をメッセージ表示しているだけですが、
この処理を書き換えれば、色々な事ができるのです。
RPGなら levelUp() と書けばプレイヤーキャラのレベルが1上がります。
どんな事ができるのか、関数リファレンスを眺めつつ構想を練ってはいかがでしょうか。
夢広がりんぐ。

分岐時に、特に値がハッキリしている場合には
【 case 条件式 when~end 】も使えます。
#例3
case rand(3)
when 0
  speak("0 だよ")
when 1
  speak("1 だね")
end
#注意:もしもrand(3)の結果が2だった時は、何もせず終わります


ところで、
セーブやロードによりゲームが途中から始まる場合がありますよね。
そんなときに、既に変数に中身が存在するかどうかを調べる事もできます。
#例4
speak("1回目 what = ", getVariable("what") )

if !getVariable("what")
  setVariable("what",100)
end

speak("2回目 what = ", getVariable("what") )

→例4
if 変数名
と書く事で、その名前の変数に中身が入っているかどうかがわかります。
一回目のspeakでは what = null と表示されるものの、
二回目のspeakでは what = 100 になる筈です。
とにかく文字でも数値でも、変数に中身が入ってさえいればtrueが返ってきます
中身が無い( null と表示される)場合はfalseが返ります。
注意としては、変数にフラグfalseが入っていた場合、falseがそのまま返ってくる点でしょうか。

例4では、条件を反転させる ! を付けているので、
「もし基本変数 what の中身が無かったら 100 にしとけ」という処理になっています。

#例5
judge = true
if judge
 speak("当たり")
else
 #この例では当たりにしかならず、実行時ココを通過する事はありません
end

→例5
true または false の二択の値を持ったフラグ変数のときは
if 変数名
と書く事で true かどうかを調べる事ができます。
要するに if getFlag(フラグ変数名) と書くのと同じです。


■繰り返し


【 while 条件式 ~end 】を使います。
#例6
i = 0 ; max = rand(5) + 3 ; word = "な"

while i <= max
  word = word + "な"
  i = i + 1
end

speak( word + "んだってぇ?!" )

→例6
セミコロン ; はマルチステートメントすなわち同じ行に続けて別の処理を書く事ができます。
まとめて書く事もできますよ、という程度に覚えておきましょー。

例6では、i が max と同じか小さい間は、対応するendに挟まれた内側の処理を繰り返します。
この場合、変数 word に文字"な"が追加され、i が1ずつ増えていきます。

繰り返しの while 文で最も注意しなければならないのは、必ず処理が終わるように作る事です。
上の例で言うと while 直前の i=0 と i=i+1 が無ければ結果として永久ループしてしまいます。

#例7
a = true ; x = 0
while a
  x = x + 1
  if rand(32) == 0
    a = false
  else
    waitTime(1)
  end
end #while a終
speak( "x = ", x )

→例7
今度は while~end の内側に if~end がネスト(入れ子)になっています。
endだけ見ても、実はどれに対応したものか見分けはつきません。
しかしコンピュータは階層の深さを間違えず内側から順に閉じていってくれますので、
対応したendを書き忘れたりすると文法エラーで怒られて止まります。
スクリプトのインデント(書き出し位置)を揃えるなど見易く工夫していきましょー。

例7では、a が true の間ループし続けます。
独立事象な32分の1の確率を引くまで何回乱数を取り出したか、をxで数えている処理です。

コンピュータの処理は半端なく早いのでこの程度なら即行で終わるのですが、
万一、繰り返しを使って半永久的にループさせる場合は出来る限り waitTime 関数を入れておきましょう。
Rmake はパソコン等のOS上のソフトである
インターネットブラウザ内のFlashという技術を利用して動作しています。
waitTimeを入れて Rmake 以外のシステムが動作する余裕を与えないと、大変な事になります。
(実際には、1行を数十回行うループなら間違いなく一瞬で終わります)

少々遠回りもしましたが、以上のあたりを踏まえてプログラムを組み立てて
自由な発想でどんどんゲームをつくっちゃって下さい!

 配列を駆使して高度なゲームを作成

 ノベル型でアクションに挑戦

コメントする

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

コメント一覧

Nyan mini rurun9(投稿日:2010/07/31 15:14, 履歴)
お疲れ様でした有り難うございました。
Zararu128x128 mini dycoon(投稿日:2010/07/30 20:24, 履歴)
!0がfalseになるように動作変更をおこないました。

ご迷惑をおかけいたしますが、
よろしくお願いします。
Nyan mini rurun9(投稿日:2010/07/28 11:47, 履歴)
なんと!
そんなのが見つかっただけでも書いた意味があったかな
Zararu128x128 mini dycoon(投稿日:2010/07/27 22:32, 履歴)
!0がtrueになってしまうのはarrpのバグです。falseになるべきです。
動作を修正する方向で検討しています。

よろしくお願いします。
Material 7186 1 mini ikosami(投稿日:2010/07/27 19:01, 履歴)
if !getVariable("what")
setVariable("what",100)
end

はwhatが0の時にも100になりますよ。