変数

Last-modified: 2012-03-13 (火) 15:03:23 (2827d)

 変数とは、不確定要素を擬似的・暫定的に記号・抽象化したもの。不確定要素が計算出来るようになる。対語は定数、類語は不定元・未知数など。

 目次

 変数ってなんぞ?

 学校教育における変数

  • 計算問題の答えだと思って下さい。
    • 算数では空白部分
    • 数学ではx,yやa,bなど
    • 数式にした場合、左から右に流れます (X+Y=Z)

 一般社会における変数

  • 電子分野ではなくてはならないものです。

 ウディタにおける変数

  • ウディタではイベントを組むには避けては通れないモノです。
  • 二つの使い方があります。
    数字の大きさを変えられること
    数字を読み取ってイベント分岐させられること
  • 例えば
    ダメージを受けたらHPが減る、HPが0だったら倒れる
  • HPやExp、恋愛ゲームの好感度といったパラメータは勿論、装備している武器なんかもIDで管理された変数です。
  • ゲームを開始してから経過した時間や、主人公がマップのどの辺りにいるかも変数として記録されています。
    • 数式にした場合、右から左に流れます (Z=X+Y)
  • 気づいてなかっただけで、実はゲームというのは変数のかたまりです。
  • 聞きなれない言葉かも知れませんが、難しく考えずにステップアップしてください。

 各変数の意味

セルフ変数:そのイベント固有の変数
  • コマンド中はselfで表示されます。
  • (コモン)イベントセルフ変数と(コモン)イベントセルフ変数の一番大きな違いは、直接そのイベントの起動条件に使えるかどうかです。
  • コモンイベントセルフの5〜9は文字列に対応
通常変数:ゲーム全体に影響を与えることができる変数
  • コマンド中はvariableの頭文字のVで表示されます。
文字変数:ゲーム全体に影響を与えることができる文字列
  • コマンド中はscriptstringの頭文字のSで表示されます。
