井字游戏-2块带碎片的棋盘

问题描述 投票:0回答:1

我有这个问题:

在游戏中,我需要两个棋盘,其中一个是另一个的副本。然后,单击其中一个板,然后基于player1Turn变量插入“ X”或“ O”符号。

[每个板都属于一个玩家,所以第一个属于“ X”,第二个属于“ O”。在游戏过程中,两个板都必须具有相同的状态,因此必须同步。

到目前为止,我设法制作了板子,但我不知道如何添加另一个板子,以及使用碎片。

1。如何制作两个带有碎片的另一个板的副本?

-我的应用程序仅适用于第一个棋盘-

喜欢这个

enter image description here

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {


     private Button[][] buttonsX = new Button[3][3];
     private Button[][] buttonsO = new Button[3][3];
     private boolean player1Turn = true;

     private int roundCount;

     private int player1Points;
     private int player2Points;

     private TextView textViewPlayer1;
     private TextView textViewPlayer2;

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


    textViewPlayer1 = findViewById(R.id.text_view_p1);
    textViewPlayer2 = findViewById(R.id.text_view_p2);

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            String buttonID = "button_X" + i + j;
            int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
            buttonsX[i][j] = findViewById(resID);
            buttonsX[i][j].setOnClickListener(this);
        }
    }

    Button buttonReset = findViewById(R.id.button_reset);
    buttonReset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            resetGame();
        }
    });
    }


    @Override
    public void onClick(View v) {
    if (!((Button) v).getText().toString().equals("")) {
        return;
    }

    if (player1Turn) {
        ((Button) v).setText("X");
    } else {
        ((Button) v).setText("O");
    }

    roundCount++;

    if (checkForWin()) {
        if (player1Turn) {
            player1Wins();
        } else {
            player2Wins();
        }
    } else if (roundCount == 9) {
        draw();
    } else {
        player1Turn = !player1Turn;
    }

    }

    private boolean checkForWin() {
    String[][] field = new String[3][3];

    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            field[i][j] = buttonsX[i][j].getText().toString();
        }
     }

    for (int i = 0; i < 3; i++) {
        if (field[i][0].equals(field[i][1])
                && field[i][0].equals(field[i][2])
                && !field[i][0].equals("")) {
            return true;
        }
     }

    for (int i = 0; i < 3; i++) {
        if (field[0][i].equals(field[1][i])
                && field[0][i].equals(field[2][i])
                && !field[0][i].equals("")) {
            return true;
         }
     }

    if (field[0][0].equals(field[1][1])
            && field[0][0].equals(field[2][2])
            && !field[0][0].equals("")) {
        return true;
     }

    if (field[0][2].equals(field[1][1])
            && field[0][2].equals(field[2][0])
            && !field[0][2].equals("")) {
        return true;
     }

    return false;
     }

    private void player1Wins() {
    player1Points++;
    Toast.makeText(this, "Player 1 wins!", Toast.LENGTH_SHORT).show();
    updatePointsText();
     resetBoard();
     }

    private void player2Wins() {
    player2Points++;
    Toast.makeText(this, "Player 2 wins!", Toast.LENGTH_SHORT).show();
    updatePointsText();
     resetBoard();
     }

    private void draw() {
    Toast.makeText(this, "Draw!", Toast.LENGTH_SHORT).show();
    resetBoard();
     }

    private void updatePointsText() {
    textViewPlayer1.setText("Player 1: " + player1Points);
    textViewPlayer2.setText("Player 2: " + player2Points);
     }

    private void resetBoard() {
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            buttonsX[i][j].setText("");
        }
     }

    roundCount = 0;
    player1Turn = true;
    }

    private void resetGame() {
    player1Points = 0;
    player2Points = 0;
    updatePointsText();
    resetBoard();
    }

