【Prominence3D】もよろしく!!
あのRPGツクールの開発部もおすすめする
2Dゲーム用の3Dエフェクト作成ソフト!!
無料体験版を是非触ってみてください!!
トップページ > HSPのひきだし > 関数(ランダム)
2013年04月07日

関数(ランダム)

Pocket

ランダム

    screen 0, 640, 480
    HP = 200

    ;5回連続攻撃
    repeat 5
        mes "主人公は70のダメージ!"
        HP = HP – 70

         ;HPをマイナスにしない
        if(HP < 0){
            HP = 0
        }

        mes "現在のHPは" + HP + "です\n"

        ;生死の判定
        if(HP >= 1){
            mes "まだ生きている\n"
        }else{
            mes "もう死んでいる\n"
            break
        }
    loop

これは、前のページで作ったプログラムです。

このプログラムは、毎回ダメージが70で固定なので面白くないですね。

ダメージ量をランダムな値にしてみましょう。

まず、ダメージ量が変化するので「変数」にしなければなりませんね。

ひとまず、次のように修正しましょう。

            :
            :
   ;5回連続攻撃
    repeat 5
       damage = 70
       mes "主人公は" + damage + "のダメージ!"
       HP = HP – damage
            :
            :    

05_01

ここまでは大丈夫でしょうか?

70という数値(定数)をそのまま使うのではなく、
damageという名前の箱(変数)に入れてから使っただけで
実行結果は変わりません。

 

さぁ、いよいよダメージをランダムにしてみましょう。

次のように修正します。

           :
           :
    ;5回連続攻撃
    repeat 5
       damage = rnd(100)
       mes "主人公は" + damage + "のダメージ!"
       HP = HP – damage 
           :
           :

rndは、ランダムの略で「乱数(適当な数値)を作りなさい」という関数です。

関数とは何か?については下で説明しますが、
上のように書けば、変数damageには0~99のどれかの値が入ります。

仮に、damage = rnd(50) と書けば、damageは0~49のどれかになります。

最大値は、『( )の中に書いた値-1』になるので注意してください。

これで、主人公は毎ターン違うダメージを受けるようになったでしょう。
実行して確認してください。

 

関数

さて、関数とはなんでしょうか。

関数命令に似ています。

「何かをさせる記述」という面では、関数も命令も同じです。

逆に、どこが違うかというと、次の2点です。

まずは、見た目の違い。

今まで学んだ命令は、命令の後ろにパラメーターをそのまま書いていましたが、
上のrnd関数を見てわかるとおり、関数はパラメータを( )で囲みます。

これによって、命令なのか、関数なのかを判断できるでしょう。

もう一つの違いは、関数とは「それ自体が何らかの値になる」というところです。

上の例では、rnd(100)という関数を変数damageに代入してますね。

「rnd(100)」という記述そのものが0~99のいずれかの値になるわけです。

05_02

HSPで使える関数はrndの他にもたくさんあります。

それらは追々紹介していきます。

 

乱数の制御

さて、話を乱数(ランダム)に戻します。

上で説明したように修正すれば、ダメージを0~99のいずれかにすることができます。

しかし、ちょっとバラつきが激しすぎますね・・・。

そこで、ダメージを80~99のいずれかの値になるようにしましょう。

残念ながら、rnd関数は0から指定した値までの乱数しか作れません。

そこで、次のように書きます。

          :
          :
    repeat 5
       damage = rnd(20)
       damage = damage + 80
       mes "主人公は" + damage + "のダメージ!"  
          :
          :     

まずは、rnd(20)を代入します。

これで、damageは0~19のいずれかになります。

それに80を足せば・・・・80~99になりますよね。

ただし、このように2行書くのは面倒です。

上で説明したとおり、関数はそれ自体が数値と同じものとして扱うことができます。

つまり・・・・

                
    repeat 5
       damage = rnd(20) + 80
       mes "主人公は" + damage + "のダメージ!"
               

こう書くことができます。

たとえば、サイコロのように1~6の乱数を求めたいときは、
rnd(6)+1と書きます。

サイコロの目は6パターンあるので( )の中は6、
最小値が1なので、1を足すことになります。

 

今回のポイント

  • 変数に乱数(ランダムな値)を代入したい場合は
    変数名=rnd(パターン数) + 最小値
    と書く。 
  • 関数は・・・
    ○パラメータを( )で囲む
    ○それ自体が値(数値)と同じ扱い

 

Pocket


コメントを残す

メールアドレスが公開されることはありません。

 ■ツール・ゲーム  ■講座  ■素材  ■その他  ■管理人へ
  Prominece3D   エフェクト画像の描き方   戦闘エフェクト素材   CG作品   お問い合わせ
  ウディタミネンス   ロゴの描き方   投稿エフェクト   書籍   管理人を応援
  Relocater   HSP講座      
  Prominece        

Copyright © 2011-2015 藤宮翔流 All Rights Reserved.