FC2ブログ

ゲーム制作日記<51> ポイントカードシステム

op.png



みなさん、こんばんは。
ネコタです。



今回も恒例の『 コモンイベントで作るちょっとしたシステム 』 のご紹介です。

が、今回はぶっちゃけコモンイベントを使っていません(笑)

ただ、内容的にはコモン化して使ってもよさそうなので、ここでご紹介させていただきます。


さて、今回紹介させていただくシステムは、
『ポイントカードシステム』です。

今時、大体のお店はポイントカードやスタンプカードってありますよね。会員になって、ある程度買い物したら割引してくれる、みたいなサービス。

平たく言うと、アレっぽいものをショップに導入します。



それでは、実際の例を見てみましょう。

tc37-001.png

現在、新しいプロジェクトを立ち上げて制作しています。

長編物を作っていて思ったんですが、開発が大変すぎる(笑)

いつ完成できるか分からない事態になっています。

子供もまだ小さくて、肝心のプラグイン作成できる妻もプロジェクトを休止していますし。

ちょっと、今のところ目途が立たなくなってきたんですね。

そこで、短編物で少し色んなことを試してから、再度作っていこうと思いました。

べ、別にエターなったわけじゃないんだからね!


ということで。

画像の武器屋は、試験的に導入してみたポイントカードシステムを入れたショップです。

tc37-002.png

まずは、普通にお買い物してみましょう。

tc37-003.png

とりあえず、お金はいっぱいあるので全部1個ずつ購入しました。
持っている数は、プラグインの設定の関係でバグってます(笑)

このブログを書こうと画像を撮っていたら、気が付きました。
そのうち、直った画像が出てきます。

tc37-004.png

で、実例紹介を続けますね。
今回、武器屋の利用が初めてですので、初回イベントが働きました。

tc37-005.png

どうやら、何か貰えるようです。

tc37-006.png

予想できていたと思いますが、ポイントカードを貰いました。
これがないと始まりませんからね。

あとは、ポイントカードのシステムについて店員さんがつらつらと説明してくれます。

とりあえず、説明を載せておきますね。

tc37-007.png

tc37-008.png

tc37-009.png

tc37-010.png


はい。説明は以上です。

今回の例では、700G以上のお支払いで1P付与され、5Pたまったら700Gキャッシュバックというシステムとなっております。

ただし、アイテムを売るとその分が買い物金額から差し引かれてしまいます。お店の利益を考えたら当然かもしれません。

tc37-011.png

とりあえず、今回の買い物では1P付与されたみたいです。


tc37-012.png

これで、お買い物終了です。



今回の例では、ポイントがたまると一部の金額をキャッシュバックというシステムにしましたが、ちょっと頑張れば割引もできます。

システムが分かれば、付与されたポイント(変数)を条件分岐にできますので。分岐先で金額を再設定したショップを開くという方法があります。が、結構面倒です。なので、やりません(笑)


それでは、挙動を確認できましたので、準備するものを確認しましょう。


【準備】
変数 ×6


はい、これだけです(笑)
単に、変数の操作でポイントと金額を計算するだけですので。


【推奨】
コモンイベント(ショップの処理)


今回は、ショップの処理をコモンイベントで作っています。
実行内容は下のような感じ。


【実行内容】
条件分岐:【req】progress ≥ 8
ショップの処理:ショートソード
ショップの処理:ロングソード
ショップの処理:ファルシオン
ショップの処理:ミスリルソード
ショップの処理:ドラゴンブレード
ショップの処理:ウッドスタッフ
ショップの処理:マジックワンド
ショップの処理:フォースワンド
ショップの処理:ミスリルロッド
ショップの処理:ドラゴンスタッフ
ショップの処理:ショートスピア
ショップの処理:ロングスピア
ショップの処理:ハルバード
ショップの処理:ミスリルスピア
ショップの処理:ドラゴンスピア
ショップの処理:ストーンフレイル
ショップの処理:ブロンズフレイル
ショップの処理:モーニングスター
ショップの処理:ミスリルフレイル
ショップの処理:ドラゴンフレイル
ラベルジャンプ:終了