这是content_main.xml文件。


    <androidx.constraintlayout.widget.ConstraintLayout 
    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="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <RelativeLayout
    android:id="@+id/relativeLayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintBottom_toBottomOf="parent"/>

    <TextView
    android:id="@+id/text_view_p1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:freezesText="true"
    android:text="Player 1: 0"
    android:textSize="30sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

   <TextView
    android:id="@+id/text_view_p2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/text_view_p1"
    android:layout_marginTop="41dp"
    android:freezesText="true"
    android:text="Player 2: 0"
    android:textSize="30sp"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/text_view_p1" />

   <TextView
    android:id="@+id/text_view_p8"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="DOPPIOTRIX"
    android:textSize="30sp"
    app:layout_constraintEnd_toEndOf="@+id/button_reset"
    app:layout_constraintHorizontal_bias="0.633"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" />

   <Button
    android:id="@+id/button_reset"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"

    android:layout_centerVertical="true"
    android:text="reset"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintTop_toTopOf="parent" />
   <LinearLayout
    android:id="@+id/linearLayout"
    android:layout_width="418dp"
    android:layout_height="586dp"
    android:layout_marginTop="49dp"
    android:orientation="vertical"
    app:layout_constraintBottom_toBottomOf="@+id/relativeLayout"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="@+id/text_view_p1">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text='GIOCATORE "X"' />

    <androidx.gridlayout.widget.GridLayout
        android:id="@+id/tabellaX"
        android:layout_width="394dp"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:padding="60dp">

        <Button
            android:id="@+id/button_X22"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="2"
            app:layout_row="2" />

        <Button
            android:id="@+id/button_X00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="0"
            app:layout_row="0" />

        <Button
            android:id="@+id/button_X01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text="" />

        <Button
            android:id="@+id/button_X12"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="2"
            app:layout_row="1" />

        <Button
            android:id="@+id/button_X02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="2"
            app:layout_row="0" />

        <Button
            android:id="@+id/button_X20"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="0"
            app:layout_row="2" />

        <Button
            android:id="@+id/button_X21"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text="" />

        <Button
            android:id="@+id/button_X10"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="0"
            app:layout_row="1" />

        <Button
            android:id="@+id/button_X11"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text=""
            app:layout_column="1"
            app:layout_row="1" />
    </androidx.gridlayout.widget.GridLayout>


   </LinearLayout>

   <LinearLayout
    android:id="@+id/linearLayout2"
    android:layout_width="match_parent"
    android:layout_height="353dp"
    android:orientation="vertical"
    app:layout_constraintBottom_toBottomOf="parent">

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text='GIOCATORE "O"' />

    <androidx.gridlayout.widget.GridLayout
        android:id="@+id/TabellaO"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:padding="60dp">

        <Button
            android:id="@+id/button22"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_column="2"
            app:layout_row="2" />

        <Button
            android:id="@+id/button_O00"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_column="0"
            app:layout_row="0" />

        <Button
            android:id="@+id/button02"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />

        <Button
            android:id="@+id/button12"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_column="2"
            app:layout_row="1" />

        <Button
            android:id="@+id/button.."
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_column="2"
            app:layout_row="0" />

        <Button
            android:id="@+id/button20"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_column="0"
            app:layout_row="2" />

        <Button
            android:id="@+id/button."
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="" />

        <Button
            android:id="@+id/button01"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_column="0"
            app:layout_row="1" />

        <Button
            android:id="@+id/button11"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text=""
            app:layout_column="1"
            app:layout_row="1" />
    </androidx.gridlayout.widget.GridLayout>
</LinearLayout>

java android
1个回答
0
投票

也许一种解决方案可能如下。

请注意,它不是完美的,并且有很多重复的代码和更多的问题,因此您有责任使其变得更好。但是它可以工作,但是如果某事有效,并不意味着可以将其标记为一段不错的代码。

首先创建一个新片段:

<Right-click-on-project> -> New -> Fragment -> Fragment(Blank)

并命名为BoardFragment

在生成的layout / fragment_board.xml]中的下一个放置以下代码段:

<?xml version="1.0" encoding="utf-8"?>
<androidx.gridlayout.widget.GridLayout
    android:id="@+id/tabellaX"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="10dp"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">



    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="0"
        app:layout_row="0" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="1"
        app:layout_row="0" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="2"
        app:layout_row="0" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="0"
        app:layout_row="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="1"
        app:layout_row="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="2"
        app:layout_row="1" />



    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="0"
        app:layout_row="2" />


    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="1"
        app:layout_row="2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:freezesText="true"
        android:text=""
        app:layout_column="2"
        app:layout_row="2" />

</androidx.gridlayout.widget.GridLayout>

BoardFragment.java应该如下所示:

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import androidx.fragment.app.Fragment;


public class BoardFragment extends Fragment {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_board, container, false);
    }

}

然后使用以下代码段更改activity_main.xml,请记住以更改fragment标签中的包。

<LinearLayout 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="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">


    <TextView
        android:id="@+id/text_view_p8"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="DOPPIOTRIX"
        android:textSize="30sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/text_view_p1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:freezesText="true"
            android:text="Player 1: "
            android:textSize="20sp"
            android:visibility="visible" />

        <TextView
            android:id="@+id/text_view_p1_score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text="0"
            android:textSize="20sp"
            android:visibility="visible" />

        <TextView
            android:id="@+id/text_view_p2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="24dp"
            android:freezesText="true"
            android:text="Player 2: "
            android:textSize="20sp"
            android:visibility="visible" />

        <TextView
            android:id="@+id/text_view_p2_score"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:freezesText="true"
            android:text="0"
            android:textSize="20sp"
            android:visibility="visible" />

        <Button
            android:id="@+id/button_reset"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="reset"
            android:layout_marginStart="8dp"
            android:layout_marginLeft="8dp"
            android:visibility="visible" />

    </LinearLayout>

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:gravity="center"
        android:text='GIOCATORE "X"'
        android:visibility="visible" />

    <!-- Change  andorid:name-->
    <fragment
        android:name="hr.hello.dm.test.BoardFragment"
        android:id="@+id/grid_X"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:text='GIOCATORE "O"' />

    <!-- Change  andorid:name-->
    <fragment
        android:name="hr.hello.dm.test.BoardFragment"
        android:id="@+id/grid_O"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />


