コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
しょうご ◆tpp2zBc4h8pI
2018/7/22 23:38
質問
ゲームの「スタミナ制」の作り方
無料ゲーム等でよく見かける何分でいくつスタミナが回復、といった機能を自作ゲームに付けようと思うのですが、どのように組めばよろしいのでしょうか。

コメント

アバター
あきと 2018/7/23 1:32 ◆qGd5dQw2g3a2
まずはライフと現在時刻を保存する処理が必要になります。
次にゲームをプレイする度にライフを-1した数値とプレイ開始の時刻を保存します。

ここからはプログラムがずっと動作している場合と、動作してない時に別れます。
プログラムがずっと動作しているときはプログラム内部でもライフ数と時間を保持しておいてたとえば15分毎にライフが回復するなら1秒に一回など現在時刻を取得して最終プレイ時間と比較。15分経ったらライフを追加します。
プログラムが終了している場合は起動時に時間チェックを行ってライフの回復処理を走らせます。
最終プレイ時のライフ数と時刻が保存されているはずなので時間の差分をとって15分で割ってライフを回復させます。

プレイの度にセーブを行わないとライフを減らして上手くいかなかったらプログラムを落としてやり直すとライフが回復するというインチキが出来るようになるためゲーム開始の寸前にセーブするのは必須です。
アバター
しょうご 2018/7/23 18:51 ◆tpp2zBc4h8pI
コメントありがとうございます。
プログラムで1秒ごとにカウントということは、全ての場面で時間を取得するようにすればよろしいのでしょうか?
アバター
GRS 2018/7/23 23:45 ◆D.CKYslrId2w
簡単なサンプル

■ 仕様1
左右キー:移動
Aキー:ダメージを与える
Bキー:回復アイテムを使う
回復アイテムは使うと5秒後にHPが全回復します
(プログラム的に簡単なので)

プログラムのキモは29行目の HP_TIMER です

ポイント

TIが 0 の場合HPが復活する
TIが -1 の時は何も起こらない
TIが 0より大きい場合は TIが1つ減る
TIを監視するだけで3つの処理を自動で行ってるだけです

アイテムを使う時タイマーをセット(24行目)します

■ 仕様2
回復アイテムを使うと1秒毎にHPが10ずつ回復する

DEF HP_TIMER 'HP回復 監視
IF TI>0 THEN TI=TI-1 'タイマー カウントダウン
IF TI MOD 60==0 THEN HP=HP+10 '1秒ごとに回復
IF TI==0 THEN TI=-1:CLS
END

基本的に仕様1を拡張しただけです。
MODの使い方が少し難しいですが、公式のようなものなので
そのまま使うか、詳しく知りたい場合は質問してください。
(少し長くなります)
アバター
あきと 2018/7/24 0:14 ◆qGd5dQw2g3a2
頻繁にTIME$を呼んでもしょうがないのでメインループが60回来たら確認するぐらいで十分かと。
セーブデータとは別にループ60回を確認する変数は必要ですね。
アバター
しょうご 2018/7/24 0:43 ◆tpp2zBc4h8pI
GRSさん>
サンプルまで作っていただき、ありがとうございます。
MODの説明を見て、数値1を数値2で割った余りということでしたので、A=200 MOD 7で、そこからPRINT Aを行なって試しに表示させてみたところ、4になりました。簡単に言えば整数で割って余った数ということですよね?
それと通常のプチコンと画面が違ったので、少し気になっています。もしかしてラズベリーパイ版なのでしょうか?
あきとさん>
プレイしていない時に、最終時間と現在時間の差を計算するには、どうすればよいのでしょうか?
アバター
あきと 2018/7/24 4:27 ◆qGd5dQw2g3a2
TIME$とDATE$をtime_tに変換する方法が必要なんですね。そんな話前読んだことあったなー。
他のプログラム言語では日付と時刻を絶対秒に変換する方法が用意されています。ミリ秒だったかな。
たとえば2000年1月1日0時0分から現在時間は「何秒経ったか」という数値が算出できると2つの時間の差分が取れるようになります。2000年1月1日の2時0分は2x60x60秒後、2000年1月2日0時0分は24x60x60秒後です。差は22x60x60秒となります。
うるう年と2月29日を考慮すればいいんだっけ。
とりあえず時刻だけではなく日付もセーブが必要ですね。
アバター
しょうご 2018/7/24 11:53 ◆tpp2zBc4h8pI
うるう年、うるう秒のことは完全に忘れていました。そこまで考慮して作るとなると、大変そうですね。
アバター
あきと 2018/7/24 17:08 ◆qGd5dQw2g3a2
年月日時分秒を渡すと2000年1月1日0時0分0秒から何秒経ったかを返す関数を作ってみました。
公開キー
×【VZNV33H4】
○【CRNV33H4】ファイル名「MKTIME」

MKTIME(2018,7,24,12,10,0)と年月日時分秒を数値で渡すと何秒経ったか返します。
DATE$、TIME$文字列を渡せる
MKTIME_DTも入れました。

一番上のテスト呼び出ししてるところを削ればそのままコピーして使えます。
うるう年は入っていますがうるう秒は入ってません。
アバター
しょうご 2018/7/24 22:25 ◆tpp2zBc4h8pI
サンプルありがとうございます。
アバター
しょうご 2018/7/24 23:13 ◆tpp2zBc4h8pI
このプログラムだと、2000年の元日0時からですが、最後にゲームを終了した時間からカウントを開始するように変更をしたいのですが、どうすれば良いのでしょうか?

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -