すくりぷとのススメ 基本的なこと

01.前語り的なの

スクリプトってどれするの

スクリプトを使う方法はいくつかありますが、小技的な使い方なら

イベントコマンドの上級にあるスクリプトが便利です。
とりあえずこれで使えるものをピックアップしていきたいと思います。

スクリプトのうまみ

スクリプトでまず便利になることといえば、「参照と代入」が自在にできるようになり、
「計算」、「条件分岐」、「ループ」等がより扱えるようになることだと思います。

「参照と代入」とは、アクター1のHPがいくつか?直接参照したり、代入して値をいじったりのことです。
「計算」は変数を使えばできることですが、それだとそれぞれ1項目ずつ計算することになります。
スクリプトならば、例えば(1+2)×3÷4と一行で書くことが可能になります。

「条件分岐」は参照や計算の組み合わせで、より細かく指定することが可能に!
「ループ」は繰り返し処理のことで、ある値を変えながら似たような処理を自動化することができます。

それぞれの項目についてはより詳しく別個に書きたいと思います。
(文字クリックでその項目に飛べますが、上から順に読んでいった方がわかりやすいよう書かれていると思われます。)
イメージ的にまとめると、スクリプトは手打ちが増える分、記述ミスとかも起きますが、直感的に書けるし、
イベントコマンドでできないことも出来、何度も呼び出さなくてすんだり楽になる点も多いもんです。

変数に入れられるもの?

スクリプトではデータを入れておく箱として変数を使用します。
ここでいう変数は、ツクールでいう変数と同じようなものですが、実は数の計算だけでなく広く使えるものです。

ツクールをやっていると変数は「変動する数字を扱うもの」みたいな認識だと思います。
が、スクリプト上での変数は"文字"とか[データのまとまり]だとか色んなものを入れることができます。
というか実はツクールで使ってる変数自体にも文章を入れたりできます。フリーダム。
*パソコン扱っているデータは全て数字でできているので、文字も実は数字なのです。
 スクリプト上でいう変数はそれら全てを扱う意味での変数というわけです。

変数の全貌

変数は使うのに特別な準備などはいらず、あらかじめ決められたいくつかの予約語と呼ばれる単語以外なら、
アルファベットの小文字と_(アンダースコア)で書いた一続きの文字列をなんでも変数として扱うことができます。
*二文字目以降なら数字とアルファベットの大文字も含めることができます。
a b c x y level gold size moji hensuu ritto ru4t0 plm とか何でも自分で好きな名前をつけて管理できます。

alias    def      false    nil      return   unless
and      do       for      not      self     until
begin    else     if       or       super    when
break    elsif    in       redo     then     while
case     end      module   rescue   true     yield
class    ensure   next     retry    undef

これらは予約語といって、Rubyにおいて特別な意味をもっている単語なので変数名としては使えません。

もっとも基本的な変数はローカル変数と言われているもので、
スクリプトコマンドが終わったら中身は無くなる、一時的な使い捨ての入れ物です。
しかし、ある処理の間中は中身が保持されるインスタンス変数といったものもあります。
変数名の頭に@をつけるとインスタンス変数として扱われます。
さらに、ゲーム起動中プログラムのどこからでも参照できる最強の変数がグローバル変数と呼ばれるものです。
変数名の頭に$をつけたものが、選ばれし存在・グローバル変数として扱われます。

サンプム

ゲームの処理で具体的にみると、ローカル変数はスクリプトコマンドの中のみで、
インスタンス変数はイベント実行内容が一度終わるまでなら、スクリプトコマンドをまたいでも中身を保持している。
グローバル変数は、イベント実行内容が一度終わろうと、他のイベントからの呼び出しであっても保持している。
*グローバル変数は強力ですが、使わない値をいちいち保持しても仕方が無いのでむやみに使えばいいというものでもないです。

02.演算の基本

値の計算

計算はスクリプトを使う上では基本中の基本なので、ただの算数と変わらないとこもありますが大事です。

