概要
ユーザーとCPUの1対1のバドミントンの対戦ゲームで、ユーザーがショットをした直後のCPUの出足のウェイト設定を行います。
CPUがユーザーのショットを予想して動いているように見せるのが目的です。
予想が当たると速く動くことができて、逆に外れると長めにウェイトを設定します。
ユーザーとCPUは以下の3つの選択肢を実行できるものとします。移動は自動です。
- A:クリアー
- B:スマッシュ
- C:ドロップ
○導入目的
同じショットだけで攻略できないようにするために導入しました。
・ドロップばかり打ってるとCPUに読まれて強いショットで返される。
・クリアー(後ろ)→クリアー(後ろ)→ドロップ(前)を打つとフェイントっぽくなってCPUの反応が遅れる
などを同時に実現したかったです。
初期化
CPUにそれぞれのショットの「印象値」を持たせます。
例、
A:600
B:300
C:100
で初期値を設定します(0~1000を想定)
※説明用のパラメータです。通常最初は500,500,500でいいと思います。
1.CPUの印象値からユーザーのショットを予測します
A:600
B:300
C:100
割合=600:300:100→60%,30%,10%
(割合値は調整してOKです)
例.
CPUはユーザーのショットは「A」(クリアー)が来ると予想します
2.ユーザーがショットを打ちます+ウェイトの設定
ユーザーが打ったショットと、予想した情報をもとにCPUの出足のウェイトを設定します
・Aだった場合→○:予測が当たったので早く反応できる
・Bだった場合→△:ちょっと反応が遅れる(印象値が中央値の500より低いので)
・Cだった場合→×:予測が外れ、かつ印象値が低いので大きく反応が遅れる
※ウェイトの設定は、予想の当たり外れのほかに印象値(0~1000)によっても影響が出るようにしています。
3.ユーザーのショットからCPUの印象値を更新します
- 打たれたショット→+200(印象が高まる)
- それ以外のショット→-100(印象が薄まる)
で印象値を更新します(値は調整してください)
例1.クリアー(A)が打たれた場合
A:600+200→800
B:300-100→200
C:100-100→0
クリアー(A)の印象がより高まります
例2.スマッシュ(B)が打たれた場合
A:600-100→500
B:300+200→500
C:100-100→0
クリアー(A)とスマッシュ(B)の印象が同じくらいになり、ドロップ(C)の印象がなくなります
以降は「1」へ戻ってループ
まとめ
○メリット
・実装が簡単
・CPUの予想と意思決定の要素が入っている
・印象値の幅(0~1000)でリアクションに強弱がつけられます
○デメリット
・ユーザーに気づかれない!?
○その他
・説明上省略しましたが、実際は「1」の予測の後に仮の印象値を作成して、リアクションが大きくなるようにしています
例.Aを選択後の印象値、ウェイトの計算は加算後の値を使用します
A:600+200→800
B:300-100→200
C:100-100→0
以上です。