システム変数:ゲームのシステムとして役割が決まっている変数
  • システム変数はSys、システム文字列はSysSで表示されます。

 書き込み可能の変数

  • 可変データベース(cdb)
  • システムデータベース(sdb)
    • 4:文字変数名(S)
    • 5:システム文字列(SysS)
      • SysS10[主人公 キャラ画像名]
      • SysS11[仲間1 キャラ画像名]
      • SysS12[仲間2 キャラ画像名]
      • SysS13[仲間3 キャラ画像名]
      • SysS14[仲間4 キャラ画像名]
      • SysS15[仲間5 キャラ画像名]
      • SysS20[Proxy アドレス[例:aa.net]]
      • SysS21[Proxy ポート番号[例:80]]
      • SysS26[文章表示追加 先頭]
      • SysS27[文章表示追加 最後尾]
      • SysS30[遠景の画像ファイル名]
      • SysS31[フォグの画像ファイル名] ※20・21はまだ正式に対応してない。
    • 6:システム変数名(Sys)
      • Sys0:顔グラフィック番号
      • Sys1:メッセージウィンドウX座標
      • Sys2:メッセージウィンドウY座標
      • Sys3:選択肢ウィンドウX座標
      • Sys4:選択肢ウィンドウY座標
      • Sys5:ポーズカーソルX(-1=自動)
      • Sys6:ポーズカーソルY(-1=自動)
      • Sys7:選択肢次回初期位置(0,1,2...)
      • Sys8:基本フォントサイズ
      • Sys9:メッセージ速度(X文字/秒)
      • Sys10:メッセージ表示ウェイト(Xフレーム)
      • Sys11:ピクチャ文字速度(X文字/秒)
      • Sys14:選択肢ウィンドウ表示する?(1=ON)
      • Sys15:方向キーリピート初ウェイト(フレーム数指定)※[キーが押されるまで待つ]に適用
      • Sys16:方向キーリピート次ウェイト(フレーム数指定)※[キーが押されるまで待つ]に適用
      • Sys17:選択肢SE番号:決定(Sys3)
      • Sys18:選択肢SE番号:選択(Sys3)
      • Sys19:選択肢SE番号:キャンセル(Sys3)
      • Sys20:選択肢カーソル現位置(0,1,2..非選択時:-1)
      • Sys21:文字影付ける?(0=OFF,1以上=ON)
      • Sys22:選択肢カーソル表示モード?(0=通常,1=加算)
      • Sys25:現在セーブデータ番号(0〜)
      • Sys33:フレームスキップレベル(0〜2)
      • Sys36:主人公の影番号(Sys9)
      • Sys37:仲間の車間距離(1あたり0.5マス)
      • Sys40:キーボ入力文字列X座標
      • Sys41:キーボ入力文字列Y座標
      • Sys52:決定キー(キーボード)
      • Sys53:キャンセルキー(キーボード)
      • Sys54:サブキー(キーボード)
      • Sys55:決定キー(パッド)
      • Sys56:キャンセルキー(パッド)
      • Sys57:サブキー(パッド)
      • Sys59:決定キーリピートする?(1=ON)※[キーが押されるまで待つ]に適用
      • Sys60:キャンセルキーリピートする?(1=ON)※[キーが押されるまで待つ]に適用
      • Sys61:フォグ番号(Sys13)
      • Sys62:フォグX速度
      • Sys63:フォグY速度
      • Sys64:フォグ描画タイプ(0通常1加算2減算)
      • Sys65:フォグ不透明度(0〜255)
      • Sys66:遠景番号(Sys13)
      • Sys67:遠景X速度
      • Sys68:遠景Y速度
      • Sys71:マウスX位置
      • Sys72:マウスY位置
      • Sys73:文・選択肢のマウス入力(1なら受付)
      • Sys74:マウスポインタ表示する?(1=ON)
      • Sys87:仲間1影番号(-1=主人公と同じ)
      • Sys88:仲間2影番号(-1=主人公と同じ)
      • Sys89:仲間3影番号(-1=主人公と同じ)
      • Sys90:仲間4影番号(-1=主人公と同じ)
      • Sys91:仲間5影番号(-1=主人公と同じ)
      • Sys95:再生中BGM音量[%]
      • Sys96:再生中BGMテンポ/周波数[%]
      • Sys97:再生中BGS音量[%]
      • Sys98:再生中BGSテンポ/周波数[%]
      • Sys100:BGM音量補正[%]
      • Sys101:BGS音量補正[%]
      • Sys102:SE音量補正[%]
      • Sys104:Xスクロール値
      • Sys105:Yスクロール値
      • Sys110:現在の乱数のシード(種)
      • ※104と105はマップに対応
    • 14〜24:通常変数、予備変数(V)
  • 各セルフ変数(Self)

 読み取り専用の変数

  • ユーザーデータベース(udb)
  • システムデータベース(sdb)
    • 0:マップ設定
    • 1:BGMリスト
    • 2:BGSリスト
    • 3:SEリスト
    • 5:システム文字列(SysS)
      • SysS1[決定キー名[キーボード]]
      • SysS2[キャンセルキー名[キーボード]]
      • SysS3[サブキー名[キーボード]]
      • SysS4[決定キー名[パッド]]
      • SysS5[キャンセルキー名[パッド]]
      • SysS6[サブキー名[パッド]]
      • SysS25[[読]文章表示の内容]
      • SysS33[[読]再生中BGMファイル名]
      • SysS34[[読]再生中BGSファイル名]
      • SysS40[[読]選択肢1の内容]
      • SysS41[[読]選択肢2の内容]
      • SysS42[[読]選択肢3の内容]
      • SysS43[[読]選択肢4の内容]
      • SysS44[[読]選択肢5の内容]
      • SysS45[[読]選択肢6の内容]
      • SysS46[[読]選択肢7の内容]
      • SysS47[[読]選択肢8の内容]
      • SysS48[[読]選択肢9の内容]
      • SysS49[[読]選択肢10の内容]
    • 6:システム変数名(Sys)
      • Sys12:メッセージ表示中?(1=ON)
      • Sys13:イベント実行中?(1=ON)
      • Sys24:[読]セーブデータ読込判定(1=成功 0=失敗)
      • Sys28:[読]経過フレーム数[1000万で一周]
      • Sys29:[読]プレイ時間(1秒単位)
      • Sys30:[読]プレイ時間(ミリ秒単位)
      • Sys31:[読]内部FPS(毎秒変化)
      • Sys32:[読]描画FPS(毎秒変化)
      • Sys35:主人公移動中?(1=YES) マスの間にいるかどうか
      • Sys39:[読]キーボ入力状態 0=Enter -1=キャンセル
      • Sys42:キーボ入力時文字アンチエイリアス 1=有
      • Sys43:[読]ネット/DL済サイズ(byte)
      • Sys44:[読]ネット/DL予定サイズ(byte)
      • Sys45:[読]ネット/接続速度
      • Sys46:[読]ネット/接続時間(秒)
      • Sys47:[読]ネット/残り時間(秒)
      • Sys48:[読]ネット/状態 -1失敗 0通信中 1終了
      • Sys77:現在の[年]
      • Sys78:現在の[月]
      • Sys79:現在の[日]
      • Sys80:現在の[時]
      • Sys81:現在の[分]
      • Sys82:現在の[秒]
      • Sys84:画面サイズ(0=320x240,1=640x480 2=800x600)
      • Sys85:描画モード(0=3Dモード,1=ソフトウェア)
      • Sys108:[読]現フレームのコマンド処理数
      • Sys111:[読]画面アクティブ状態(1=アクティブ)
    • 7:位置設定リスト
    • 8:キャラクター画像
    • 9:キャラ影グラフィック名
    • 10:ウィンドウ画像
    • 11:トラジションタイプ
    • 12:文字色
    • 13:遠景画像
    • 24:顔グラフィック名

 変数に名前をつける

  • 新版ウディタ講座で説明されているのでそちらを参考にして下さい。

 使い道

 手順

  • 主にソフトウェア開発工程のウォーターフォール型に沿って説明します。
  • 開発工程に関する詳しい事は、ソフトウェア開発工程 - Wikipediaを参照して下さい。

 1、イメージのアイディア化

  • 需要・要求の分析や指針・問題を提起する段階です。
  • 供給・達成が不可能と判断した場合、二通りになります。
    • A、根本的に諦める、無期凍結。(挫折)
      • お疲れさまでした。
    • B、一時的に諦める、一時凍結。(保留)
      • 以後は再開する事を想定して長期的に準備し、その件に関するミーティングは定期的にやりません。
    • 個人の場合は大して違いはありませんが、共同の場合はいずれ再開するしないに関わります。
    • 長期的な下準備の負担が、通常営業や日常生活に支障をきたす様ならA無期凍結をお勧めしますが、ここを読む人は大抵個人なので無理なく気長に少しづつ準備することをお勧めします。

 2、アイディアのアルゴリズム(プロット)化

  • 仕様書の段階です。
     どういう入力・内容を (X,Y)
     どういう演算・過程で (+,-,×,/,if)
     どういう出力・結果にする (Z=)
  • を文書・数式化します。
  • 入力・内容はプレイヤー側のキー操作に限らず、システム変数などで得られる内容も使用出来ます。
  • 演算・過程は変数操作などの数式的な形式に限らず、各イベントコマンドやイベント等を通して処理されます。
  • 出力・結果に直接指定出来ない変数が『読み込み専用』とするシステム変数やユーザデータベース等です。

 3、アルゴリズムのフローチャート(UML)化

  • 設計図・アーキテクチャーの段階です。
  • ウディタに適したUMLは検討中です。
    例えばサンプルゲームの流れをマップ化した場合以下の通りになります。
    ScreenShot_outline.png
  1. ゴブリンと戦ってLvを10以上にする。
  2. エディを仲間にする。
  3. コックからパンを買う。
  4. 夕一を仲間にして、後ろの宝箱から鍵を手に入れる。
  5. ダンジョンのドラゴンを倒して、ウディタを手に入れる。

 4、フローチャートのコマンド(ソース)化

  • コード・実装の段階です。
  • ここからようやく開発ツールや言語(ウディタ)の出番で、つまり1〜3の作業は紙媒体(チラシの裏)でも十分できるということです。
  • 小まめなテストプレイは欠かせません。

 5,

  • 全体を通した評価・トライアルの段階です。
  • 主に通常変数やデータベースに関わるイベントのデバッグになるでしょう。
  • 私見ですが15回分の周回をすることをお勧めします。
    • 一人なら15回、三人ならそれぞれ5回ずつといった具合です。
    • 一人でやると自画自賛してしまう傾向が強いため、15回以上周回出来ないようなら面白くないと思って下さい。
    • 一つのバグが見つかったら周回を+2回するとより確実に完成度が高くなります。
  • オープンソースという暗号化されてないゲームや配布コモンの場合、見れるのがこの以降の状態だと思って下さい。

 6、文書化及び以降の工程

  • 以降のことは直接開発ツール(ウディタ)や変数に関係しないことなので、頭の片隅にでも置いといて下さい。
  • 文書化
  • ソフトウェアドキュメンテーション - Wikipediaを参照して下さい。
  • ちなみにエンドユーザー向け文書に関してはReadme の書き方で述べてます。
  • プレイヤーの育成
  • システムの保守
    • ウディタ本体が更新した場合、一番影響を受けるのがシステムですので、愛着のある自作システムなら大事にしましょう。

 種類

  • ツクールや基本システムを使用した場合、システムはほとんどいじる必要はありませんが、仕様がどういうものか理解する必要があります。
  • シナリオやキャラクターは自分で作る必要があるというわけです。

 システム

  • 文章表示や選択肢などの基礎的なシステムはウディタ本体に標準装備されています。
  • 戦闘やメニュー等は基本システムとしてフルパッケージに用意されてます。
  • 配布コモンには基本システム改造用コモンや独立した大規模コモン、汎用なテストプレイコモン等があります。

 シナリオ

  • マップイベントとコモンイベントの両方から通常変数で管理する事になります。
  • フラグという概念が一般的です。

 キャラクター

  • NPCはマップイベントで管理することになります。
  • AI戦闘はコモンイベントのシステムとして管理することになります。

 FAQ

 変数を増やしたいのですが

