TicTacToe获胜的情况

时间:2017-09-16 14:41:46

标签: java android tic-tac-toe

我在游戏中遇到了一些麻烦 每当我打开应用程序并单击任何按钮时,它会显示获胜的按摩 任何人都可以帮助我吗?

public class MainActivity extends AppCompatActivity {

int[][] table;
TextView tv;
Button btn, button, button2, button3, button4, button5, button6, button7, button8;
int counter = 0;
int X = 0, O= 1;

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

    table = new int[3][3];

    tv = (TextView) findViewById(R.id.tv);
    btn = (Button) findViewById(R.id.btn);

    whotoplay();

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            if (counter == 0) {
                btn.setText("X");
                counter++;
                whotoplay();
                X = 0;
            } else {
                btn.setText("O");
                counter--;
                whotoplay();
                O = 1;
            }
            CheckResult();
            Toast.makeText(MainActivity.this, counter + "", Toast.LENGTH_SHORT).show();

        }
    });

    button = (Button) findViewById(R.id.button);
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if (counter == 0) {
                button.setText("X");
                counter++;
                whotoplay();
                X = 0;

            } else {
                button.setText("O");
                counter--;
                whotoplay();
                O = 1;

            }
            CheckResult();
            Toast.makeText(MainActivity.this, counter + "", Toast.LENGTH_SHORT).show();
        }
    });

和其他按钮相同,我添加吐司以确保计数器正常工作。

public void whotoplay() {

    if (counter == 1) {
        tv.setText("O");
    }

    if (counter == 0) {
        tv.setText("X");
    }


}

这就是获胜的原因(仅适用于1种情况),但它不起作用。

public void CheckResult() {
    AlertDialog.Builder dlgAlert = new AlertDialog.Builder(this);
    // horizantal
    if (table[0][0] == X && table[0][1] == X && table[0][2] == X) {

        dlgAlert.setMessage("X Player wins!");
        dlgAlert.setTitle("congratulations");
        dlgAlert.setCancelable(true);
        dlgAlert.setPositiveButton("Ok",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });
        dlgAlert.create().show();

    }

一旦我按下btn,就会出现AlertDialog 请帮助我 - 我几乎尽我所能。

3 个答案:

答案 0 :(得分:1)

你的罪魁祸首隐藏在明显的视线中:

if (table[0][0] == X && table[0][1] == X && table[0][2] == X)

问题是您定义了X = 0,并且在创建int数组时,其中的所有值最初都为零。所以你的if总是第一次返回真实。

将您的定义更改为int X = 1, O = 2应该有效,在这种情况下,零表示空状态。

答案 1 :(得分:0)

你的表在启动时充满了零,你将'X'的位置定义为零(和'O'为1)。所以你需要另一个约定:

  • 根本没有pawn的值(尚未播放的地方),比如0
  • 'X'的值为1
  • 'O'的值为2

答案 2 :(得分:0)

我尝试了别的东西,它确实有效,但在某些情况下,我无法理解同样的问题再次发生。

if(btn.getText().equals(button.getText())&&btn.getText()
.equals(button2.getText()))
{

        dlgAlert.setMessage("X Player wins!");
        dlgAlert.setTitle("congratulations");
        dlgAlert.setCancelable(true);
        dlgAlert.setPositiveButton("Ok",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        finish();
                    }
                });
        dlgAlert.create().show();

    }

但是当我尝试将它用于下一行或情况时它不起作用。