変数トップへ手順1|手順2|手順3
変数(手順−2)

まずは、「変数完成.wfm」を起動下さい。矢印のクリックで、思ってた通り動きましたか?

オリジナルと異なるところは、中央に並んだ「1〜8」までの数字が、上段の量により変化します。
すべての数字をクリアできれば完成です

それと、イベントの「マウスインアウト」も付けてみました

これは、矢印にマウスが乗ると色を「青→赤」そして、離れると「赤→青」へ戻します。

また、水の量も少しおしゃれに「ピクチャー」を使用してみました。

※それでは、いまからこのフォーム作成ですが、
左図は完成版です。ここでの説明は、途中版(ゲームができるまで)です

内容は、少し装飾が違うだけです


事前準備として・・・

先ほど作成したファイルを複写します(前のファイルは不要な方は、名前の変更だけお願い致します)
(新規作成後、前のファイルからの、複写(読み込み)で、作成する方法もありますが、普段の方法で作成してもいいです)

○ファイル複写の方法

 対象ファイル(今回の場合は、変数基本.wfmと変数基本.kev)を選択します。連続したファイルを選ぶときは、Shiftキーをを利用しながら、先頭と最後をクリックします。連続してない場合は、Ctrlを利用下さい

 次に、複写ボタン(右図赤枠)を利用します。
ファイルコピーのダイヤログがでますので、ファイル名を変更するをチェックします。それぞれ「変数途中.wfmと変数途中.kev」に、名前を変更します。

 拡張子の間違いや、「.」ピリオドの重複や削除のないよう気を付けてください

○ファイル名変更の方法

ファイル名の変更は、ファイルを選択後、スペースキーを押してください。訂正モードになりますので、そこで、変更ください
名前の変更は1個づつしか行えません。


フォーム処理
以降、「複写されたかた、名前変更されたかた」共通です

 注意:新しいフォーム「変数途中.wfm」は、まだ、イベントの名前が古いままです。そこで、定義で開き、フォームのオブジェクトから「イベントタブ」を選択後、イベントファイル名を「変数途中.kev」に変更してください。

また、作成していく工程で、ラベルをテキストに変更や、オブジェクトの重なり順の移動など出てきます。では、なぜ最初からテキストで作成したり、オブジェクトの重なり順を考慮した作成をしないのか?

それは、「なぜ、テキストでなくてはいけないか?また重なり順までなぜ気を使わなくてはいけないのか」を説明する為です。
お手数をかけますが、是非下記順序で、お試しください。

追加作成するオブジェクト

ここでの矢印はすべて「ラベル+直線」で作成します。

ラベル名。順番は、@→Iへ、「a中大1・a中大2・a大中1・a大中2・a小大1・a小大2・a大小1・a大小2・a小中・a中小」の10個です。
矢印(▲の直線)は、左図を参考に、「直線_01・直線_04・直線_05・直線_08・直線_09・直線_10」とします

容量の作成もラベルです。増減する部分はピクチャーです

ゲームの進行部分(1〜8までのボタン風の物)は、ラベルです
ラベル名は「aクリア1」〜「aクリア8」です。
標題(T)は、それぞれ、「1」〜「8」です

 ラベル・直線の説明。右図はわかりやすいように分解表示していますが、全て青色で作成しています。
緑の部分がラベルで、青▲の部分が直線で作成します

だいたいのレイアウトが終わったら、次へ進んでください。最後に全体のバランスをみながら
再度、位置修正を行ってください
(注:直線には、イベントの設定ができない為、操作は緑のラベルで行います)

ラベルは、イベントを使用します(前回のように、マウス左ダウンを設定してください。10個全部です)

 量の増減用は、ラベルでもいいのですが、少しおしゃれにピクチャーにしました
右図でもおわかりのように、グラデーションの方がなんとなくイメージできるかな?程度です。量の増減は、イベント中に、計算式で行います

 また外側の枠(ラベル)は、その一回り大きく作成します。この枠はゲームとは一切関係ありませんが、容量が0になったときはっきりわかるようにするためです。