スクリプトでは、変数に値(あたい)を代入することを表す記号として = が使われてます。
x = 1 これで xに1を代入するという意味で、数学的なxイコール1とは意味がちょっと違います。

計算記号は 加算:+  減算:- 乗算:* 除算:/ 剰余:% で、×や÷といった文字は使えません。
また、割り算は小数点以下切捨てで、計算結果は基本的に整数になるようになってます。
小数を計算したい場合は1.0とか1.00とか小数点をつけることでできます。()でくくったりはもちろん可能。

3 / 2

⇒答えは 1

3 / 2.0

⇒答えは 1.5

あとは自由に ↓ みたいに書けるよ!

y = (a + b) * x + c

a とか b とか x とか c には、あらかじめちゃんと数値を代入していないとエラーでますけど!

値を代入された変数はその値と同等のものとして扱われます。

x = 1
x = x + x
x = x + x + x

としたなら、x = x + x は x = 1 + 1という意味で x の値は 2 になります。
さらにその下のx = x + x + x は、今度は x = 2 + 2 + 2 ということになるので最終的に x の値は6になりました。
*その他、べき乗は ** で、他にもルートとか円周率とか三角関数用の関数もあるのだとか。
知らなくても出来るが、y = y + 1を y += 1と書いたり、a = 1とb = 2 を a, b = 1, 2と書いたり(多重代入)
色々と書き方には裏技的なテクもあったりするので知っていくと極まるかもしれない……。


ちなみに = で代入できるのは数字だけでなく文字列や配列(データのまとまり)といったものも可能で。
なんとそれら同士の足し算もできます。

x = "許して" + "ヒヤシンス"

結果の値は⇒ "許してヒヤシンス" 二つの文字列を足して、一つの文章になりました。
*スクリプトではダブルクォート "" で囲まれたものを文字として扱う。

さらには文字と数値の掛け算も!

x = "杏マナー" * 6

結果の値は⇒ "杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー杏マナー" このようになりました。

比較・論理演算子

ある値とある値を比較するのに使う記号を比較演算子といって、6つあります。

 ==  等しい  !=  等しくない 
 <  小さい  >  でかい 
 <=  小さいか等しい  >=  でかいか等しい 


上の数字の計算で=は代入と書きましたが、では等しいことを示すのはというと、=を二つつなげた==と書きます。
レベルがいくつ以上かどうか?とかお金がちょうどいくらの時とか、使いどころはたくさんですね。
ちなみに等しいかどうかは例によって文字同士の比較等にも使えます。

"ぷらむ" == "るしと"

みたいな。完全に一致しているとtrue(合っている)になります。
この場合は違うものなのでfalse(間違い)の結果が返ってきます。

複数の条件比較などをする場合には論理演算子といったものを使います。

 and 
 && 
 〜かつ、〜 
 or 
 || 
 〜または、〜 
 not 
 ! 
 〜でない 


andと&&のように二つあるのは英単語か記号かの違いで、同じ意味なのでどちらを使ってもokです。
*厳密には優先順位的な意味で違うらしいです。同時に使った場合 ! > && > || > not > and = orの順に処理される。

(a > 3 and b + 1 == 2)

といった具合に書くと、「aが3より大きく」かつ「b+1が2になる時」といった条件を作れます。
andは複数の条件を満たしているとき、orはどれか一つでも満たしているとき、true(合っている)の結果を返します。
notは上の二つとは違い、後ろの式を否定するのに使います。(not trueと書けば、falseと結果がでます。)
条件を逆にしたり、逆の結果を出したり、といったことに使えるでしょう。

剰余の便利さ

加減乗除は馴染み深いと思いますが、剰余(割り算の余り)はあまり使い慣れていないのではないでしょうか。
これが意外に便利で、例えば「ある数の一桁は何か」といった場合は、
  % 10 (10で割った余り)で求めることができます。 例:365 % 10 ⇒ 5
  % 2 なら、割り切れて余りが0なら偶数、余りが1なら奇数ということがわかります。