分岐終了
条件分岐:【req】progress ≥ 6
ショップの処理:ショートソード
ショップの処理:ロングソード
ショップの処理:ファルシオン
ショップの処理:ミスリルソード
ショップの処理:ウッドスタッフ
ショップの処理:マジックワンド
ショップの処理:フォースワンド
ショップの処理:ミスリルロッド
ショップの処理:ショートスピア
ショップの処理:ロングスピア
ショップの処理:ハルバード
ショップの処理:ミスリルスピア
ショップの処理:ストーンフレイル
ショップの処理:ブロンズフレイル
ショップの処理:モーニングスター
ショップの処理:ミスリルフレイル
ラベルジャンプ:終了

分岐終了
条件分岐:【req】progress ≥ 4
ショップの処理:ショートソード
ショップの処理:ロングソード
ショップの処理:ファルシオン
ショップの処理:ウッドスタッフ
ショップの処理:マジックワンド
ショップの処理:フォースワンド
ショップの処理:ショートスピア
ショップの処理:ロングスピア
ショップの処理:ハルバード
ショップの処理:ストーンフレイル
ショップの処理:ブロンズフレイル
ショップの処理:モーニングスター
ラベルジャンプ:終了

分岐終了
条件分岐:【req】progress ≥ 2
ショップの処理:ショートソード
ショップの処理:ロングソード
ショップの処理:ウッドスタッフ
ショップの処理:マジックワンド
ショップの処理:ショートスピア
ショップの処理:ロングスピア
ショップの処理:ストーンフレイル
ショップの処理:ブロンズフレイル
ラベルジャンプ:終了

分岐終了
ショップの処理:ショートソード
ショップの処理:ウッドスタッフ
ショップの処理:ショートスピア
ショップの処理:ストーンフレイル
ラベル:終了


条件の【req】progressですが、これは、ゲーム上でストーリーが進行した時に増える変数です。つまり、進行度ですね。

ゲーム制作における1つの方法ですが、私は、進行度用の変数を1個作っておくようにしています。

メインのストーリーの分岐や、今回のようにショップの処理を進行度によって分岐する、といった用途で使えるので、あると便利です。イベント管理をしやすくする工夫の1つです。



それでは、ショップの準備が整いましたので、実際のイベント内容を見てみましょう。


【実行内容】
変数の操作:#0057 【Shop】stamp_moment = 0
変数の操作:#0054 【Shop】Money_b = 所持金
スイッチの操作:#0022 【req】Map21-Ev4 = ON
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「いらっしゃいませ。
文章 どうぞ見ていってください。
コモンイベント:【Shop】武器屋
条件分岐:セルフスイッチ AがOFF
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「おや、武器屋のご利用は初めてですね。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「これを差し上げますので、よろしければご利
文章 用ください。
SEの演奏:Item3 (90, 100, 0)
文章:なし, ウィンドウ, 中
文章
文章\>       \c[21]武器屋ポイントカード\c[0]をもらった。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「お買い物の際、当店のポイントカードをご提
文章 示いただければ\c[21]700G\c[0]につき\c[29]1P\c[0]付与させ
文章 ていただきます。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「\c[29]5P\c[0]につき\c[21]700G\c[0]返金いたします。
文章 どうぞご利用ください。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「ただし、ポイントの付与は\c[27]売買した結果\c[0]の金
文章 額に対してお付けしております。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「品物をお売りいただいた場合、金額によって
文章 はポイントが付与されないことがあります。
文章 お気を付けください。
セルフスイッチの操作:A = ON

分岐終了
変数の操作:#0055 【Shop】Money_a = 所持金
変数の操作:#0054 【Shop】Money_b -= 【Shop】Money_a
ループ
条件分岐:【Shop】Money_b ≥ 700
変数の操作:#0057 【Shop】stamp_moment += 1
変数の操作:#0054 【Shop】Money_b -= 700

それ以外のとき
ループの中断

分岐終了

以上繰り返し
条件分岐:【Shop】stamp_moment ≥ 1
条件分岐:パーティが武器屋ポイントカードを持っている
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「いつもありがとうございます。
文章 今回は\c[29]\v[57]P\c[0]お付けいたしますね。

それ以外のとき
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「それでは、今回は\c[29]\v[57]P\c[0]お付けいたしますね。

分岐終了
変数の操作:#0058 【Shop】stamp_weapon += 【Shop】stamp_moment

