des 2019/07/10 02:23

wwwwww

まえがき

ふりーむ様のほうにて草が生える企画をやっていたので雑に作って参加しました。こんな事やってるから作業が進まない。
雑草コレクション→https://www.freem.ne.jp/win/game/20557
現実時間で30分に1度生える雑草を抜くゲームです。

その作品にて「簡単に作れる」という書き込みはあったものの、作り方が見つからず、かつ作るのに時間がかかった内容があったので、備忘録と生存報告代わりに置いておきます。
本内容はウディタ使用者向けの記事となります。

本文

上記の作品に作るにあたって「ゲームを起動していない時間を含め30分に1度雑草が生える」という処理が必要でした。
この処理を言い換えるとするなら、「ソシャゲに於ける時間経過によってスタミナを1回復させる処理」となります。
ゲームを起動している間の時間であればSys29番を使えば取得できます。しかしゲームを起動していない時間を含めた経過時間の取得をする変数は無いと思われます。(あったらごめんなさい)
そこで試行錯誤を重ねて、前回から現在までの経過分数を求めるコモンイベントを気合で作りました。
前回日時の取得はその時にコモンイベント内に時間を保存しているだけなので省略します。


(2代目)

呼び出し方例
(追記)
なぜかCSelf10への返り値を複数回設定していますが、条件分岐以降の返り値設定はバグが出たりはしませんが全て設定ミスです。

初代は現在の年-前回の年から順々に処理させて結果を求めようとしましたが条件分岐が多すぎるという理由で別の解決策を求めた結果です。
秒換算にするとウディタの都合上想定外のバグが出そうなので秒は捨ててます。
分-分、(日-日)1440、(月-月)43800、(年-年)*525600で計算し全てを足せば日数がプラスであれば繰り上がりしつつプラスの値が出るはずなのでちゃんと処理できていると思ってました
……勘の良い方は気付かれていると思いますが、この処理だと毎月が同じ日数であるという前提での処理になってしまっているため起動日時によっては正しい数値を取得できません。
というわけで直しました。

修正後


メイン部分
CSelf15は普段は30が入ります。

月日処理のバグ修正
途中のUDB呼び出しは1月から12月までの最大日数(2月は28日)を取得しているだけなので画像は省略。

うるう年処理のバグ修正

ごり押し
最初の画像との違いは月と日の計算を一つにまとめ「日付」という概念で計算している事です。
処理としては以下のような感じとなります。
1.予め前回草を抜いた時刻を記録しておく
2.現在の分-前回の分の結果を保存
3.(現在の時-前回の時)60で計算した結果を2に加算
4.現在の時・分、前回の時・分を用意
5.現在の月-前回の月の結果を求めループ回数を指定。この際にマイナス回数になってるなら12を加算する。
6.前回の月から5で求めた回数だけループさせ、取得した数(その月の日数)
1440を2に加算
7.(現在の日-前回の日)1440で計算した結果を2に加算
8.(現在の年-前回の年)
525600で計算した結果を2に加算
9.現在の年・月・日、前回の年・月・日を取得
10.現在の年-前回の年で計算し1以上なら検索開始年に前回年を指定してうるう年かどうかを1年ずつ確認する。ただし2月29日スタートの時はループ回数を1回減らす。
 うるう年の求め方は画像のとおり。(ggると出てくるやり方)
 ループ1回を入れてるのはうるう年でない場合に処理をスキップするため
11.10の計算にてうるう年だった場合は1440を加算
12.現在の日付が2月29日の時は1440を減算

色々省略できそうな気はしますが、以上の処理をする事で経過分数の取得ができました。

デバッグ用の処理も新たに組んだので試しに2019年5月31日0時0分~2019年6月30日23時0分で計算させた結果。


計算機はこのサイトのを使用 https://keisan.casio.jp/exec/system/1356066502
どちらも44,580分が出力されているのでバグは直ったはず……あったら困る。

使い道

リアルタイムゲーで使える……かも?

おまけ(バグがあったら教えてください)

経過分数取得.zip (2.82kB)

ダウンロード

あとがき

結論:作るの全然簡単じゃねえ!


育成SLGのほうは美術1がモンスター絵やらアイテム絵やらをがんばって描いてるので首を634mほど伸ばしてお待ちください。

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索