剰余は2で割れば0か1の2通り、10で割れば0〜9の10通り といった具合に、
「割る数の通り」分、答えが分割されるという性質があるわけです。
なので一歩進むごとに変数A += 1するといったシステムを作ったとすれば、
変数A % 10 == 0 とかで10歩ごとに条件が満たされる、なんて仕組みを作れたりするのです。

03.参照と代入

ゲーム内の情報を参照する

ゲーム内の情報は変数の項でも説明したグローバル変数という$付きの決まった変数に入ってます。
形式は$game_xxxxという感じで、まとまりを表しているものはxxxxの部分が複数形になっていたりします。
例えば……
n番のスイッチ↓
 $game_switches[n]
スイッチ1番がONだと、$game_switches[1]はtrueになっている
*プログラム上ではON/OFFをtrue(真)/false(偽)とかいう。

n番の変数↓
 $game_variables[n]
変数1番の中身が23だと$game_variables[1]は23になっている

試しにこれが本当か見てみたい方は、↓のようにスクリプトで入力してみましょう。

p $game_variables[1]

pはprintみたいな意味で、値の内容をポップアップして表示する命令なのです。確認にとても便利!

n番のアクター↓
 $game_actors[n]
データベース上でn番目にあたるアクターの情報を参照できる、さらに…
 $game_actors[n].hp なら現在HP
 $game_actors[n].maxhp なら最大HP
.hp とかドットをつけて何かしてるのは、$game_actors[n]に対してhpという命令を行うみたいな意味で、
同様に、atk:攻撃力 def:防御力 spi:精神力 agi:敏捷性 level:レベル exp:経験値 とかいろいろ参照できます。

データベースの情報を参照する

$game_xxxxとは別に$data_xxxxというグローバル変数があります。
$game_系はゲーム内情報(ゲームの進行とともに変わるデータ アクターの能力値やスイッチ、変数など)
$data_系はツクールのエディタのデータベースに入力した情報(アクターの初期職業やアイテムの名称とか)
といった違いで、アクターの情報でも$game_actorsとは別に$data_actorsという参照先もあるわけです。
*ヘルプのRGSSリファレンスにあるゲームライブラリのデータ構造ツリーに、
各項目について定義されてる項目一覧みたいなのがあるのでわかってきたら読んでみるのもいいかも。(アクターならRPG::Actor)

参照したデータを具体的に使う方法

上で参照したデータは、だいたい書き換えもできます。
例えばスイッチ1をONにする、ならば
 $game_switches[1] = true
スイッチ1をOFFにする、ならば
 $game_switches[1] = false
とするだけです。ね?簡単でしょう。
変数なら計算と同様に
 $game_variables[1] = 23 とか
 $game_variables[1] += $game_variables[2] + 1 とかできちゃいます。
$data_系に対しても多分書き換えることはできるけど、
$game_系と違って変更を保存しないので、一時的な変更になるんじゃないかと思います。

04.条件分岐

条件分岐

これより上の項目でやっていたことは、この条件分岐をするための布石みたいなもので、
計算比較参照したデータはこの条件分岐と組み合わせることで真価を発揮します。
条件分岐に用いる文は、if 〜 elsif 〜 else 〜 end という流れに沿って使います。
if は もし〜ならば という意味で、

if 条件
  実行内容
end

*ifと条件の間には半角スペースが必要なので気を付けましょう。
という形式で書きます。これはツクールの条件分岐の命令を使っていれば見覚えがあると思いますが、
それとまったく同じことをスクリプトで書いているだけです。
ですが条件の部分には前項目でやってきた1 + 1 == 2 やら $game_switches[1]、"ぷらむ" == "るしと"など、
その内容がtruefalseで返されるものを自由に使えます。
逆にいえば、それが想定されてないものを当てはめるとうまくいかなくなるので、そこが重要です。
*分岐にfalseかnil以外のものが入っていると実はtrueとして扱われます。全角文字を""なしで入れたら流石にエラーでますが!

elseはそれ以外の場合という意味で、おおよそ見当がつくでしょうか?
ツクールの条件分岐にもある「それ以外の場合」と同等のものです。
elsifはelse ifを短縮した意味で、それ以外の場合でさらに条件をつけたい場合に使います。