それぞれの名前は、ピクチャー部分は「p大量・p中量・p小量」ラベル部分は「a大器・a中器・a小器」とします

ピクチャーは計算式で拡大・縮小行いますので、その容器の最大値で、作成して下さい。
「p大量・p中量・p小量」の、それぞれ作成するサイズは、
p大量:始点Y=30pt、高さ(H)=160pt・p中量:始点Y=230pt、高さ(H)=100pt・p小量:始点Y=255pt、高さ(H)=60ptです。
指定の無いところは任意ですが、画面のバランスにあわせて作成してください。また背景は、「グラデーション1」を使用しています。
色はお好みの色で、結構です。

注意:重なり順は、器ラベル「器」より、ピクチャーの方が全面になるように作成してください。
もちろん、あとで作成した方が上になりますので、説明順で作成された方は、ピクチャーが隠れてしまってますね。そのような場合は、オブジェクトリストを表示し、移動したいオブジェクトを選択後、「Shift+↑↓」を利用して、ピクチャーが表示されるように移動してください。


今回、オリジナルと違う部分がここです。
大器の残量が、矢印をクリックするたびに変わりますが、そのときの残量を、「1〜8」まで、出来た数の物だけオブジェクトを変更しています。
罫線を立体に設定します。(イベントで、クリアしたときに、くぼみに変更しています)

フォーム設定の補足
 さきほどせっかく作成した「b中大・b大中・b小大・b大小・b小中・b中小」はどうするの?・・・
 そうですね。もったいないから、ワークスペースへでも移動しておいてください。あとでお役にたちますから・・
と、いうわけで続けます。

あとひとつ、重要なことがあります。それは、ピクチャーの位置です。イベントのなかで量の増減によって、計算式で拡大・縮小をおこないますが、そのときの基点として利用します。イベントで取得もできますが、変数が増えますので、ここでは、固定利用で、作成します。


イベント処理
それでは、イベントの説明です。(先ほどの「変数途中.kev」を、利用します。)

変数の追加:

「名札 メイン」に下記行を追加してください。

  変数宣言 文字{&Ypt,&Hpt}

*  それぞれの残量によって、上記ピクチャーの拡大縮小を行います。そのための変数です

手続き追加

フォームのオブジェクト属性で、「フォーム開始」をクリック後、下記を作成します

手続き定義開始 フォーム::フォーム開始(長整数 &表番号)
  手続き実行 画面更新()
手続き定義終了

*起動時に、初期変数を利用して、画面を作成します。このときの「画面更新()」は、ゲームの最中のマウスクリックでもその都度呼び出されます。
作成するときの注意は、共通部分のみを作成します。(フォーム開始は、最初1回だけ実行されます)

イベントの修正