「システムデータベース」 → 「14:通常変数名」 のデータ数を弄りましょう。
 変数操作下部の名前を付けるところでも増やせるようになりました。

「X番の変数呼び出し」の意味は?

 変数の中に入ってる数値と同じ番号にある変数の内容を使う機能です。
  • 例えば変数Bに「2000005」(変数番号5番を指定する値)が入っており、「変数A」に「変数B」の値を入れようとした場合、
     チェックが入ってない場合は「変数A」は、単純に変数Bの内容が入り「2000005」になりますが、
     チェックが入っている場合の「変数A」は 「変数番号5番」の内容が入ります。
  • また、どうやら変数Bの内容は「5」等の普通の整数でも同じ事が出来るようです。(わざわざ変数と指定するために2000000を足さなくて勝手に補ってくれる)
  • 変数でなくただの数値に対してもこの機能は使えるようで、「変数A」=「5」 とした場合
     チェックが入ってない場合は「変数A」に 単純に「5」が入りますが
     チェックが入っていた場合は「変数A」に「変数番号5番」の内容が入ります。
  • ですが、この場合は変数リストから直接選べば事足りるので、意味なしテクだったりします。
    DB操作で読み込む変数を指定する際にこれをやろうとするとエラーになります。

平方根の計算をしたい

 平方根の近似値を求めるコモンが投稿されています。 
  • 素材投稿スレッド136(権兵衛さん作.common,,素材投稿スレッドNo136/権兵衛さん作

ビット積の使い道ってどんなのがありますか?

 ビット積は、偶奇の判断やフラグ管理等に使えるかと。
  • どちらもビット積を使わなくても出来ますが、イベント内容が見易くなると思います。
    • 例えば、a,b,cという各フラグは、成立した時、フラグ管理用変数xにそれぞれ10進数で1,2,4を加算しているとします。 この時、a,b,cの全てのフラグが成立している場合に実行される処理を作成する場合、xと2進数の111との間でビット積をとり、結果が2進数で111であれば、処理は実行されます。

 乱数、ランダムの作り方

  • いくつか方法があります。
    1.変数操作で、 左辺=右辺A〜右辺B とする。
    2.変数呼び出し値の、 8000000+X を利用する。(0〜Xまでの範囲がランダムで返る)
    3.システム変数30と変数操作の%を組み合わせる。(例えば100で割った余りを求めた場合、0〜99の範囲が返る)
  • 乱数でアイテムを入手できるイベントを作成したのですがデータをロードして始めると、毎回同じアイテムを同じ順番で入手します。
    1番2番目のようなウディタの乱数は、いわゆる擬似乱数と呼ばれるもので、そういう状況に陥るのだと思います。
    3番目のような方法を試すか、キー入力監視などの並列(常時)内部にセルフ変数=0〜0のような乱数を噛ませる事で回避できます。

 検索語

  • 変数
  • 文字列
  • 代入
  • 演算
  • 入力
  • 出力
  • 呼び出し

 関連項目

 外部リンク

このページに関するコメント

このページに関するコメントがございましたらこちらへどうぞ。

【注意!】
疑問・質問・相談・要望などへの回答は期待しないでください。
また、コメントへの回答・指摘される方は冷静に余裕を持ってお願いします。