条件分岐のヤリカタ

まず、基本形は

if nantoka
  p "るしと"
end

もし nantoka が true ならば るしとと表示 という分岐がこれで作れます。

例えば

if a == 1
  p "るしと"
end

と書けば、a が 1 と等しいとき るしとと表示 という分岐になります。

比較演算子を用いれば、

if $game_actors[1].hp < 100
  p "死にかけている!"
end

このように、1番目のアクターのHPが100未満の場合死にかけている!と表示 とかできます。


if $game_actors[1].hp < 100
  p "死にかけている!"
else
  p "僕は元気"
end

それ以外の場合をelseでこう書くとhpが100未満以外の場合(つまり100以上)僕は元気と表示する。

複数の条件を使う場合、

if $game_actors[1].hp < 100
  if $game_actors[1].hp < 10
    p "まじやべえよ!"
  else
    p "死にかけている!"
  end
else
  p "僕は元気"
end

といった風に入れ子状態にすることもできるし、

if $game_actors[1].hp < 10
  p "まじやべえよ!"
elsif $game_actors[1].hp < 100
  p "死にかけている!"
else
  p "僕は元気"
end

のようにelsifを使って分岐することもできます。

ただし、分岐は上から順に処理されるので、この場合の"死にかけている!"の処理は
HPが10未満の場合?→それ以外の場合→HPが100未満の場合?という順を経ていることになります。

if $game_actors[1].hp < 100
  p "死にかけている!"
elsif $game_actors[1].hp < 10
  p "まじやべえよ!"
else
  p "僕は元気"
end

なので、こんな順序にすると まじやべえよ!の処理がくることはなくなってしまいます。
どういう順番で処理が行われるかはよく考えたほうが良いでしょう。
*ifとendは必ず対応するように、どの分岐がどこを囲んでいるかをわかりやすくするため、
インデント(字下げ:半角スペースとかタブで文字列を調節)を活用すると良いです。

ここでは実行内容の例としてp で文字を表示するだけですが、
実際には数値計算をしたりデータの書き換えでやったように実行内容は多様にできます。
できることはどんどん見つけていきましょう。

Ex文法

条件分岐自体は上の方法で十分できますが、他にも知っていると便利な書き方があります。
条件分岐が一行でいい場合、修飾子形式

p "るしと" if a == 1

a が 1 と等しい場合"るしと"と表示する。
こんな感じで行いたい処理の後ろに条件を書くことで、endを省略して書けます。見た目もすっきり。

〜かどうか?を?、結果を:で分岐する形式で、if、else、endを省略する条件演算子形式

p (a >= 10 ? "びっぐるしと" : "みにるしと")

a が 10 以上の場合"びっぐるしと"、それ以外の場合は"みにるしと"と表示する。

特定の変数の値によって分岐させたい場合に使える、case 〜 end

case a
when 0
  p "ぷらむ"
when 2,3,5,7
  p "りっと"
when 4..6 
  p "るしと"
else
  p "じどりさん"
end

a の値が0なら"ぷらむ"、2,3,5,7のどれかなら"りっと"、4〜6の間なら"るしと"と表示する。
a が 5 だったら、上の処理が優先されるので"りっと"が表示される。それ以外の場合は"じどりさん"。

条件が満たされていないときの分岐、unless 〜 end
ifが条件が真(true)のとき実行するのに対して、条件が偽(false)の場合に実行する分岐方法です。
unless true、if false、if !true、はどれも同じ条件を書き換えているだけで、
書き手がわかりやすい形で書くことができるようになっているのです。

オマケ イベント命令の条件分岐:スクリプト
イベント命令の条件分岐:スクリプトはifを省略した形で条件を書けるようになってます。

条件分岐:スクリプト $game_actors[1].hp < 100
  なんとか
それ以外の場合
  なんたら
分岐終了

こんな感じで 入力欄はちっちゃいけど長くてもいけるので、
イベントコマンドとスクリプトのハイブリッド的な合わせ技が楽しめます。

