2016-04-23 12 views
0

私はチックタックアンドロイドアプリを作っています。スコアを保持したいと思います。私は増分を除いてすべてが働いている。何らかの理由で、1だけ上がるのではなく、2ずつ上がります。Androidスタジオのカウンタが間違っている

これはスコアを増やしてゲームをチェックして勝者がいるかどうかを確認する方法です。

private Button one; 
private Button two; 
private Button three; 
private Button four; 
private Button five; 
private Button six; 
private Button seven; 
private Button eight; 
private Button nine; 
private TextView winner; 
private Button clearBoard; 
private int scoreX; 
private int scoreY; 
private int tie; 
private boolean turn = false; //determines who's turn it is 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    one = (Button) findViewById(R.id.box1); 
    one.setText("-"); 
    two = (Button) findViewById(R.id.box2); 
    two.setText("-"); 
    three = (Button) findViewById(R.id.box3); 
    three.setText("-"); 
    four = (Button) findViewById(R.id.box4); 
    four.setText("-"); 
    five = (Button) findViewById(R.id.box5); 
    five.setText("-"); 
    six = (Button) findViewById(R.id.box6); 
    six.setText("-"); 
    seven = (Button) findViewById(R.id.box7); 
    seven.setText("-"); 
    eight = (Button) findViewById(R.id.box8); 
    eight.setText("-"); 
    nine = (Button) findViewById(R.id.box9); 
    nine.setText("-"); 

    scoreX = 0; 
    scoreY = 0; 
    tie = 0; 

    winner = (TextView) findViewById(R.id.win); 
    clearBoard = (Button) findViewById(R.id.newgame); 
    clearBoard.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      one.setText("-"); 
      one.setEnabled(true); 
      two.setText("-"); 
      two.setEnabled(true); 
      three.setText("-"); 
      three.setEnabled(true); 
      four.setText("-"); 
      four.setEnabled(true); 
      five.setText("-"); 
      five.setEnabled(true); 
      six.setText("-"); 
      six.setEnabled(true); 
      seven.setText("-"); 
      seven.setEnabled(true); 
      eight.setText("-"); 
      eight.setEnabled(true); 
      nine.setText("-"); 
      nine.setEnabled(true); 

     } 
    }); 
} 

public void game(View view) { 
    Button b = (Button) view; 
    moves(b); 
} 

public void moves(Button b){ 
    if(turn == false){ 
     b.setText("X"); 
     b.setTextSize(15); 
    } else { 
     b.setText("O"); 
     b.setTextSize(15); 
    } 

    //once X or O is placed, cannot reuse that button till new game 
    b.setEnabled(false); 
    b.setTextSize(15); 
    turn = !turn; 
    check(); 

    //if there is a winner, make it so buttons can't be pressed and new game must start 
    if(check() == true){ 
     one.setEnabled(false); 
     two.setEnabled(false); 
     three.setEnabled(false); 
     four.setEnabled(false); 
     five.setEnabled(false); 
     six.setEnabled(false); 
     seven.setEnabled(false); 
     eight.setEnabled(false); 
     nine.setEnabled(false); 
    } 
} 

public boolean check() { 
    boolean finished = true; 
    int player = 1; //1 is player X, 0 is player O, 2 is a tie 
    //horizontal check 
    if((!one.getText().equals("-")) && one.getText().toString().equals(two.getText().toString()) && two.getText().toString().equals(three.getText().toString())) { 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if((!four.getText().equals("-")) && four.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(six.getText().toString())){ 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if((!seven.getText().equals("-")) && seven.getText().toString().equals(eight.getText().toString()) && eight.getText().toString().equals(nine.getText().toString())){ 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if((!one.getText().equals("-")) && one.getText().toString().equals(four.getText().toString()) && four.getText().toString().equals(seven.getText().toString())){ 
     //vertical check 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if((!two.getText().equals("-")) && two.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(eight.getText().toString())){ 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if((!three.getText().equals("-")) && three.getText().toString().equals(six.getText().toString()) && six.getText().toString().equals(nine.getText().toString())){ 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if((!one.getText().equals("-")) && one.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(nine.getText().toString())){ 
     //diagonal check 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if((!three.getText().equals("-")) && three.getText().toString().equals(five.getText().toString()) && five.getText().toString().equals(seven.getText().toString())){ 
     if (one.getText().equals("O")) { 
      player = 0; 
     } 
    } else if ((!one.getText().equals("-")) && (!two.getText().equals("-")) && (!three.getText().equals("-")) && (!four.getText().equals("-")) && (!five.getText().equals("-")) 
      && (!six.getText().equals("-")) && (!seven.getText().equals("-")) && (!eight.getText().equals("-")) && (!nine.getText().equals("-"))){ 
     player = 2; 
    } else { 
     return finished = false; 
    } 

    if(player == 1){ 
     scoreX = scoreX + 1; 
     winner.setText(String.format("Player X is the winner!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie)); 
    } else if (player == 0){ 
     scoreY = scoreY + 1; 
     winner.setText(String.format("Player O is the winner!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie)); 
    } else if(player == 2){ 
     tie= tie + 1; 
     winner.setText(String.format("It's a tie!\nGames won by player X: %d\nGames won by player O: %d\nNumber of ties: %d", scoreX, scoreY, tie)); 
    } 

    return finished; 
    } 
} 

私の変数私はちょうど私の変数が2の代わりに、1ずつ増加しているかを確認することはできませんので、scoreX、scoreY、とネクタイは、私は何かが欠けする必要があり、すべてのメンバ変数であり、0に設定助けてください!

編集:私はコーディングがきれいではないことを知っています。私はまだ初心者です。私はすべてのコードを追加しました。私は特に私のチェック()メソッドが長いことを知っていますが、私はどのように私はゲームボード上のボタンをチェックしているの長さを短縮することができるか分からない。

+1

これは 'if/else if'地獄です。ペンとペーパーを使ってやり直すことを検討してください。 – Reimeus

+0

そのコードは完全に混乱しますが、変数を2回以上インクリメントしません。あなたは私たちにまだすべてのコードを表示していません。さらに追加。そして、いくつかの複製を削除してみてください(実際にすべて削除してみてください)。 –

+0

私はちょうど初心者なので、自分のコードがきれいではないことを知っています。残りのコードを追加しました。また、私はそれをテストすると、+1の代わりに+2をインクリメントします。だから私はとても混乱している。 – Kat

答えて

0

あなたが二回あなたのチェック機能を呼び出しているので、それは起こります: 私は本当にあなたに行番号を与えることができないが、(移動機能に)起こるところ、これは次のとおりです。

check(); 

//if there is a winner, make it so buttons can't be pressed and new game must start 
if(check() == true){ 

あなたは何をすべき代わりに、最初のチェックコールの結果を保存し、それを使用します:

boolean result = check(); 

//if there is a winner, make it so buttons can't be pressed and new game must start 
if(result == true){ 
+0

ありがとうございました!私はそれが問題だったかもしれないことに気付かなかった。私は何かが間違っていると思っている私のチェック()メソッドを見続けていました。それは今働きます! – Kat

関連する問題