2012-03-08 13 views
0

の配列を使用して、私は私の乱数推測ゲームにアチーブメントシステムを実装したいのですが、私はそれのために有効なロジックを構築することができませんでした。 達成システムを持って、2または3の連続を検出したいと思います。CORRECT回答。 正しい答えがあるたびに乱数推測ゲーム

は、短所+ 1(短所は、私の成果システムの「連続する」機能のために使用する変数イムです。

そうでない場合は、短所-1およびライフ-1。

ここに私のコードはあります...私は確かにロジックのエラーは、cons-;とlife--;がループ内にあることを知っていますをスキャンします。 1つは、各回答の「正確さ」の基礎となる10桁の2桁の乱数を格納することです。LOを追加する私の目的OPは、可能性のある一致についてアレイをスキャンすることである。

注:あなたがあなたの助けを事前に感謝!あなたが推測として、あなたがインクリメントまたは配列内の各一致または不一致のためcons(およびlife)をデクリメントすることを、

public void cmpans() 
{ 
    String txget; 
    txget=gametext.getText(); 
    String pars; 
    int ans; 
    pars=gametext.getText(); 
    ans=Integer.parseInt(pars); 

    for(int i=0; i<10; i++) //this is my "Array Scanner" Loop 
    { 

     if(ans==arr[i]) 
     { 
      userscore=userscore+10; 
      lbscore.setText("Score: "+userscore); 
      ck[i].setSelected(true); 
      arr[i]=0000; 
      cons++; 
      gametext.setText(""); 
      lblives.setText("life: "+life); 
      lbcons.setText("cons: "+cons); 
     } 
     else if(ans!=arr[i]) 
     { 
      cons--; //this is the cons and life im talking about 
      life--; 
      if(cons==2) 
      { 
       lbachieve.setText("You're a GOOD GUESSER!"); 
       userscore=userscore+20; 
      } 
      else if(cons==4) 
      { 
       lbachieve.setText("You're an AMAZING GUESSER!!"); 
       userscore=userscore+50; 
      } 
     } 
    }gametext.setText(""); 

答えて

0

私はあなたの説明を正しく理解していれば、あなたのロジックに深刻な欠陥があると信じています。

私の前提: ユーザーは推測を行い、その推測が配列に存在するかどうかを確認します。

まず、自分の推測と同じでない各番号のプレイヤースコアを減らしています。つまり、1つの権利を得ても、彼は9を間違えます。そのロジックをforループから外して、内部変数を使用して推測するかどうかを確認してから、外部に向かって増減を行います(推測してから外します)。

第2に、間違った推測の後でコンサスを減らしたいとは思わない...あなたが連続したい場合は、間違った推測のそれぞれを再び0に設定する必要がある(彼はやり直さなければならない)。

第三:あなたは与えられた値は、例えば、セットのように、その構造内に存在するかどうかをチェックするために適した構造を使用している場合 あなたは非常にあなたのロジックを簡素化することができます:セットアップ

Set<Integer> randomValues = new HashSet<Integer>(); 

塗りつぶし、あなたのロジックは次のように縮小されます:

if(randomValues.contains(ans)){ 
//do stuff 
} else { 
//do other stuff 
} 

これは役に立ちます。

+0

mr.pcalcaoありがとうございますが、プレーヤーの得点は次のようになります:ユーザーが推測するたびに、userscore + 10。そして、それはうまくいくと思います。私はそれが働くことを期待していました。そして間違ったロジックを残念に思っています。 'cozはちょうど2年生で、これはjava =で1回目です)。そして、私は "を設定する方法を知らないrandomValues =新しいHashSet (); "。それは10桁の2桁の数字を格納する配列のようなものであり、ユーザーの推測が一致すればどのように各要素をチェックすることができますか? – cryzone

+0

はい、私は、大きな問題は、内部のロジックを増減させることに過ぎないということを理解しています。他の答えと同様に、それはforループから降りる必要があります。配列が同じ値を複数回持つことができる場合、Setは機能しません(Setは重複した値を格納しません)。その場合、ユーザーがループの中に何回入ったのかを数えてから、ゲームロジックを外部に適用する必要があります。 – pcalcao

+0

うわー。はい、ありがとう。私は完全にそれを逃した。ええと...セットを使う方法を教えてもらえますか...本当に良いアイデアだと思います。 – cryzone

1

最初の問題は次のとおりです。

は、ここに私のコードです。あなたはそれをループの外に移動する必要があります。1回だけ、を推測します。そうでなければ、ゲームは勝てることはありません。なぜなら、10個の異なる数字と推測のうち、9個は確かに推測とは異なるので、cons -9、おそらく負のlifeになります。 )最初の推測の後に。例えば。また

boolean guessMatches = false; 

for(int i=0; i<10 && !guessMatches; i++) //this is my "Array Scanner" Loop 
{ 
    guessMatches = (ans==arr[i]); 
} 
if(guessMatches) 
{ 
    userscore=userscore+10; 
    lbscore.setText("Score: "+userscore); 
    ck[i].setSelected(true); 
    arr[i]=0000; 
    cons++; 
    gametext.setText(""); 
    lblives.setText("life: "+life); 
    lbcons.setText("cons: "+cons); 
    if(cons==2) 
    { 
     lbachieve.setText("You're a GOOD GUESSER!"); 
     userscore=userscore+20; 
    } 
    else if(cons==4) 
    { 
     lbachieve.setText("You're an AMAZING GUESSER!!"); 
     userscore=userscore+50; 
    } 
} 
else if(ans!=arr[i]) 
{ 
    cons = 0; //this is the cons and life im talking about 
    life--; 
} 

注推測が間違っていた後、あなたはそれをデクリメントのではなく、0にconsを設定する必要があること。それ以外の場合は、と連続してと一致していません。上記のコードサンプルを修正しました。

@ pcalcaoが指摘したように、配列の代わりに適切なコレクション(Set)を使用すると、より簡単に一致を見つけることができます。私はあなたの代わりにフラグを使用することをお勧めしたい

+0

クイック返信ありがとう!私はすでにそれについて考えていましたが、私はまだこれらのコードを置く場所を失ってしまい、推測のたびにインクリメントまたはデクリメントすることになります。 – cryzone

0

- 操作 - この方法を、あなたはどの重複++かを得ることはありません。つまり、

boolean success = false; 

for(int i=0; i<10; i++) 
{ 
    if(ans == arr[i]) 
    { 
     ... 
     success = true; 
    } 
} 

if(success) 
{ 
    cons++; 
} 
else 
{ 
    cons = 0; 
} 
+0

@ mr.pcalcao、私のシステムにセットを実装する方法を教えていただけますか? – cryzone

+0

カップルナンバーを保存するために使用できるセットがほしいのであれば?単純にHashSetを使用してください:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/HashSet.html – donnyton

+0

@donnyton_iは、10個の一意の乱数を格納できる単一次元の配列のようなセットを使用します。ある範囲(例えば1〜20)に依存する。私はこれをどのように実装できますか? – cryzone

0

私はこのやり方で配列を作り、それを "123456789"に入れ替えてシャッフルすると、今度はforループを使ってシャッフルされた配列を調べ、必要な数だけ引き出します新しい文字列を長く、ユニークな4桁の5桁のユニークな乱数

関連する問題