我必须使用android studio实现Tic Tac Toe
游戏。我有Main Menu
个One Player
选项,Two Player
选项和About
选项。当我点击One Player
时,它会转到另一个带有9个按钮的活动,但是当我点击其中一个空格时,应用程序会崩溃。
这是content_one_player.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.example.erin.mytictactoe.OnePlayer"
tools:showIn="@layout/activity_one_player">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/one_player"
android:id="@+id/textView2"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button1"
android:id="@+id/button4"
android:layout_below="@+id/textView2"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button2"
android:id="@+id/button5"
android:layout_below="@+id/textView2"
android:layout_alignRight="@+id/button8"
android:layout_alignEnd="@+id/button8"
android:layout_alignLeft="@+id/button8"
android:layout_alignStart="@+id/button8" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button3"
android:id="@+id/button6"
android:layout_below="@+id/textView2"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button4"
android:id="@+id/button7"
android:layout_below="@+id/button4"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button5"
android:id="@+id/button8"
android:layout_alignBottom="@+id/button7"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button6"
android:id="@+id/button9"
android:layout_alignBottom="@+id/button8"
android:layout_alignLeft="@+id/button6"
android:layout_alignStart="@+id/button6" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button7"
android:id="@+id/button10"
android:layout_below="@+id/button7"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button8"
android:id="@+id/button11"
android:layout_alignBottom="@+id/button10"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="110dp"
android:layout_height="110dp"
android:text="@string/button9"
android:id="@+id/button12"
android:layout_alignBottom="@+id/button11"
android:layout_alignLeft="@+id/button9"
android:layout_alignStart="@+id/button9" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="@string/whose_turn"
android:id="@+id/player"
android:layout_marginTop="54dp"
android:layout_below="@+id/button10"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
</RelativeLayout>
这是我的OnePlayer.java:
package com.example.erin.mytictactoe;
import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.app.Dialog;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.View.OnClickListener;
import android.widget.TextView;
public class OnePlayer extends Activity {
Button bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9;
AlertDialog.Builder alert, error;
TextView player, textView2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one_player);
setClickEvent();
}
public void setClickEvent()
{
bt1=(Button)findViewById(R.id.button4);
bt2=(Button)findViewById(R.id.button5);
bt3=(Button)findViewById(R.id.button6);
bt4=(Button)findViewById(R.id.button7);
bt5=(Button)findViewById(R.id.button8);
bt6=(Button)findViewById(R.id.button9);
bt7=(Button)findViewById(R.id.button10);
bt8=(Button)findViewById(R.id.button11);
bt9=(Button)findViewById(R.id.button12);
bt1.setOnClickListener(new Clicker());
bt2.setOnClickListener(new Clicker());
bt3.setOnClickListener(new Clicker());
bt4.setOnClickListener(new Clicker());
bt5.setOnClickListener(new Clicker());
bt6.setOnClickListener(new Clicker());
bt7.setOnClickListener(new Clicker());
bt8.setOnClickListener(new Clicker());
bt9.setOnClickListener(new Clicker());
}
public void Reset()
{
bt1.setText(" ");
bt2.setText(" ");
bt3.setText(" ");
bt4.setText(" ");
bt5.setText(" ");
bt6.setText(" ");
bt7.setText(" ");
bt8.setText(" ");
bt9.setText(" ");
player.setText("Player 1's turn");
textView2 = (TextView)findViewById(R.id.textView2);
textView2.setText("One Player: New Game");
}
public void Create()
{
alert=new AlertDialog.Builder(this);
alert.setTitle("Winner");
alert.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int y) {
Reset();
}
});
error= new AlertDialog.Builder(this);
error.setTitle("Error!");
error.setMessage("This spot is taken!");
error.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int y) {
}
});
}
class Clicker implements OnClickListener
{
public void onClick(View v)
{
player=(TextView)findViewById(R.id.player);
String x=player.getText().toString();
Button b = (Button)v;
if(b.getText().toString().equals(" ")) {
if (x.equals("Player 1 turn")) {
b.setText("X");
player.setText("Player 2 turn");
} else if (x.equals("Player 2 turn")) {
b.setText("O");
player.setText("Player 1 turn");
}
}
else
{
error.show();
}
}
}
public void Winner()
{
Create();
if((bt1.getText().toString().equals("X") && bt2.getText().toString().equals("X") && bt3.getText().toString().equals("X")) || (bt4.getText().toString().equals("X") && bt5.getText().toString().equals("X") && bt6.getText().toString().equals("X")) || (bt7.getText().toString().equals("X") && bt8.getText().toString().equals("X") && bt9.getText().toString().equals("X")) || (bt1.getText().toString().equals("X") && bt5.getText().toString().equals("X") &&bt9.getText().toString().equals("X")) || (bt3.getText().toString().equals("X") && bt5.getText().toString().equals("X") && bt7.getText().toString().equals("X")) || (bt1.getText().toString().equals("X") && bt4.getText().toString().equals("X" )&&bt7.getText().toString().equals("X")) ||(bt2.getText().toString().equals("X") && bt5.getText().toString().equals("X") && bt8.getText().toString().equals("X")) || (bt3.getText().toString().equals("X") && bt6.getText().toString().equals("X") && bt9.getText().toString().equals("X")))
{
alert.setMessage("Winner is Player 1");
alert.show();
}
else if((bt1.getText().toString().equals("O") && bt2.getText().toString().equals("O") && bt3.getText().toString().equals("O")) ||(bt4.getText().toString().equals("O") && bt5.getText().toString().equals("O") && bt6.getText().toString().equals("O") ||(bt7.getText().toString().equals("O") && bt8.getText().toString().equals("O") && bt9.getText().toString().equals("O")) ||(bt1.getText().toString().equals("O") && bt5.getText().toString().equals("O") && bt9.getText().toString().equals("O")) ||(bt3.getText().toString().equals("O") && bt5.getText().toString().equals("O") && bt7.getText().toString().equals("O")) ||(bt1.getText().toString().equals("O") && bt4.getText().toString().equals("O") && bt7.getText().toString().equals("O")) ||(bt2.getText().toString().equals("O") && bt5.getText().toString().equals("O") && bt8.getText().toString().equals("O")) ||(bt3.getText().toString().equals("O") && bt6.getText().toString().equals("O") && bt9.getText().toString().equals("O"))) {
alert.setMessage("Winner is Player 2");
alert.show();
}
else
{
alert.setMessage("It's a draw!");
alert.show();
}
}
}
这是我不断得到的错误:
03-29 12:33:26.408 5352-5359/? E/art: Failed sending reply to debugger: Broken pipe
这里是完整的堆栈跟踪:
03-29 12:33:26.350 5352-5352/? I/art: Not late-enabling -Xcheck:jni (already on)
03-29 12:33:26.350 5352-5352/? I/art: Late-enabling JIT
03-29 12:33:26.357 5352-5352/? I/art: JIT created with code_cache_capacity=2MB compile_threshold=1000
03-29 12:33:26.408 5352-5359/? E/art: Failed sending reply to debugger: Broken pipe
03-29 12:33:26.408 5352-5359/? I/art: Debugger is no longer active
03-29 12:33:26.418 5352-5352/? W/System: ClassLoader referenced unknown path: /data/app/com.example.erin.mytictactoe-2/lib/x86
03-29 12:33:26.555 5352-5370/? D/OpenGLRenderer: Use EGL_SWAP_BEHAVIOR_PRESERVED: true
03-29 12:33:26.605 5352-5370/? I/OpenGLRenderer: Initialized EGL, version 1.4
03-29 12:33:26.651 5352-5370/? W/EGL_emulation: eglSurfaceAttrib not implemented
03-29 12:33:26.652 5352-5370/? W/OpenGLRenderer: Failed to set EGL_SWAP_BEHAVIOR on surface 0xad7204e0, error=EGL_SUCCESS
我该怎么做才能解决这个问题?