05.ループ

for 〜 in 〜 end ループ

ループは決まった繰り返し作業をプログラム化して、自動化する便利さの代名詞ともいえます。
ぷらむがよく使うのは for 〜 in 〜 end のループです。

n = 0
for i in 1..5
  n += i
end

これは変数 i を 1 から 5 までの範囲で変化させて、その都度 nにiを足すという繰り返しです。
実際にどのように変化するかというと、iは1〜5まで変化するので繰り返しは5回行われ、
n は 0から始まって 0 + 1 = 1 → 1 + 2 = 3 → 3 + 3 = 6 → 6 + 4 = 10 → 10 + 5 = 15 と変化します。
結果 nはこの処理の後 15 という数値が入っているわけです。

これを応用すれば、こんなことができます。

for i in 1..$data_items.size - 1
 item = $data_items[i]
 $game_party.gain_item(item, 1)
end

データベースのアイテムの数と同じ回数だけループを行って、全アイテムをそれぞれ1個ずつ入手します。
$data_items.sizeは設定上には存在しない0番も含むアイテム数をだすので-1しています。

他にも、二重のループにしてこんなこともできます。

for a in 1..4
  for b in 12..34
    $game_actors[a].learn_skill(b)
  end
end

アクターID 1〜4番のアクターにスキル番号12〜34のスキルを習得させる。
こんなことをイベント命令でやろうとしたら途方もなく面倒な作業になりますよね。
ループなら数行でこういったことができる強みがあるのです。

while / until 〜 end ループ

もう一つは特定の条件が満たされている/もしくは満たされるまでの間ループさせたい場合に使うやつです。

n = 0
i = 1
while i <= 5
  n += i
  i += 1
end

iが5以下の条件を満たす間、内容を繰り返す。

n = 0
i = 1
until i > 5
  n += i
  i += 1
end

iが5を超えるまで、内容を繰り返す。

これらは実質的にfor 〜 in 〜 end ループで最初にやった1..5までiを変化させるループと一緒です。
for 〜 in 〜 endがある範囲でループさせるのに対して、こちらは条件が合うかどうかなので、
何回ループするのか定まりにくい場合に使えるでしょうか。
まぁfor〜inかwhileかuntilのどれか一つでも覚えていれば事足りると思います。

ループはこんな感じで数行でたくさんの作業をさせることができてしまいます。
これだけのことをさせるのに結構時間かかるんじゃないかと思われるかもしれませんが、実行すると一瞬です。

ですが気をつけなくちゃならないことがあります。
例えばこのuntilのループだと条件が満たされるまでループされるわけですが、
ではずっと条件が満たされることがなかったらどうなってしまうのか……?

いわゆる無限ループに陥ってしまうのです。無限ループってこわくね?

無限ループになると延々処理が終わらないので操作できなくなったりしますが、まぁそうはいっても
ツクールのテストプレイならウィンドウ自体を×で閉じれますし、そこまで深刻な問題になるわけではないです。
* p とかでポップアップが延々とでる場合はF12押しながら×で閉じれます。
なので臆さず試していきましょう! まぁなるべく無限ループは起こさないようにした方がいいですが!
バグとして残ってたら致命的です……。

あらかじめ範囲を指定してループするfor 〜 in 〜 endではそういった無限ループは起きにくいので、
やっぱりこっちの方が扱いやすいかもしれませんね。

もっとシンプルなループ

上で紹介したものよりもっと単純にループを作ることもできます。

loop do

end

それがこれです。これはツクールのイベント命令のループと同じものだと思ってもらえばいいでしょう。
後述のループ補助命令と組み合わせて使うと良いです。

ループ内で使える特殊な命令

ループ処理を補助する役割をもったものがいくつかあります。

break
next
redo
retry

といった命令がそれです。これらはfor〜inでもwhileでもuntilでもloop doでも使えます。
breakはループの中断で、ツクールのそれと同じで、一番内側のループから脱出します。

i = 0
loop do
  i += 1
  if i == 5
    break
  end
end

