(Android)如何在游戏中添加重试按钮?

时间:2017-04-02 11:40:01

标签: java android button

如何向游戏活动添加重试按钮,或者使用按钮在循环中运行代码?这是代码。

我只是想让我的应用程序只用重试按钮重启活动,而不是回到主菜单然后按开始游戏。 按下重试按钮后,应用必须保存分数并继续记分板。

    public class TicTacToeActivity extends Activity {

// Represents the internal state of the game
private TicTacToeGame mGame;

// Buttons making up the board
private Button mBoardButtons[];

// Various text displayed
private TextView mInfoTextView;
private TextView mPlayerOneCount;
private TextView mTieCount;
private TextView mPlayerTwoCount;
private TextView mPlayerOneText;
private TextView mPlayerTwoText;

// Counters for the wins and ties
private int mPlayerOneCounter = 0;
private int mTieCounter = 0;
private int mPlayerTwoCounter = 0;

// Bools needed to see if player one goes first
// if the gameType is to be single or local multiplayer
// if it is player one's turn
// and if the game is over
private boolean mPlayerOneFirst = true;
private boolean mIsSinglePlayer = false;
private boolean mIsPlayerOneTurn = true;
private boolean mGameOver = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.main);

    ((Button) findViewById(R.id.button5)).setOnClickListener(new View.OnClickListener() {
        public void onClick(View V) {
            Log.d("DEBUG", "Retry Button Pressed!");
            Intent intent = new Intent(TicTacToeActivity.this, TicTacToeActivity.class);
            intent.putExtra("gameType", true);
            startActivityForResult(intent, 0);
        }
    });


    boolean mGameType = getIntent().getExtras().getBoolean("gameType");

    // Initialize the buttons
    mBoardButtons = new Button[mGame.getBOARD_SIZE()];
    mBoardButtons[0] = (Button) findViewById(R.id.one);
    mBoardButtons[1] = (Button) findViewById(R.id.two);
    mBoardButtons[2] = (Button) findViewById(R.id.three);
    mBoardButtons[3] = (Button) findViewById(R.id.four);
    mBoardButtons[4] = (Button) findViewById(R.id.five);
    mBoardButtons[5] = (Button) findViewById(R.id.six);
    mBoardButtons[6] = (Button) findViewById(R.id.seven);
    mBoardButtons[7] = (Button) findViewById(R.id.eight);
    mBoardButtons[8] = (Button) findViewById(R.id.nine);

    // setup the textviews
    mInfoTextView = (TextView) findViewById(R.id.information);
    mPlayerOneCount = (TextView) findViewById(R.id.humanCount);
    mTieCount = (TextView) findViewById(R.id.tiesCount);
    mPlayerTwoCount = (TextView) findViewById(R.id.androidCount);
    mPlayerOneText = (TextView) findViewById(R.id.human);
    mPlayerTwoText = (TextView) findViewById(R.id.android);

    // set the initial counter display values
    mPlayerOneCount.setText(Integer.toString(mPlayerOneCounter));
    mTieCount.setText(Integer.toString(mTieCounter));
    mPlayerTwoCount.setText(Integer.toString(mPlayerTwoCounter));

    // create a new game object
    mGame = new TicTacToeGame();

    // start a new game
    startNewGame(mGameType);

}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.game_menu, menu);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item)
{
    switch(item.getItemId())
    {
        case R.id.newGame:
            startNewGame(mIsSinglePlayer);
            break;
        case R.id.exitGame:
            TicTacToeActivity.this.finish();
            break;
    }

    return true;
}