分岐終了
条件分岐:【Shop】stamp_weapon ≥ 5
変数の操作:#0062 【Shop】momentNumber = 【Shop】stamp_weapon
変数の操作:#0058 【Shop】stamp_weapon /= 5
変数の操作:#0061 【Shop】momentGold = 700
変数の操作:#0061 【Shop】momentGold *= 【Shop】stamp_weapon
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「今回のお買い物で\c[29]\v[62]P\c[0]になりましたので、
文章 \c[21]\v[61]G\c[0]お返しいたしますね。
所持金の増減:+ {【Shop】momentGold}
SEの演奏:Coin (90, 100, 0)
文章:なし, ウィンドウ, 中
文章
文章\>           \c[21]\v[61]G\c[0]もらった。
変数の操作:#0062 【Shop】momentNumber %= 5
変数の操作:#0058 【Shop】stamp_weapon = 【Shop】momentNumber
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「残りのポイントは\c[29]\v[58]P\c[0]になりました。

分岐終了
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「ありがとうございました。
文章 また、いらしてください。
条件分岐:パーティが武器屋ポイントカードを持っている

それ以外のとき
アイテムの増減:武器屋ポイントカード + 1

分岐終了
スイッチの操作:#0022 【req】Map21-Ev4 = OFF



(ちなみに、スイッチの操作:#0022 【req】Map21-Ev4ですが、気にしなくていいです。このマップでは自立動作しているイベントがいるので、そいつの挙動をこのスイッチで制御させているために、入っています)


処理の詳細を解説する前に、まずは処理の内容をザックリ説明しますね。

・所持金を変数に代入します。
・お買い物します。
・所持金の差額を求めます。
・差額に応じて、スタンプの計算処理を行います。
・スタンプ数に応じて、返金額を計算します。
・返金処理を行います。


こんな流れとなります。



それでは、上から順番に解説していきましょう。

変数の操作:#0057 【Shop】stamp_moment = 0
変数の操作:#0054 【Shop】Money_b = 所持金


変数57はとりあえず初期化しておきます。
そして、変数54所持金を代入します。


文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「いらっしゃいませ。
文章 どうぞ見ていってください。
コモンイベント:【Shop】武器屋


ここで、適当な会話とショップの処理ですね。

条件分岐:セルフスイッチ AがOFF
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「おや、武器屋のご利用は初めてですね。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「これを差し上げますので、よろしければご利
文章 用ください。
SEの演奏:Item3 (90, 100, 0)
文章:なし, ウィンドウ, 中
文章
文章\>       \c[21]武器屋ポイントカード\c[0]をもらった。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「お買い物の際、当店のポイントカードをご提
文章 示いただければ\c[21]700G\c[0]につき\c[29]1P\c[0]付与させ
文章 ていただきます。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「\c[29]5P\c[0]につき\c[21]700G\c[0]返金いたします。
文章 どうぞご利用ください。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「ただし、ポイントの付与は\c[27]売買した結果\c[0]の金
文章 額に対してお付けしております。
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「品物をお売りいただいた場合、金額によって
文章 はポイントが付与されないことがあります。
文章 お気を付けください。
セルフスイッチの操作:A = ON

分岐終了


ショップの処理の後にあるこの会話は、ポイントカードを持っていないときの処理です。

初回説明の処理ですので、不要であれば省略して構いません。

変数の操作:#0055 【Shop】Money_a = 所持金
変数の操作:#0054 【Shop】Money_b -= 【Shop】Money_a
ループ
条件分岐:【Shop】Money_b ≥ 700
変数の操作:#0057 【Shop】stamp_moment += 1
変数の操作:#0054 【Shop】Money_b -= 700

それ以外のとき
ループの中断

分岐終了

以上繰り返し


お買い物が終わったら、その時点での所持金変数55に代入します。

そして、最初の変数54から変数55引き算することで、差を出します。

その後のループ処理ですが、何となく変数が分かりづらくなりそうだったので、あえて変数を分ける処理にしました。

結果的には、このちょっとした処理は必要なくて、単純に変数を700で割り算するだけで良かったんですけどね(笑)

一応、ここでは何をやっているかといいますと、差額から700を何回引いているかをカウントしています。
ここでは700Gにつき1P付くので、変数55(お買い物金額)が700(G)以上かを確認し、700(G)以上なら、ここから700(G)を差し引いて、変数57+1(1P付与)します。これをループ(700より小さくなるまで繰り返)させることで、何P付与されたかを計算しています。


条件分岐:【Shop】stamp_moment ≥ 1
条件分岐:パーティが武器屋ポイントカードを持っている
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「いつもありがとうございます。
文章 今回は\c[29]\v[57]P\c[0]お付けいたしますね。

それ以外のとき
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「それでは、今回は\c[29]\v[57]P\c[0]お付けいたしますね。

分岐終了
変数の操作:#0058 【Shop】stamp_weapon += 【Shop】stamp_moment

分岐終了


で、付与するP数が決まったので、付与できるポイントが1P以上ある場合に、ポイント付与されたことをアナウンスします。

そして、手持ちのポイントカード(変数58)にポイントを加算します。


条件分岐:【Shop】stamp_weapon ≥ 5
変数の操作:#0062 【Shop】momentNumber = 【Shop】stamp_weapon
変数の操作:#0058 【Shop】stamp_weapon /= 5
変数の操作:#0061 【Shop】momentGold = 700
変数の操作:#0061 【Shop】momentGold *= 【Shop】stamp_weapon
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「今回のお買い物で\c[29]\v[62]P\c[0]になりましたので、
文章 \c[21]\v[61]G\c[0]お返しいたしますね。
所持金の増減:+ {【Shop】momentGold}
SEの演奏:Coin (90, 100, 0)
文章:なし, ウィンドウ, 中
文章
文章\>           \c[21]\v[61]G\c[0]もらった。
変数の操作:#0062 【Shop】momentNumber %= 5
変数の操作:#0058 【Shop】stamp_weapon = 【Shop】momentNumber
文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「残りのポイントは\c[29]\v[58]P\c[0]になりました。

分岐終了


ポイントカードに今回のお買い物で得られたポイントが付与されましたので、最後にポイントを精算します。

今回のショップでは5P以上の時に精算されます。

始めに、変数58を一時的に変数62へ入れておきます。

この後の処理で変数58を計算するのですが、この値はその更に後(会話の中、返金後の処理)で必要となるため、一時的に別な場所にも保存しておきます。

返金額の計算方法ですが、5Pにつき1単位(700G)返金するため、まずは変数58を5で割り算します。

また、変数61は700に設定しておきます。これが、1単位あたりの金額(G)です。

これで、返金される単位数と金額が出ましたので、変数61変数58を掛け算します。返金額が計算できました。

それをプレイヤーに取得させて返金処理は完了。今度はポイントの精算に移ります。

ポイントは変数62に一時保管しておきましたので、これの剰余を出します(剰余とは、割り算した余りの事です)。

今回は5Pにつき1単位精算されているので、ポイント(変数62)を5で割ったときの余りが残ったポイントとなります。

それを、ポイントカード(変数58)に戻して、精算完了です。

プレイヤーには、残りのポイントをアナウンスしておくと親切でしょう。

文章:People1(2), ウィンドウ, 下
文章武器屋の男性
文章「ありがとうございました。
文章 また、いらしてください。


ショップ終了の会話を入れて、クローズします。


条件分岐:パーティが武器屋ポイントカードを持っている

それ以外のとき
アイテムの増減:武器屋ポイントカード + 1

分岐終了


最後の最後にポイントカード取得の処理を入れているのは、その前でポイントカードを持っているかどうかで会話を分岐させているためです。

初回の買い物ではポイントカードを持っていないはずなので、最初の解説の直後に取得させてしまうと、ポイントカードを持っているときの処理となってしまうため、最後に持ってきています。


処理内容は以上です。

ではでは、今日はこの辺で。
ネコタでした。





↓お役に立ちましたら、クリックをお願いします↓
にほんブログ村 ゲームブログへ
にほんブログ村

にほんブログ村 ゲームブログ ゲーム制作へ
にほんブログ村

ブログランキング・にほんブログ村へ
にほんブログ村
スポンサーサイト
プロフィール

猫民のんたん

Author:猫民のんたん

ネコタ:ゲーム作りが趣味の薬剤師。本職とゲーム作りの2足の草鞋を履きこなそうと日々奮闘。

毎週曜日or曜日に更新予定。
-------------------------

ミノン:ゲーム作り初心者で2児の母。前職はSE/PG。子育てをしながらゲーム作りを行おうと、日々奮闘中。

育児中のため活動休止中

最新記事
最新コメント
月別アーカイブ
カテゴリ
フリーエリア
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR