◎サイコロ戦闘ミニゲーム◎ 2007.1.17更新


公式掲示板でミニゲームについて質問されていた方がいらしたので、LiveMaker更新記念としまして作ってみました。
解説は概略のみになってしまいますが、参考にでもなれば幸いです。

このプロジェクト・ファイルは「通常版ver.01.05.06.09」で動作確認しています(開発版でも動くはずです)。
プロジェクト・ファイルはご自由にお使いくださってかまいません。
他のプロジェクトと組みやすいように、メイン部分は<チャート呼び出し>になっていますので、インポートしてお使いください。


 LiveMaker用プロジェクト・ファイル  サイコロ戦闘ミニゲーム(zip圧縮) 0.98MB


◎実行画面
実行画面


同じキャラクターの色違いというだけですが、いちおう左がプレイヤー、右が敵という設定です。
プレイヤーと敵のサイコロを振り、目を比べて大きいほうが勝ち。
お互いのライフは10で、サイコロ目の差だけダメージを受けます。
サイコロはランダムに目を変えますので、画面上で左クリックしてサイコロを止めてください。

◎解説
○チャート・リスト
チャートリスト

今回はミニゲームということなので、メイン部分はすべて1チャートに納めました。
「新規チャート」となっているのが全体の流れを作るチャートだと思ってください。
そのなかで、ミニゲームを使いたいときだけ<チャート呼び出し>で「サイコロ戦闘メイン・チャート」を呼び出してください。

○変数表
変数表

ぱっと見てわかりづらいのは「勝敗結果」と「仮サイコロ」だと思います。
「勝敗結果」は、戦闘が終わった後、どちらが勝ったかを記憶する変数です。
「1」がプレイヤー、「2」が敵を表します。
ミニゲーム後に勝敗結果が必要なとき使ってください。
「仮サイコロ」は、乱数で得たサイコロ目が、続けて同じ数が出ないように判定するために作ったものです。
新たに乱数が代入されるまえに、この「仮サイコロ」に一時保存しておきます。
「ファイル名」は、サイコロやライフメーターの画像を変数で指定するために使っています。
変数を使うと、[画像表示/変更]をいくつも書かないですむので楽になります。
詳細は他のLiveMakerコーナーを見てください。

○新規チャート
チャート-新規チャート

重要なのは、他のプロジェクトと合体させるときの、<初期背景作成>と<サイコロ戦闘>の使い方です。
<初期背景作成>は、プロジェクトの始めのほうにそのままコピーしておいてください。
もちろん個人で戦闘チャートをいじったときは、修正が必要になります。
このシナリオ・ノードは、全チャート中、一度だけ実行させてください。
<初期背景作成>の中には、戦闘で使う画像の初期配置がされています。
ライフメーターやキャラクターの表示位置などです。
わたしは基本的に[画像表示]は、一つの「名前」につき一度しか登録しません。
その「名前」の画像を使わないときは常に透明画像を表示させ、[画像消去]はいっさい使っていないのです。
今回もそれに準じて、まず透明画像で「名前」と「座標」と「プライオリティ」をセットしています。
そして<サイコロ戦闘>を呼び出したあとは、必要に応じて画像を変えたり透明に戻したりしています。

○サイコロ戦闘メインチャート
チャート-サイコロ戦闘メイン

このチャートがサイコロ戦闘を行う部分です。
全体は3つのブロックに分かれておりまして、黄色で囲まれた部分がプレイヤーのサイコロを決めるところ、緑が敵のサイコロを決めるところ、紫がサイコロの目を比較して結果を見せるところです。

・黄色&緑での処理内容
サイコロの目を乱数で発生させて、数値にあった画像を変数「ファイル名」にいれて[画像変更]で表示させる。
そこでマウスの左クリックがされたら、その数値を保管しておく――というのが黄色と緑の概要です。
ここで問題となったのが、サイコロの目を乱数で高速に動かす、という点でした。
結果的にシステム変数「@LPush(「左ボタンがおされているときTRUEを返す)」というものを使わざるを得ませんでした。
当初、制限時間を設けた<画像選択>で何とかなるだろうと思っていたのですが、これが遅いうえにクリックへの反応が悪く、使い物にならなかったのです。
制限時間を長くすればクリックの反応はあがりますが、そのぶんランダムに高速に表示するという肝が潰されてしまいます。
ならば「Pure☆Colors神経衰弱」のときに使っていた「@LClick」はどうかと試したところ、<画像選択>よりも高速にはなったものの、ボタンチェックが厳しく、やはり使えませんでした。
結果、「@LPush」をつかうことになりました。
これでも高速というには少々ムリがありますが、これ以上はLiveMakerではキツイと思います。
このボタンが押されているかどうかの判定は、計算ノード<左ボタンが押された?>で行われています。

流れ的には、乱数を作る→数値にあったファイル名を作る→そのファイル名の画像を表示する→左ボタンがおされていたら数値を確保して次の処理へ、押されていなければまた乱数を作る……と、とても単純な行動を繰り返しているだけです。

話が前後してしまいますが、計算ノード<サイコロ乱数発生>では、続けて同じ乱数が出ないようになっています。
先ほど説明した変数「仮サイコロ」を使って見比べています。
<サイコロ乱数発生>から伸びるジャンプ先を示す矢印の一つが、自分にかかっているのはその判定のためです。

改良点として、シナリオノード<サイコロ表示>のなかの[ウェイト]の数値を変えると、表示時間が変わります。
ただしあまり小さな数値をいれると、ボタンの受付が厳しくなりますので注意してください。
また、マウスのボタンは一回ポチッと押すのではなく、目当ての数値がでたら多少押しっぱなしにしてください。


※黄色枠内「プレイヤーターン」でのサイコロ表示について!  -------------------------
HPにこのコーナーをアップ後、LiveMakerの管理者様から、画像を高速に表示するやり方を教わりました。
公式HP内にもありますので一読されておくといいでしょう。
具体的にはシナリオノードで画像表示するのではなく、計算ノードで直接画像処理をするというやり方です。
今回は<ファイル名作成>内でその作業をしています。
「Setprpo」関数で、画像の名前とファイル名をしているのがわかると思います。
エネミー側のサイコロ表示との速度を見比べて見てください。
------------------------------------------------------------


・紫の処理内容
サイコロの目が出揃ったら、どちらが大きいかを比べます。
引き分けのときはまたサイコロを決定する処理に返ります。
ここではプレイヤーが勝ったとします。
まず計算ノード内でダメージを算出して、ライフからダメージを引きます。
このとき、ライフが-1とか-2など、0より小さいときは0に直しておきます。
これをしないと、マイナス分の画像を作っていないのでエラーになるからです。
あとはダメージの大きさに合わせた画面効果を行うだけです。
今回は、ダメージ分だけキャラクターがゆれるように設定しました。
その後、ライフが0以下のときは戦闘終了へ進み、1以上あれば戦闘継続となります。


全体の流れとしてみるとそれほど複雑ではないと思いますが、システム変数や関数を使うようになると難易度が上がってしまいます。
ですが使えるようにならないと複雑なゲームを作るのは難しいと思いますので、挑戦するかたはヘルプなどを参考にがんばってください。
また、今回のプロジェクトでわかりづらい点などがあればお気軽にメールをください。
時間がとれしだいお答えしたいと思います。




    ホームへ戻る