Android studio 扫雷代码
时间: 2023-12-05 14:06:30 浏览: 44
好的,以下是一个简单的Android Studio扫雷游戏的代码示例,供您参考:
1. 在布局文件中添加一个GridView来展示扫雷区域:
```xml
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="10"
android:verticalSpacing="1dp"
android:horizontalSpacing="1dp"
android:stretchMode="columnWidth"
android:gravity="center"
android:background="@color/colorPrimary" />
```
2. 在Activity中初始化GridView,并为其设置适配器:
```java
public class MainActivity extends AppCompatActivity {
private GridView mGridView;
private MinesweeperAdapter mAdapter;
private int[][] mBoard;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGridView = findViewById(R.id.grid_view);
mBoard = generateBoard(10, 10, 10); // 生成10行10列,10个地雷的扫雷区域
mAdapter = new MinesweeperAdapter(this, mBoard);
mGridView.setAdapter(mAdapter);
}
// 生成扫雷区域
private int[][] generateBoard(int rows, int cols, int mines) {
int[][] board = new int[rows][cols];
// 先将所有格子标记为-1,表示未揭开
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
board[i][j] = -1;
}
}
// 随机生成地雷位置
Random random = new Random();
int count = 0;
while (count < mines) {
int row = random.nextInt(rows);
int col = random.nextInt(cols);
if (board[row][col] != -2) {
board[row][col] = -2;
count++;
}
}
return board;
}
// 点击GridView中的一个格子时触发
public void onCellClicked(int row, int col) {
int value = mBoard[row][col];
if (value == -2) {
// 点中了地雷,游戏结束
mAdapter.showAllCells();
Toast.makeText(this, "Game Over", Toast.LENGTH_SHORT).show();
} else {
// 计算周围地雷数量
int count = 0;
for (int i = row - 1; i <= row + 1; i++) {
for (int j = col - 1; j <= col + 1; j++) {
if (i >= 0 && i < mBoard.length && j >= 0 && j < mBoard[0].length && mBoard[i][j] == -2) {
count++;
}
}
}
mBoard[row][col] = count;
mAdapter.notifyDataSetChanged();
}
}
}
```
3. 实现适配器类来绑定GridView中的每个格子:
```java
public class MinesweeperAdapter extends BaseAdapter {
private Context mContext;
private int[][] mBoard;
private boolean[][] mIsShown;
public MinesweeperAdapter(Context context, int[][] board) {
mContext = context;
mBoard = board;
mIsShown = new boolean[board.length][board[0].length];
}
@Override
public int getCount() {
return mBoard.length * mBoard[0].length;
}
@Override
public Object getItem(int position) {
int row = position / mBoard[0].length;
int col = position % mBoard[0].length;
return mBoard[row][col];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
int row = position / mBoard[0].length;
int col = position % mBoard[0].length;
TextView textView;
if (convertView == null) {
textView = new TextView(mContext);
textView.setLayoutParams(new GridView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
textView.setGravity(Gravity.CENTER);
textView.setBackgroundColor(Color.WHITE);
} else {
textView = (TextView) convertView;
}
int value = mBoard[row][col];
if (mIsShown[row][col]) {
if (value == -2) {
// 地雷
textView.setText("*");
} else {
// 周围地雷数量
textView.setText(String.valueOf(value));
}
} else {
// 未揭开
textView.setText("");
}
return textView;
}
// 显示所有格子
public void showAllCells() {
for (int i = 0; i < mIsShown.length; i++) {
for (int j = 0; j < mIsShown[0].length; j++) {
mIsShown[i][j] = true;
}
}
notifyDataSetChanged();
}
}
```
通过以上代码,您可以实现一个简单的Android Studio扫雷游戏。当玩家点击GridView中的一个格子时,如果点中了地雷,则游戏结束并显示所有格子;如果未点中地雷,则显示周围地雷数量。