スクリプト/Rmakeで自由なゲームをつくろう / 第01回 スクリプトって何?

最終投稿者:Cdv30200 aoi icon mini aoihikawa 更新:2013/03/03 10:53:08
Rmakeで自由なゲームをつくろう

 第01回 スクリプトって何?


  こんにちは。
 フリーデザイナープログラマー(自称)の
 簸川 葵(ひかわ あおい)と申します。


  実は、文章を書くのはあまり得意ではなかったりするのですが、
 まったり、ちまちまと連載形式で
 ゲームのつくり方について纏めていこうと思います。
 よろしくお願いいたします。

  第01回はそもそも「スクリプトって何?」
 というところから始めていきますね。



01-01 スクリプトとはプログラム言語に近いもの


  Rmakeのゲームは絵や音楽などの素材と、
 それをどのように動かすか指示することができる「スクリプト」
 の組み合わせで出来ています。

  Rmakeの「スクリプト」はarrpと呼ばれる
 スクリプト言語で書きます。
  このスクリプト言語は、プログラム言語に近いもので
 大体、似たようなことが行えます。


  プログラム言語なんて英語みたいで分からない!
 という方もいらっしゃると思いますが、
 実はプログラム言語とは変数命令文関数
 という3つの要素の組み合わせで出来ており、
 ある程度のパターンを覚えてしまえば、誰でも簡単に書けるものです。

 さて、それではこの3つの要素を具体的に解説していきましょう。



01-02 「変数」って何?


  変数とは、何かを入れるための「箱」のことです。
 この箱には、命令文の名称を除く、アルファベットと数字・一部の記号で構成された
 好きな名前を自由に付けることが出来ます。


  たとえば、「x」という箱に「3」という数字を入れたい場合、
 以下のように書きます。
x = 3


 簡単でしょ?


 また、数字以外にも、さまざまな値を入れることが出来ます。
suuji = 3                  #suujiに「3」が入ります

moji = "あいう"            #mojiに「あいう」が入ります

furagu = true              #furaguに「true」が入ります
                           #trueとはスイッチでのONのこと、OFFは「false」と書きます

keisan = 3 + 2             #keisanに3 + 2の結果である「5」が入ります

keisan2 = keisan - suuji   #keisanに入っている「5」から
                           #suujiに入っている「3」を引き算し、
                           #結果である、「2」が入ります


  っと、説明し忘れていましたが、「#」と書くと、この文字以降の文字は
 「コメント」として扱われるため、スクリプトとして実行されることはありません。
  また、スクリプトは必ず上から順に実行されるため、
 suujiに「3」を入れて、次にmojiに「あいう」を入れて・・・と実行されます。
 そのため、keisan2には「2」が入るわけです。