iが5になったらループ中断

nextはそれが書かれた時点で、次の繰り返しに処理を移す命令です。

for i in 1..5
  next if i == 3
  p i
end

iが3のとき、p iを飛ばして次の繰り返しを続けるので、1、2、4、5 と表示します。

redoはそれが書かれた時点で、同じ繰り返し処理をを再度行います。

n = 0
for i in 1..5
  p i
  n += 1
  redo if n < i
  n = 0
end

n が iと同値になるまで同じ繰り返しをやり直すので、p i で i 回表示されることになります。

retryはそれが書かれたその時点で、ループ自体を最初からリトライ(やり直し)します。
上のfor i in 1..5の例ならば、redoはiを同じ値で再度繰り返し、retryはiを1からもう一度やり直し、となります。
*redo や retryも条件分岐などをうまく組み立てないと何度も戻ってしまい、無限ループを引き起こしてしまう可能性があります。

これらを利用すると、

for i in 1..5
  if $game_actors[i].hp >= 500
    if $game_actors[i].def >= 20
      name = $game_actors[i].name
      p name + "お前タフやな。"
    end
  end
end

      ↓↓↓

for i in 1..5
  next if $game_actors[i].hp < 500
  next if $game_actors[i].def < 20
  name = $game_actors[i].name
  p name + "お前タフやな。"
end

こんな風に書き換えることができます。
好みの問題でもありますが、行数も減るし複数の条件付けを一行ずつ追加しやすいかもしれません。

06.ランダム

ランダムな数

みんな大好き?ランダム! 行うたび結果が変わるランダム要素は ゲームに妙な中毒性を生みます。
ぷらむは大好きなランダムなので1章丸々用意しました。乱数(ランダムな数)を生成する関数はこちら。

rand(x)

これで x通りの数値を返します。
プログラムの数値は0から始まるので、0 〜 xに入力した数-1 の範囲の数値がでてきます。
random(ランダム)の後ろ二文字を省略した形のrandという名前ですね。
コンピュータは現実でサイコロをふるような完全に無作為のランダムな数を作り出すことは出来ないという話がありますが、
このrandはけっこうバラバラな数をちゃんとだしてくれます。ぷらむ体感です。


例.

rand(2)

0か1のどっちか コイントスの表裏みたいなものができる

rand(100)

0〜99のうちのどれか

では、サイコロのように0がなく、1〜6の数値をだしたい場合はどうすればいいでしょうか。

rand(6) + 1

そういった場合は、このように + 1と数字を足してやればokです。
これで 1〜6のうちどれか という乱数が作り出せます。

注意点:randの()に指定する数は正の整数しか使えないので、-とか0入れると変な数でてくるので気をつけよう!

乱数を使ったテクニック

乱数を使っての条件分岐

if rand(100) < x 

このようにすれば x%の確率で条件成立!といった分岐も作れます。
x が 0 だとrandの結果が最低でも 0 < 0となって必ず不成立(確率0%)になりますし、
x が 100なら randの結果は最高でも 99 < 100となるの必ず成立(確率100%)となるわけです。

何分の1の確率で、といった分岐を作る際にはこういうのも使えます。

if rand(2) == 0

もしくは

if rand(2).zero?

これなら2分の1の確率でそれ以下を実行という分岐ができます。

いくつかの条件分けがしたいときは、

r = rand(4)
if r == 0
  p "ぷらむ"
elsif r == 1
  p "るしと"
elsif r == 2
  p "りっと"
else
  p "ぷるしとりっとしと"
end

このように始めに何か変数に乱数を代入しておいて、分岐するという形にすると良いでしょう。
分岐ごとにelsif rand(4) == 0のようにしてしまうと、その度に乱数が変わってしまうので結果が一つに定まらなくなってしまいます。

お手軽なランダム分岐の方法はこれです。

これなら条件を書く必要もなく、コピペで分岐をどんどん増やすことができます。

07.結論

あとがき的なの