前回作成したイベントは、ボタン用で
>手続き定義開始 b中大::マウス左ダウン(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
> ・・・
> ・・・
> ・・・
>手続き定義終了
と、なってると思います。(6種類あります)が、今回は、ラベル用です

手続き定義開始 a中大1::マウス左ダウン(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
 ・・・
 ・・・
 ・・・
手続き定義終了
と、変更します。変更箇所は「b中大」→「a中大1」。このイベント名ののところだけです

注:ラベル名の後ろに「1・2」が付いているのがありますが、同じ動きをします。矢印が分割されてるだけなのであたりまえですね。
  その場合、「a中大1」を作成後、「a中大2」は複写で作成すれば簡単ですね。そのあと「1」を「2」に、変更します

  作成後は、6個のボタン用イベントが10個のラベル用に変更されています。確認ください。

イベントの新規追加

大きくわけて2つのプログラムに分かれます

手続き定義開始 画面更新()
  メソッド呼び出し @フォーム.変数変更()

*−[1]−−−−ピクチャー表示部分−−−−−−−−−−−

  *大図変更 Y= 30
  &Ypt=#文字列( 30+(&大器-&大量)*20)+"pt"
  &Hpt=#文字列(&大量*20)+"pt"
  オブジェクト操作 @p大量{始点Y=&Ypt,高さ=&Hpt}

  *中図変更 Y=230
  &Ypt=#文字列(230+(&中器-&中量)*20)+"pt"
  &Hpt=#文字列(&中量*20)+"pt"
  オブジェクト操作 @p中量{始点Y=&Ypt,高さ=&Hpt}

  *小図変更 Y=255
  &Ypt=#文字列(255+(&小器-&小量)*20)+"pt"
  &Hpt=#文字列(&小量*20)+"pt"
  オブジェクト操作 @p小量{始点Y=&Ypt,高さ=&Hpt}

ここでは、「大・中・小」の各量に応じて、ピクチャーを表示しています
  例は、大の量として、説明しています
・最初の行はたんなるメモです。フォームの「p大量」の、始点Yの値をメモしています
・&Ypt=・・・
 この行は、ピクチャーの始点Yを計算しています。計算式は、
  「初期位置+(器の最大量−現在量)×20+pt」です
  ×20・・容量が、8の時、最大160が表示されますので、1の時は20動くように計算しています
  (器最大時−現在量)・・これで、あと、どれだけ入るかがわかります。それによって、開始位置の計算を行います
  例:器の最大量-現在量が、「0」の場合、つまり満タン入ってるときは、計算結果は「0」になります。
  その答えに、フォームの初期値を加えて開始位置の計算を行います
・&Hpt=・・・
  開始位置がきまったら高さ(大きさ)を計算します。ここは単純に、容量×20です
・オブジェクト操作 @p大量{始点Y=&Ypt,高さ=&Hpt}
  容量と高さが決まったらオブジェクト操作を利用してピクチャーを変更します

この作業を、「大・中・小」の3個とも行います。
 ひとつひとつの操作が複雑で、時間がかかるような場合は、if文や条件等を利用して制御の必要がありますが、今回のように簡単な内容の場合は、3個とも変更(再計算)しても結構です


*−[2]−−−−ゲーム進行表示部分−−−−−−−−−−−

  if(&大量=1)
    オブジェクト操作 @aクリア1.境界線モード="くぼみ"
  else if(&大量=2)
    オブジェクト操作 @aクリア2.境界線モード="くぼみ"

  ・・・・・・・

  else if(&大量=8)
    オブジェクト操作 @aクリア8.境界線モード="くぼみ"
  end

ここでは、このプログラムを呼ばれるたびに、「&大量」を調べてオブジェクトの変更を行います。
> オブジェクト操作 @aクリア?.境界線モード="くぼみ"
 この処理は、「aクリア?」の罫線をくぼみに変更しています。フォーム作成時は立体になっています。そこで、「&大量」が、if文と同じになったとき、指定オブジェクトの罫線の属性をくぼみにしているわけですが、上記と同様、&大量が、同じ値になることもあります。上記でも紹介いたしましたが、こんな簡単なプログラムを何重ものif文にするよりイベントコマンドで作成してください

ちなみに、オブジェクトの属性は「オブジェクト操作 変数名 =@aクリア?.境界線モード」で取得できます。


  メソッド呼び出し @フォーム.描画更新()

最後に、
  >メソッド呼び出し @フォーム.描画更新()
  を、入れておきます。

手続き定義終了

イベント作成の補足

>手続き定義開始 a中大1::マウス左ダウン(長整数 &マウス位置[2],長整数 &明細番号,長整数 &フラグ,参照 長整数 &処理中止)
> ・・・
> ・・・
> ・・・
  手続き実行 画面更新()・・・・・この行を、全手続きの最後に追加してください。
>手続き定義終了

>手続き定義開始 a中大1::マウス左ダウン(・・・・・)
上記手続きでは、

各容器の現在量をしらべているだけです。そのため、最後に「手続き実行 画面更新()」を、追加しておきます

そこで、ピクチャーのサイズ変更やクリアボタンの操作を行っています。

手続きの最大の目的は、同じ処理を何度も書くのではなく、出来るだけ利用することで、効率よく作成することです。

ここまでのサンプルは、「変数途中」に入れてあります
top