01-03 「命令文」って何?


  命令文とは、その名前のとおりスクリプトに命令をする文のことです。
 ここで分岐してください。とか、繰り返し実行してください。などのことを
 命令文によって実行することができます。


  命令文にも、さまざまな種類がありますが、今回はゲームをつくる際
 最もよく使用される、2つの命令文を解説します。
 たった2つですが、これだけでもゲームがつくれてしまいますから(w


  1つめ、「if文」
 これは、ある条件が揃ったとき、スクリプトの流れを分岐してもらう
 命令文です。
hp = 5
mp = 5

if hp > 3
    #hpが3よりも大きければ
    mp = 10            #今回はこれが実行されます
else
    #そうでなければ
    mp = 0
end

if mp == 10
    #mpが10ならば
    hp = hp + 5        #今回はこれと
    mp = mp - 2        #これが実行されます
elsif mp < 10
    #mpが10でなく、10よりも小さければ
    hp = hp + 1
    mp = mp - 1
else
    #そうでなければ
    mp = mp - 5
end

#結果、hpは「10」、mpは「8」が入っています

 命令文も変数のときと同様に、必ず上から順に実行されるため、
 elsifの条件文は、ifの条件文より後に判定されることに注意してください。


  2つめ、「while文」
 これは、ある条件が揃っている間、この中を繰り返し実行してもらう
 命令文です。
hp = 0

i = 0             #カウントの準備
while i < 10
    #iが10よりも小さい間、繰り返される
    
    hp = hp + 2
    
    i = i + 1     #カウントを増やす
end

#結果、hpは「20」が入っています

 ゲームとは、キーの入力→さまざまな判定→描画→はじめに戻る、
 の繰り返しのため、必須となってきます。



01-04 「関数」って何?


  関数、と言われると、算数とか数学を思い出しますが、
 スクリプトで関数とは、処理を代行してくれる便利な纏まりのことです。


  Rmakeには予め、さまざまな関数を用意してくれています。
 関数リファレンス

  たとえば、「speak」という関数は
str = "こんにちは世界"

speak(str)

 と、書いてあげると、画面上にメッセージ枠と「こんにちは世界」という文を
 表示してくれます。
  なお、関数の名前の後にある、括弧の中の値ことを引数と呼び、
 関数に渡してあげる値を入れます。


  他に、「rand」という関数は
randam = rand(10)

#randamには「0」~「9」の値がランダムで入る

 と、ゲームをつくるのに便利なものとなっています。
  っと、説明し忘れていましたが、値が返ってくる関数は、
 「変数 = 関数」の形で書き、
 この変数に入る値のことを戻り値と呼びます。


  また、関数は次のようにdefという文で
 自分で自由に作ることも可能です。
#余りを計算する関数の作成
def amari_keisan(x, y)
    #xとyが引数
    kekka = x % y         #余りを計算する
    
    return kekka          #kekkaを戻り値にする
end


a = 7
b = 3

c = amari_keisan(a, b)    #複数の引数がある関数は「,」で区切る

#cには「1」が入っています

 なお、関数も同様に、必ず上から順に実行されるため、
 自分で作った関数を使う場合、使う場所よりも先に
 defで関数を作っておかないといけません。



01-05 おわりに


  いかがでしたでしょうか。
 最初のうちは、分かりにくいところもあると思いますが、
 難しく考えることはありません。
  それが変数なのか、命令文なのか、関数なのか
 というだけなのです。

  今回、紹介しました命令文や関数以外の命令文や関数もありますが、
 一度に沢山覚える必要はありません。
  「必要となったときに調べてみる」ことで大丈夫です。
 特に、関数については 関数リファレンス を別のページに開いておくと便利です。


  さて、次回は早速、これらを使用して、
 「画面にキャラクターを描画する」を実践してみましょう。


  第01回 スクリプトって何?
  第02回 画面にキャラクターを描画する
  第03回 キャラクターをキー入力で操作する
  第04回 敵キャラクターを登場させる
  第05回 弾を発射させる
  第06回 より面白くするために

この記事についてご質問等がありましたら
こちらのブログ記事のコメントへご投稿、
よろしくお願いいたします。

コメントする

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

コメント一覧

             mini ティラミス(投稿日:2013/03/01 21:57, 履歴)
やっぱり難しそうです^^;
なかなか理解できません^^;
Material 154390 2 mini  創 (投稿日:2013/03/02 12:46, 履歴)
初心者さんにはこちらは難しいかもです。
同じく簸川さんのこちらを見るといいかもです。
             mini ティラミス(投稿日:2013/03/03 10:53, 履歴)
ありがとうございます!^^
一回よんだので、もう一度読み返してみます^^
Aa mini #いお(投稿日:2012/05/21 19:08, 履歴)
変数について、卵を集めるイベントはこれではだめなんでしょうか

↓Aのイベント
tamago = 2


↓Bのイベント
tamago = 1


Cのイベント
if tamago = 3
speak("おお。すごい!")
else
speak("まだ集めてないよ")
end


これではだめなんでしょうか
これだとtamagoという箱に入れて行くっていう感じで
if文でtamagoの箱に3つ入っていたら、「おお、すごい」
っていう文を出したいわけですが・・。
これでやるとエラーが出ます。
このようにしたい場合はどうすればいいのでしょうか
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/21 19:40, 履歴)
Cのイベントにて
if文の条件式が間違っています。

イコールかどうかを判定するためには
「=」ではなく「==」を使用します。
Aa mini #いお(投稿日:2012/05/21 19:56, 履歴)
Cのイベントにて、3つ手に入れた後に
if tamago == 3
speak("おお。すごい!")
else
speak("まだ集めてないよ")
end

の「おお。すごい」の部分が実行されず、エラーに
line: 2 not defined variable : tamago

と表示されます
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/21 20:05, 履歴)
Error一覧
「not defined variable」、
つまり「tamago」変数に中身がありません。
というエラー内容ということが分かります。

何故、値が含まれていないかというと
「tamago」という定義方法は変数の種類の中で
ローカル変数というものであり、
ローカル変数の有効範囲は
ユーザ定義関数内、各シーン内、各イベント内までのため
イベントが終了した時点で「tamago」変数が
開放されるためです。


ローカル変数の範囲外で、
値を引き続き利用したい場合は
通常変数を利用する必要があります。

変数
Rmakeで自由なゲームをつくろう / 第03回 キャラクターをキー入力で操作する
Cdv30200 aoi icon mini aoihikawa(投稿日:2012/05/21 20:17, 履歴)
なお、このような問題解決への手順についても
ノウハウのページに纏め記事があります。

バグの見つけ方
User icon mini 退会したユーザー(投稿日:2012/05/22 17:15, 履歴)
この記事は主にノベル向けなので
RPGとかでやる場合、普通の変数を使いましょう。
メニュー
目次