pほげほげ(単数系列)の練習概要この節では、前節の練習となります。 環境設定で練習する単数系列の「pほげほげ」はとても使い方が簡単です。 中でも「環境設定」が視覚的にも一番わかりやすいので、ここから入ってみましょう。 単数系の一般的な記述は、 // 値の取得; int iValue = p〇〇情報.フィールド名; // 値の設定; p〇〇情報.フィールド名 = 4; のような形となります。 それでは、実際に書いて確認してみましょう。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { // ------------------値の取得 int iBGM = p環境設定情報.音楽; デバッグ出力 << "音楽:" << iBGM << endl; // デバッグ出力で(byte型)か(int型)かわからない数値型のものは(int)と付ける癖を付けること。 デバッグ出力 << "表示速度:" << p環境設定情報.表示速度 << endl; デバッグ出力 << "表示速度:" << (int)p環境設定情報.表示速度 << endl; // ------------------値の設定 p環境設定情報.ムービー = ムービー::OFF; p環境設定情報.表示速度 = 表示速度::∞; p環境設定拡張情報.情報表示 = 情報表示::最小; } 「ムービー::OFF」「表示速度::∞」「情報表示::最小」といったものは、 こういった「値を直接指定すると意味がわかりません」といった類のものは ソースが格段に理解しやすくなります。 天翔記の機能の設定画面で期待通りになっていることを確認してみましょう。 動作確認しかし、一方でModDebuggerに期待通りの表示がされましたか? いいえ、期待通りにならない箇所が1ヵ所あります。 デバッグ出力 << "表示速度:" << p環境設定情報.表示速度 << endl; と(int)を付けなかった所はModDebuggerで妙な表示 となりました。
なぜ妙な表示になったのでしょうか。 Visual Studio の該当のソース中の「p環境設定情報.表示速度」のうちの「表示速度」あたりにマウスを移動させてみると、
数値のbyteをModDebuggerに表示の際には、(int)でキャスト「byte 環境設定情報型::表示速度」と書いてありますね? この「byte」が原因です。 実はこのbyte型というのは、C/C++の出力用関数にとって ですから、デフォルトのままだと、C/C++は あぁ、これ半角の1文字情報ですよね。任せてください。文字で出力します。 として「文字」を出してしまうのです。 それを、 あ、これ文字じゃないから、数値だから と人間側が意思を伝えるために(int)を付けます。 これは、C/C++の標準出力のstd::coutとデバッグ出力の仕様を一致させたためなのであり、 季節を書き換えてみるでは、次のようにするとどうなるでしょうか? void カスタム::On_プレイヤ担当ターン《メイン画面》() { // ------------------値の設定 p年情報.季節 = 季節::秋; } 動作確認①画面は秋になりましたか? なりません。 なぜ、ならないのでしょうか。 実は、天翔記的にはちゃんと「秋」になっています。 その理由は考えてみれば簡単です。 季節が変わった時、
は、「春」に切り替わったばかりのタイミングで、画面上で春と表示されました。
の画面の描画は、 だから「季節の情報の値だけを」書き換えても「画面上の表示」は更新されないのです。 動作確認②では、内部的に秋になっているのか確認のため、季節を進めてみましょう。 いきなり「冬」になりましたね? このように内部的には値を書き換えることが出来ても、画面の表示とは食い違うものは多くあります。 天翔記の元年は1454年では、別の例をみてみましょう。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { // ------------------値の取得 int year = p年情報.年; デバッグ出力 << (int)year << endl; } 動作確認ModDebugger上にちゃんと年はでましたか? 確かに「何か数値」はでましたが、おそらく期待していた値とは異なるはずです。 年情報.h をよく見ると、 「年」というのは、1454年(天翔記基準年)からの経過数 と書いてあり、我々が想像する「西暦」とは異なる 数値なのです。 西暦の取得そこで、西暦を得るには Get_西暦()を使ってね、といった趣旨のことが記載されています。 void カスタム::On_プレイヤ担当ターン《メイン画面》() { // ------------------値の取得 int year = Get_西暦(); デバッグ出力 << (int)year << endl; } 今度はModDebugger上の値が、期待した値となるはずです。 このように「pほげほげ」のそのままのフィールド値が扱いにくいものの場合、 以上が単数系列の扱い方となります。 リファレンスを参照のことなお、それぞれの単数系列の具体的な使い方や特徴、 |