</LinearLayout>

最后是Java文件。

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.gridlayout.widget.GridLayout;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {



    private boolean player1Turn = true;

    private int roundCount;

    private int player1Points;
    private int player2Points;

    private TextView textViewPlayer1Score;
    private TextView textViewPlayer2Score;
    private GridLayout gridLayoutX;
    private GridLayout gridLayoutO;

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


        textViewPlayer1Score = findViewById(R.id.text_view_p1_score);
        textViewPlayer2Score = findViewById(R.id.text_view_p2_score);

        gridLayoutX = findViewById(R.id.grid_X);

        int id = 0;
        for(View v : gridLayoutX.getTouchables()){
            v.setId(id++);
            v.setOnClickListener(this);
        }

        gridLayoutO = findViewById(R.id.grid_O);
        for(View v : gridLayoutO.getTouchables()){
            v.setId(id++);
            v.setOnClickListener(this);
        }

        Button buttonReset = findViewById(R.id.button_reset);
        buttonReset.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                resetGame();
            }
        });
    }


    @Override
    public void onClick(View v) {
        if (!((Button) v).getText().toString().equals("")) {
            return;
        }

        GridLayout currentGridLayout = player1Turn ? gridLayoutX : gridLayoutO;


        if (player1Turn && currentGridLayout.findViewById(v.getId()) != null) {
            ((Button) v).setText("X");
            ((Button) gridLayoutO.getTouchables().get(v.getId())).setText("X");
        } else if (!player1Turn  && currentGridLayout.findViewById(v.getId()) != null){
            ((Button) v).setText("O");
            ((Button) gridLayoutX.getTouchables().get(v.getId() - 9)).setText("O");
        } else {
            return;
        }

        roundCount++;

        if (checkForWin()) {
            if (player1Turn) {
                player1Wins();
            } else {
                player2Wins();
            }
        } else if (roundCount == 9) {
            draw();
        } else {
            player1Turn = !player1Turn;
        }

    }

    private boolean checkForWin() {
        String[][] field = new String[3][3];

        for (int i = 0; i < 9; i++) {
                field[i/3][i%3] = ((Button) gridLayoutX.getTouchables().get(i)).getText().toString();
        }

        for (int i = 0; i < 3; i++) {
            if (field[i][0].equals(field[i][1])
                    && field[i][0].equals(field[i][2])
                    && !field[i][0].equals("")) {
                return true;
            }
        }

        for (int i = 0; i < 3; i++) {
            if (field[0][i].equals(field[1][i])
                    && field[0][i].equals(field[2][i])
                    && !field[0][i].equals("")) {
                return true;
            }
        }

        if (field[0][0].equals(field[1][1])
                && field[0][0].equals(field[2][2])
                && !field[0][0].equals("")) {
            return true;
        }

        if (field[0][2].equals(field[1][1])
                && field[0][2].equals(field[2][0])
                && !field[0][2].equals("")) {
            return true;
        }

        return false;
    }

    private void player1Wins() {
        player1Points++;
        Toast.makeText(this, "Player 1 wins!", Toast.LENGTH_SHORT).show();
        updatePointsText();
        resetBoard();
    }

    private void player2Wins() {
        player2Points++;
        Toast.makeText(this, "Player 2 wins!", Toast.LENGTH_SHORT).show();
        updatePointsText();
        resetBoard();
    }

    private void draw() {
        Toast.makeText(this, "Draw!", Toast.LENGTH_SHORT).show();
        resetBoard();
    }

    private void updatePointsText() {
        textViewPlayer1Score.setText(String.valueOf(player1Points));
        textViewPlayer2Score.setText(String.valueOf(player2Points));
    }

    private void resetBoard() {
        for(View v : gridLayoutX.getTouchables()){
            ((Button) v).setText("");
        }

        for(View v : gridLayoutO.getTouchables()){
            ((Button) v).setText("");
        }

        roundCount = 0;
        player1Turn = true;
    }

    private void resetGame() {
        player1Points = 0;
        player2Points = 0;
        updatePointsText();
        resetBoard();
    }
}

快速说明:

在GIOCATOREX板上,X播放器输入值,反之亦然。但是他们不能输入当其他用户转向时的值。

© www.soinside.com 2019 - 2024. All rights reserved.