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

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

新規登録して質問してみよう
ただいま回答率
85.37%
D

D言語(D programming language)は、プログラミング言語の1つで C言語の後続を目指したマルチパラダイムプログラミング言語で、オブジェクト指向プログラミング可能な言語です。

Q&A

解決済

5回答

672閲覧

deleted question

退会済みユーザー

退会済みユーザー

総合スコア0

D

D言語(D programming language)は、プログラミング言語の1つで C言語の後続を目指したマルチパラダイムプログラミング言語で、オブジェクト指向プログラミング可能な言語です。

0グッド

1クリップ

投稿2018/01/07 07:11

編集2023/05/07 09:37

deleteddeleteddeleteddeleteddeleted

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

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

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

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

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

guest

回答5

0

ベストアンサー

ゲームの勝敗をクライアントサイドで決めるのであれば仕方のないことだと思います。
審判を対戦者が兼ねているようなもので良識に頼るしかありません。

簡単にと言うのが問題であるなら、一定のリスクはありますがスクリプトを難読化して定期的に変更するという手があります。
チートは不可能にはなりませんが、かなり面倒くさくなります。

またチートを使う場合、短期間に大量のコインをゲットしたくなります。
そのような異常な入力があった場合にユーザーアカウントを凍結してそれを公表し、理由は「不正行為」の一点張りでなぜバレたのかを一切言わないことで他のユーザーを牽制する方法もあります。

投稿2018/01/07 07:49

Zuishin

総合スコア28662

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

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

退会済みユーザー

退会済みユーザー

2023/05/07 09:37 編集

deleted
Zuishin

2018/01/07 08:16

勝敗は複数人を想定したものではありませんでした。 スコアの判定を勝敗という言葉で代表させました。 判定をクライアントサイドで行う以上、プレイヤーが審判を兼ねることができます。 難読化はググってみてください。JavaScript を読みにくくするツールがあります。
退会済みユーザー

退会済みユーザー

2023/05/07 09:37 編集

deleted
guest

0

そういうAPIを提供しているからです。
自分への報酬は、API経由ではなくサーバ側システム内で加算してください。
たとえば、勝利イベントをトリガーにして内部で加算するとかです。
システムがどのようなAPIをユーザに提供し、それを無制限に使われるとどうなるかしっかり検討する必要があります。
無制限に使われないようなガードが入っているか、またはそれはユーザに公開すべきものか、見極める必要があります。
基本的に勝利判定やボーナス加算などはサーバ側だけでやるべきで、クライアントに公開すべきものではありません。

投稿2018/01/07 07:48

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2023/05/07 09:37 編集

deleted
退会済みユーザー

退会済みユーザー

2018/01/07 08:36

一人遊びかどうかはあまり関係がありません。 ユーザ操作をサーバに送り、サーバ側で必要処理(例えば当たり判定等)を施し、その結果をユーザ側に返す。ユーザ側が数字を改ざんしても、サーバ側の数値と一致してなければ、弾くことができます。たとえばサーバ側のMPの値が0なのに、魔法を使えたらおかしいとわかりますね。 また、極力数字が絡むAPIはつけないことです。当たり判定も、勝利判定も基本的にはサーバ側の処理です。 コインを付与することは、現在でもサーバ側で行っていると思います。付与機能をクライアント側に公開してはいけないということです。
退会済みユーザー

退会済みユーザー

2023/05/07 09:37 編集

deleted
guest

0

いわゆるチート対策ですね
完全なチート防止にはユーザー側では操作のみさせて、
判定はサーバー側にすべてさせることです。

しかしすべての作業をサーバーにおくっていては
無駄な通信だらけになってしまうのも懸念されるので
ある程度ユーザーに処理を委ねる必要があります。
たとえばなんらかのトークンを設定しユーザーからのデータに埋め込み
整合性をチェックするのが有効でしょう
また理論上変更可能な上限下限値を設定しておき、
ユーザーがおくる時点でそのしきい値を超えていたら不正とするなど
対応方法はあります。

とはいえそれらもユーザー側がちまちまと
調整すれば完全な不正排除にはなりません
場合によっては無駄にはなりますが、偽データでよいので定期的にサーバーへ
データ通信し、ユーザー側がどのデータが正規のデータなのかを
わかりづらくすることも必要かもしれません。

あとは極端にデータのが変化が大きなユーザーを統計的に調査し
そのユーザーからのアクセスに対しては特定の詳細ログをとれるような
仕組みをつくっておくことです。

投稿2018/01/08 04:51

yambejp

総合スコア116443

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

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

退会済みユーザー

退会済みユーザー

2023/05/07 09:37 編集

deleted
guest

0

思いつきですがリプレイデータをサーバに送信し、スコアの検証を行うというのはどうでしょう?
リアルタイム性が高いゲームならば、実際にゲームをプレイすること以外で整合性があるリプレイデータを生成するのは難しい気がします。

投稿2018/01/09 07:59

ku__ra__ge

総合スコア4524

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

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

0

間違えて投稿してしまいました...。

投稿2018/01/07 07:58

編集2018/01/07 08:00
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問