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

投稿者:Cdv30200 aoi icon mini aoihikawa 投稿日:2011/08/04 11:05

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回 より面白くするために

コメントする

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

コメント一覧

User icon mini 退会したユーザー(投稿日:2011/08/15 15:10, 履歴)
わかりました。ありがとうございます
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/08/06 18:30, 履歴)
>帰ってきた暇人さま

turugiをカウントする箇所で、
式の書き方が間違っています。

変更前
turugi = 0 
if turugi == 1 
    speak("剣はもう取っている") 
else 
    speak("「日本刀か…持っていくか…」") 
    speak("★日本刀を手に入れた!★") 
    openActivityFeedWindow("実績解放! 最初の武器") 
    turugi = turugi = 1 
end


変更後
turugi = 0 
if turugi == 1 
    speak("剣はもう取っている") 
else 
    speak("「日本刀か…持っていくか…」") 
    speak("★日本刀を手に入れた!★") 
    openActivityFeedWindow("実績解放! 最初の武器") 
    #_/_/_/_/_/ 変更点 _/_/_/_/_/
    turugi = turugi + 1
    #_/_/_/_/_/ここまで_/_/_/_/_/ 
end
User icon mini 退会したユーザー(投稿日:2011/08/06 17:36, 履歴)
一応書いてみましたが、なぜか出来ません。教えてください先生!

turugi = 0
if turugi == 1
speak("剣はもう取っている")

else
speak("「日本刀か…持っていくか…」")
speak("★日本刀を手に入れた!★")
openActivityFeedWindow("実績解放! 最初の武器")
turugi = turugi = 1
end
Logo1 mini fmy(投稿日:2011/08/04 22:02, 履歴)
いちいち挿絵が可愛いです先生ー。

おおお先生が本気で周囲のレベルを上げようとしている…
こういうのいいですよねーこれを経て出てきた作品とか
どこかでまた違う化学変化起こして自分の刺激になって帰って来るかと思うと
アツがムネくなりますよねー。
Banana 1 mini @shi_note(投稿日:2011/08/04 21:13, 履歴)
先生すばらしいです、めちゃくちゃわかりやすいです。
defはぜひ使ってみたいと思いました。
Michael mini ミカエル(投稿日:2011/08/04 19:58, 履歴)
絵まで添えてあってとてもわかりやすかったです!
基礎知識がない初心者な僕にとってはありがたかったです。
ありがとうございました。
Cdv30200 aoi icon mini aoihikawa(投稿日:2011/08/04 14:16, 履歴)
>rontoさま
ご意見の通り、スクリプト言語(arrp)は
rubyライクな言語として開発されているようです。
-Dycoonの日記- ゲーム共有サイトRmakeを開始
Icon mini ronto(投稿日:2011/08/04 13:42, 履歴)
Rmakeのスプリクトはrubyが元になってるって聞いたけど…