// start a new game
// clears the board and resets all buttons / text
// sets game over to be false
private void startNewGame(boolean isSingle)
{

    this.mIsSinglePlayer = isSingle;

    mGame.clearBoard();

    for (int i = 0; i < mBoardButtons.length; i++)
    {
        mBoardButtons[i].setText("");
        mBoardButtons[i].setEnabled(true);
        mBoardButtons[i].setOnClickListener(new ButtonClickListener(i));

    }

    if (mIsSinglePlayer)
    {
        mPlayerOneText.setText("Human:");
        mPlayerTwoText.setText("Android:");

        if (mPlayerOneFirst)
        {
            mInfoTextView.setText(R.string.first_human);
            mPlayerOneFirst = false;
        }
        else
        {
            mInfoTextView.setText(R.string.turn_computer);
            int move = mGame.getComputerMove();
            setMove(mGame.PLAYER_TWO, move);
            mPlayerOneFirst = true;
        }
    }
    else
    {
        mPlayerOneText.setText("Player One:");
        mPlayerTwoText.setText("Player Two:");

        if (mPlayerOneFirst)
        {
            mInfoTextView.setText(R.string.turn_player_one);
            mPlayerOneFirst = false;
        }
        else
        {
            mInfoTextView.setText(R.string.turn_player_two);
            mPlayerOneFirst = true;
        }
    }

    mGameOver = false;
}

private class ButtonClickListener implements View.OnClickListener
{
    int location;

    public ButtonClickListener(int location)
    {
        this.location = location;
    }

    public void onClick(View view)
    {
        if (!mGameOver)
        {
            if (mBoardButtons[location].isEnabled())
            {
                if (mIsSinglePlayer)
                {
                    setMove(mGame.PLAYER_ONE, location);

                    int winner = mGame.checkForWinner();

                    if (winner == 0)
                    {
                        mInfoTextView.setText(R.string.turn_computer);
                        int move = mGame.getComputerMove();
                        setMove(mGame.PLAYER_TWO, move);
                        winner = mGame.checkForWinner();
                    }

                    if (winner == 0)
                        mInfoTextView.setText(R.string.turn_human);
                    else if (winner == 1)
                    {
                        mInfoTextView.setText(R.string.result_tie);
                        mTieCounter++;
                        mTieCount.setText(Integer.toString(mTieCounter));
                        mGameOver = true;
                    }
                    else if (winner == 2)
                    {
                        mInfoTextView.setText(R.string.result_human_wins);
                        mPlayerOneCounter++;
                        mPlayerOneCount.setText(Integer.toString(mPlayerOneCounter));
                        mGameOver = true;
                    }
                    else
                    {
                        mInfoTextView.setText(R.string.result_android_wins);
                        mPlayerTwoCounter++;
                        mPlayerTwoCount.setText(Integer.toString(mPlayerTwoCounter));
                        mGameOver = true;
                    }
                }
                else
                {
                    if (mIsPlayerOneTurn)
                        setMove(mGame.PLAYER_ONE, location);
                    else
                        setMove(mGame.PLAYER_TWO, location);

                    int winner = mGame.checkForWinner();

                    if (winner == 0)
                    {
                        if (mIsPlayerOneTurn)
                        {
                            mInfoTextView.setText(R.string.turn_player_two);
                            mIsPlayerOneTurn = false;
                        }
                        else
                        {
                            mInfoTextView.setText(R.string.turn_player_one);
                            mIsPlayerOneTurn = true;
                        }
                    }
                    else if (winner == 1)
                    {
                        mInfoTextView.setText(R.string.result_tie);
                        mTieCounter++;
                        mTieCount.setText(Integer.toString(mTieCounter));
                        mGameOver = true;
                    }
                    else if (winner == 2)
                    {
                        mInfoTextView.setText(R.string.result_player_one_wins);
                        mPlayerOneCounter++;
                        mPlayerOneCount.setText(Integer.toString(mPlayerOneCounter));
                        mGameOver = true;
                        mIsPlayerOneTurn = false;
                    }
                    else
                    {
                        mInfoTextView.setText(R.string.result_player_two_wins);
                        mPlayerTwoCounter++;
                        mPlayerTwoCount.setText(Integer.toString(mPlayerTwoCounter));
                        mGameOver = true;
                        mIsPlayerOneTurn = true;
                    }
                }
            }
        }
    }
}


// set move for the current player
private void setMove(char player, int location)
{
    mGame.setMove(player, location);
    mBoardButtons[location].setEnabled(false);
    if (player == mGame.PLAYER_ONE)
        mBoardButtons[location].setBackgroundDrawable(getResources().getDrawable(R.drawable.x));
    else
        mBoardButtons[location].setBackgroundDrawable(getResources().getDrawable(R.drawable.o));
}

0 个答案:

没有答案