Android井字游戏
allway2 人气:0MainActivity.java
package com.mohit.tictactoe; import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.graphics.Color; import android.os.Bundle; import android.view.View; import android.widget.ImageView; import android.widget.TextView; public class MainActivity extends AppCompatActivity { char activePlayer = 'X'; char[] gameState = new char[9]; boolean gameActive = true; boolean isFull = false; int[][] winningPos = {{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6}}; ImageView[] images = new ImageView[9]; @SuppressLint("ResourceAsColor") public void onTap(View view) { ImageView img = (ImageView) view; int tappedImage = Integer.parseInt(img.getTag().toString()); if (gameState[tappedImage] == 0 && gameActive) { gameState[tappedImage] = activePlayer; if (activePlayer == 'O') { img.setImageResource(R.drawable.o); activePlayer = 'X'; TextView status = findViewById(R.id.status); status.setText("X's turn - Tap to play"); } else { img.setImageResource(R.drawable.x); activePlayer = 'O'; TextView status = findViewById(R.id.status); status.setText("O's turn - Tap to play"); } } images[0] = findViewById(R.id.imageView1); images[1] = findViewById(R.id.imageView2); images[2] = findViewById(R.id.imageView3); images[3] = findViewById(R.id.imageView4); images[4] = findViewById(R.id.imageView5); images[5] = findViewById(R.id.imageView6); images[6] = findViewById(R.id.imageView7); images[7] = findViewById(R.id.imageView8); images[8] = findViewById(R.id.imageView9); // Check if any player has won for (int i = 0 ; i < 8 ; i++) { if (gameState[winningPos[i][0]] != 0 && gameState[winningPos[i][0]] == gameState[winningPos[i][1]] && gameState[winningPos[i][0]] == gameState[winningPos[i][2]]) { TextView status = findViewById(R.id.status); status.setText(gameState[winningPos[i][0]] + " HAS WON THE GAME"); gameActive = false; for (int j = 0 ; j < 9 ; j++) { int tag = Integer.parseInt(images[j].getTag().toString()); if (tag == winningPos[i][0] || tag == winningPos[i][1] || tag == winningPos[i][2]) { images[j].setBackgroundColor(Color.RED); } } } } for (int j = 0 ; j < 9 ; j++) { if (gameState[j] != 0) { isFull = true; } else { isFull = false; break; } } if (isFull && gameActive) { TextView status = findViewById(R.id.status); status.setText("GAME DRAWN"); } } public void gameRestart(View view) { gameActive = true; activePlayer = 'X'; gameState = new char[9]; images[0] = findViewById(R.id.imageView1); images[1] = findViewById(R.id.imageView2); images[2] = findViewById(R.id.imageView3); images[3] = findViewById(R.id.imageView4); images[4] = findViewById(R.id.imageView5); images[5] = findViewById(R.id.imageView6); images[6] = findViewById(R.id.imageView7); images[7] = findViewById(R.id.imageView8); images[8] = findViewById(R.id.imageView9); for (int j = 0 ; j < 9 ; j++) { images[j].setImageResource(0); images[j].setBackgroundColor(0); } TextView status = findViewById(R.id.status); status.setText("X's turn - Tap to play"); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
activity_main.xml
<?xml version="1.0" encoding="utf-8"?> <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"> <ImageView android:id="@+id/imageView0" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:background="@color/white" app:layout_constraintBottom_toBottomOf="@+id/button2" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" app:srcCompat="@drawable/grid" /> <TextView android:id="@+id/textView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="23dp" android:fontFamily="serif" android:text="@string/heading" android:textSize="34sp" android:textStyle="bold" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:id="@+id/linearLayout" android:layout_width="357dp" android:layout_height="362dp" android:orientation="vertical" app:layout_constraintBottom_toBottomOf="@+id/imageView0" app:layout_constraintEnd_toEndOf="@+id/imageView0" app:layout_constraintStart_toStartOf="@+id/imageView0" app:layout_constraintTop_toTopOf="@+id/imageView0"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="horizontal"> <ImageView android:id="@+id/imageView1" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="0" /> <ImageView android:id="@+id/imageView2" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="1" /> <ImageView android:id="@+id/imageView3" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="2" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="horizontal"> <ImageView android:id="@+id/imageView4" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="3" /> <ImageView android:id="@+id/imageView5" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="4" /> <ImageView android:id="@+id/imageView6" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="5" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:orientation="horizontal"> <ImageView android:id="@+id/imageView7" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="6" /> <ImageView android:id="@+id/imageView8" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="7" /> <ImageView android:id="@+id/imageView9" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:onClick="onTap" android:padding="20sp" android:tag="8" /> </LinearLayout> </LinearLayout> <TextView android:id="@+id/status" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:fontFamily="serif" android:text="X's turn - Tap to play" android:textSize="22sp" android:textStyle="bold" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/imageView0" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginBottom="16dp" android:onClick="gameRestart" android:text="RESTART THE GAME" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
加载全部内容