【问题标题】:Android Studio Tic Tac Toe not showing winning userAndroid Studio Tic Tac Toe 未显示获胜用户
【发布时间】:2020-12-09 04:09:13
【问题描述】:

概述: 尝试制作类似于井字游戏的游戏,但无法使用 3/3 网格。无法理解代码有什么问题。请帮忙。

问题: Grid 没有制作 3 行来完成游戏。问题在于正确的逻辑制作。

我想要实现的目标:我想制作一个 3 x 3 的网格来展示游戏何时结束并显示您获胜的信息。

public class MainActivity extends AppCompatActivity {
    // 0: yellow, 1: red, 2: empty
    int[] gameState = { 2, 2, 2, 2, 2, 2, 2, 2, 2 };
    int[][] winningPositions = { { 0, 1, 2 }, { 3, 4, 5 }, { 6, 7, 8 }, { 0, 3, 6 }, { 1, 4, 7 }, { 2, 5, 8 },
            { 0, 4, 8 }, { 2, 4, 6 } };
    int activePlayer = 0;
    boolean gameActive = true;

    public void dropIn(View view) {
        ImageView counter = (ImageView) view;
        int tappedCounter = Integer.parseInt(counter.getTag().toString());

        if (gameState[tappedCounter] == 1 && gameActive) {
            gameState[tappedCounter] = activePlayer;
            counter.setTranslationY(-1500);
            if (activePlayer == 0) {
                counter.setImageResource(R.drawable.yellow);
                activePlayer = 1;
            } else {
                counter.setImageResource(R.drawable.red);
                activePlayer = 0;
            }
            counter.animate().translationYBy(1500).rotation(3600).setDuration(300);

            for (int[] winningPosition : winningPositions) {
                if (gameState[winningPosition[0]] == gameState[winningPosition[1]]
                        && gameState[winningPosition[1]] == gameState[winningPosition[2]]
                        && gameState[winningPosition[0]] != 2) {
                    // Somone has won!
                    gameActive = false;
                    String winner = "";

                    if (activePlayer == 1) {
                        winner = "Yellow";
                    } else {
                        winner = "Red";
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: java android algorithm android-studio


    【解决方案1】:

    您的游戏状态循环检查是正确的。我认为问题在于正确设置了gameState数组。

    【讨论】:

      【解决方案2】:

      解决方案

      假设这里是您设计井字游戏屏幕的activity_main.xml

      xml

      <?xml version="1.0" encoding="utf-8"?>
      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="#000"
          android:gravity="center"
          android:orientation="vertical">
      
          <TextView
              android:id="@+id/winnerTextView"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginBottom="30dp"
              android:textSize="24sp"
              android:textStyle="bold"
              android:visibility="gone" />
      
          <GridLayout
              android:id="@+id/gameBoard"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_marginBottom="20dp">
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="0"
                  android:layout_column="0"
                  android:layout_marginEnd="10dp"
                  android:layout_marginBottom="10dp"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="0" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="0"
                  android:layout_column="1"
                  android:layout_marginEnd="10dp"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="1" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="0"
                  android:layout_column="2"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="2" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="1"
                  android:layout_column="0"
                  android:layout_marginEnd="10dp"
                  android:layout_marginBottom="10dp"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="3" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="1"
                  android:layout_column="1"
                  android:layout_marginEnd="10dp"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="4" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="1"
                  android:layout_column="2"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="5" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="2"
                  android:layout_column="0"
                  android:layout_marginEnd="10dp"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="6" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="2"
                  android:layout_column="1"
                  android:layout_marginEnd="10dp"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="7" />
      
              <ImageView
                  android:layout_width="64dp"
                  android:layout_height="64dp"
                  android:layout_row="2"
                  android:layout_column="2"
                  android:background="#FFF"
                  android:onClick="dropIn"
                  android:tag="8" />
      
          </GridLayout>
      
          <Button
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:onClick="reset"
              android:text="Reset" />
      </LinearLayout>
      

      设计

      MainActivity

      public class MainActivity extends AppCompatActivity {
      
          // 0: yellow, 1: red, 2: empty
          int[] gameState = {2, 2, 2, 2, 2, 2, 2, 2, 2};
          int[][] winningPositions = {
                  {0, 1, 2},
                  {3, 4, 5},
                  {6, 7, 8},
                  {0, 3, 6},
                  {1, 4, 7},
                  {2, 5, 8},
                  {0, 4, 8},
                  {2, 4, 6}};
          int activePlayer = 0;
          boolean gameActive = true;
      
          private GridLayout gameBoard;
          private TextView winnerTextView;
      
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              gameBoard = findViewById(R.id.gameBoard);
              winnerTextView = findViewById(R.id.winnerTextView);
          }
      
          public void dropIn(View view) {
              ImageView counter = (ImageView) view;
              int tappedCounter = Integer.parseInt(counter.getTag().toString());
      
              if (gameActive) {
                  gameState[tappedCounter] = activePlayer;
                  counter.setTranslationY(-1500);
                  if (activePlayer == 0) {
                      counter.setImageResource(R.drawable.yellow);
                      activePlayer = 1;
                  } else {
                      counter.setImageResource(R.drawable.red);
                      activePlayer = 0;
                  }
                  counter.animate().translationYBy(1500).rotation(3600).setDuration(300);
      
                  for (int[] winningPosition : winningPositions) {
                      if (gameState[winningPosition[0]] == gameState[winningPosition[1]]
                              && gameState[winningPosition[1]] == gameState[winningPosition[2]]
                              && gameState[winningPosition[0]] != 2) {
      
                          // Someone has won!
                          gameActive = false;
                          String winner;
                          int color;
                          if (activePlayer == 1) {
                              winner = "Yellow";
                              color = Color.YELLOW;
                          } else {
                              winner = "Red";
                              color = Color.RED;
                          }
                          winnerTextView.setVisibility(View.VISIBLE);
                          winnerTextView.setTextColor(color);
                          winnerTextView.setText(winner + " won!");
                      }
                  }
              }
          }
      
          public void reset(View view) {
              activePlayer = 0;
              gameActive = true;
              Arrays.fill(gameState, 2);
              for (int i = 0; i < gameBoard.getChildCount(); ++i) {
                  ImageView cell = (ImageView) gameBoard.getChildAt(i);
                  cell.setImageDrawable(null);
              }
              winnerTextView.setVisibility(View.GONE);
              winnerTextView.setText("");
          }
      }
      

      结果

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多