質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

意見交換

クローズ

3回答

988閲覧

ゲームの「チャレンジ」とか「実績」の実装方法

toya_toya

総合スコア0

デザインパターン

デザインパターンは、ソフトウェアのデザインでよく起きる問題に対して、解決策をノウハウとして蓄積し再利用出来るようにした設計パターンを指します。

1グッド

0クリップ

投稿2023/05/10 08:11

1

0

テーマ、知りたいこと

PCゲームにある「チャレンジ」とか「実績」
ってきれいに実装する方法とかありますでしょうか?
やっぱり、コードのあちこちに判定とかフラグを埋め込むことになりますかね?

背景、状況

たとえば簡単な例で4桁の数を当てるゲーム(ヒットアンドブロー)だとこんな感じです

チャレンジ
・1発であてる
・1分以内にあてる
・奇数だけのものを当てる
・午前中に10回プレイする
・100回遊ぶ

これはあくまで自分の妄想アイデアなんですが、
ゲームをみてる監視者をおいて、監視者にこういったロジックを分離したら
きれいになりそう、と夢想しますが、具体的にどうなるのか想像もつきません

自分はプロじゃないし、実際チャレンジを作れないとどうしても困る、というわけではないのですが、
こんな感じでやりました、やってるのを聞きました、みたいな体験談を聞けたらとても嬉しいです

読んでいただきありがとうございます

ozwk👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答3

#1

Zuishin

総合スコア28662

投稿2023/05/10 08:51

「チャレンジ」と「実績」を誰でも知っているもののように説明無しで書くと回答できる人が減ります。
ゲームをする際に特定の条件を満たすと報酬が得られるシステムがチャレンジで、達成されたチャレンジの一覧が実績なんですかね。

達成したかどうかチェックするのに必要な条件はイベントなどで汎用的に公開するとスッキリすると思います。
たとえば、各チャレンジ毎に一つのオブジェクトを作ります。
ゲームマスターオブジェクトは当たった時に発生するイベントと外れた時に発生するイベントを公開し、チャレンジオブジェクトがそれらを購読します。
オブジェクト内でそれらをカウントすれば一発で当てたかどうかがわかります。
また、始まった時に発生するイベントと終わった時に発生するイベントを使えば、1 分以内に終わったかどうかがわかります。

これはゲームマスターオブジェクトをサブジェクト、各チャレンジオブジェクトをオブザーバーとするオブザーバーパターンです。
https://ja.m.wikipedia.org/wiki/Observer_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

yambejp

総合スコア115047

投稿2023/05/10 09:19

質問の意図がわかりかねますが、通常ルールとは別に特定の条件で付加価値をつけるということなら、一つ一つの仕様にあわせた判定処理が必要でしょうね。
とはいえ標準化しやすい内容なのでUI以外は標準的な機能として組み込んでおく手はあると思います

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

k5kkkkk

総合スコア102

投稿2023/05/10 09:23

私はむしろ、「チャレンジ」や「実績」を用いることでデファクトスタンダードな方法を模索されているのかなと思いました。
ただし英語で検索したほうが得策だったのかなと思います。
Achievement system implementation でググるとゲームの実績システムの実装方法が議論されていますね。
上の方に出てくる記事は2010年ごろのもので、こちらには Observer の語は出てきませんね。
少し下の方を見るともう少し最近の記事が出てきて、こちらは#1でZuishinさんがおっしゃられているObserver Patternで実装されているようですね。
逆にObserver Patternで検索してもAchievement systemが例として挙げられていたりするので、やはりデファクトスタンダードな方法となっているのでしょうか?
興味本位でド素人が調べてみただけなので、実際のところは分からないです

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問