2016-12-10 12 views
0

私はJavaScriptで書かれたゲームを持っています。基本的には10秒タイマーを起動し、ユーザーが特定のボタンをクリックする回数を登録しますタイマーが経過します。ユーザーがボタンのクリック回数に影響を与えないようにする方法

コード仕組み

ユーザがボタンをクリックすると、要素はpush関数を使用して、アレイに追加され、その後、異なる機能は回数として配列の長さを返しますクリックした

これに伴う問題:ユーザは、開発ツールを開き、要素がクリックあたりのアレイに追加された回数を変える

場合、これは結果の結果を変更します。

私のアプローチ:私は行うことを決めた何

私はpush機能を実行する前にしても、私はpush機能を実行した後に、その後、彼らの違いを比較し、それが1より大きいだ場合は、長さを格納することで、それは何かが正しくないことを意味します。これは私がコードに書き留めて、それを確認する前にユーザーが複数回プッシュすると気付かれなくなることを発見するまで、これは私の頭の中で働くように見えました。大脳の男よ、助けてください。

マイコード:

$('body').on('click', '.btn.z', function() { 
     // start listening 

     startCountingClicks() 
    }) 

    var timerStarted = false; 
    var tc = []; 

    function startCountingClicks() { 



      $('.btn.z').html('ClickZed'); 
      $('.Score').html('Your Score: '+gettc()+" clicks"); 
      if (timerStarted == false) { 
       startTimer(10, $('#time')); 
      } 

      // user does multiple push before this function: startCountingClicks is called 

      var previous_length = tc.length; // get length before push 
      tc.push(1); 
      var new_length = tc.length; // get length after push 

      if (new_length - previous_length !== 1) { 
       console.log("fraud"); // this is supposed to catch a thief!!! 
      } 
      console.log(new_length+" "+previous_length); 

      timerStarted = true; 

    } 

    function gettc(){ 
     // get number of clicks 
     return tc.length ; 
    } 

完全にこれを壊すコード:

$('button').click(function(){tc.push(1); tc.push(1)}) 

編集:私はdevのツールから保護したくない

、それが機能すれば私はその方法に反対していません。私はちょうど私のクリックをカウントするより良い方法を得たい、devツールのコードを書くことによって影響を受けることができない方法です。

+1

なぜあなたはdevツールから保護したいですか?これらのツールは、コードを開発する際のヒントを示しています。これらのツールでは、すべてのスクリプトを無効にして、代わりに何かを置くことができます。実際の検証を行うには、サーバー側のコードを使用してください。 – trincot

+0

私は開発ツールから保護したくないので、私は自分のコードを壊さないように頼りにしたくありません。 – theOzmic

+0

それは私の言いたいことです。誰かが 'console.log( 'あなたが勝った!10秒間に1000000回クリックした、あなたは驚いている')'と書くことができます。それで何が楽しいですか? – trincot

答えて

2

あなたは本当に人々がクライアント側で何かをするのを止めることはできません。それを防ぐことは無意味です。あなたが行うことができる最も良いことは、送信されたものがサーバー側で期待しているものと一致することを確認することです。

+0

私は何を期待しているのかわからないので、ユーザーはできるだけ早くボタンをクリックするので、勝つだろうし、ユーザーが不正をしているかどうかはわからない。 – theOzmic

+0

悲しいことにそれをチェックする方法はありません。あなたが実際にあなたのサーバーにクリックイベントを送信し、それらを数え、応答を返信しない限り...しかし、それでも私はそれを複製することができるのでクリックイベントであなたのサーバーを迷惑メールにすることができます...悲しいことにクリックだけを認証する方法はありません。それがあなたのやりたいことであれば、おそらくあなたのゲームをより公平にするための他の方法を考える必要があります。 – Chris

+0

あなたの最善の策は、あいまいで安全にすることです。だからあなたのjsコード、またはそのようなものを小さくするようなものをしてください。 – Chris

関連する問題