そこそこな文章量になってしまいましたけど、どの項目も知っていて損はないと思うものを選びました。
これを書く際の参考にVXのヘルプを見たり、ろかんさんのメモを使わせてもらったので、
だいたい同じようなことが書いてあったりします。けど微妙にアレンジしてたりもします。
より高度な情報や実用的なテクニックは別のページでまたしたいと思います。

総まとめ

01項目では、前語り的なのでスクリプトにおける変数について書きました。
ローカル変数、@付きのインスタンス変数、$付きのグローバル変数などの種類の違いは重要です。

02項目では、演算の基本で計算方法や比較やら論理やらをまとめました。
ほぼ数学な話ですが、以降の参照代入や条件分岐など、よく関わるものなので全て知っておく必要があります。

03項目では、参照と代入の話で、ゲームデータを本格的に読み取ったり書き換えたりを説明しました。
この項目が理解できればゲーム構造がほんのり掴めるかもしれません。

04項目では、条件分岐を死にかけているしとを用いていくつかの例を紹介しました。
条件分岐はゲームパターンを枝分かれさせたり、ループ等の制御にも使うものなので選択肢が広がるでしょう。
これが運命(さだめ)を導くということか。

05項目では、ループの繰り返し処理能力の強大さと恐怖について伝えました。
家庭用ハード時代のツクールでは凄まじい苦労が伴ったことが容易にできるようになる、もはや神の力です。
後々どっかに書きたいのですが、ループは配列と組み合わせるとさらに便利さを増します。

06項目では、ランダムから未知なる可能性と、確率を作り出せる喜びを描きました。もはやこれは宇宙です。
ゲームには適度な運要素がリアリティや期待感を生むのではと思います。あらゆる要素に散りばめてみましょう!

この基本6項目をマスターすれば工夫と発想しだいで幾らでもスクリプトを使いこなせるようになると思います。
あとこの後に小技コーナーを載せておきます。けっこう便利技なので知ってると使えるでしょう〜。

08.小技

小技・知っ得技

コメントアウト
#の後に書かれた文はその行末まで、プログラムとしては扱わずに実行しても無視されます。
メモを書いたり、一時的にバグの原因を探るため実行しないようにするのに使えます。

p "コメント" # コメントです。くぁすぇdrfgtyふじこぉp;@

めちゃくちゃ書いても平気です。
また、一括である範囲をまとめてコメントアウトするには=begin =endを使います。

=begin
ばなーな
 なーんぞ
      うぴゃああ
=end

=beginと=endで囲まれている全ての行は無効になります。
=beginと=endの行頭には半角スペース等の隙間を入れてはいけないのが注意点です。

改行マーク
Rubyは基本的に1つの処理を行うのは1行で、改行しないと次を書くことはできません。
ですが、区切りマークとしてセミコロン ; を使うことで改行せずにつなげて書くことができます。

x = 1 ; y = 2

式の継続
上とは逆に、改行しても一続きの処理を行いたい場合

x =
1

このように演算子(= や + とか)の後なら改行してもできます。もしくは、

x\
= 1

こうして \ 記号を使うことで式の継続を表します。
スクリプトコマンドで一行に入りきらない場合などにこういったものが使えるかもしれません。

値の入れ替え
多重代入を使って値を入れ替える。

a, b = b, a

c = a ; a = b ; b = c みたいにしなくて済みます。

式展開
変数を文字列の中に埋め込んで、展開する必殺技。
文字列の中に#{x}という形で書き入れると、xの中身を展開して読み取ってくれます。例えば……

filename = "Actor1"
"Graphics/Characters/#{filename}.png" 

これを実行すると、"Graphics/Characters/Actor1.png"とfilenameの部分を展開してくれている。
filename = "Monster"とかにすればその部分だけ変えてくれるのでスマート!

初期値代入
||= と書くことでnilの場合のみ代入する。

n ||= 1

以下のように書くのと同じことです。

n = 1 if n == nil

真偽値の逆転
ある変数に ^= true と書くと、その変数がtrueならfalseに、falseならtrueに値を変えます。

$game_switches[1] ^= true

スイッチ1番がONならOFFに、OFFならONに。