用安卓写一个九宫格拼图游戏
时间: 2023-09-21 10:10:39 浏览: 43
好的,我可以给你提供一个简单的九宫格拼图游戏的实现代码。你可以在此基础上进行修改和优化。
首先,我们需要创建一个 `MainActivity` 类,并在其中创建一个 `GridView` 控件来展示拼图。然后,我们需要定义一个 `PuzzleAdapter` 类来管理拼图的数据和显示。最后,在 `onCreate` 方法中初始化游戏数据并设置 `PuzzleAdapter`。
下面是 `MainActivity` 的代码:
```java
public class MainActivity extends AppCompatActivity {
private static final int COLUMN_COUNT = 3; // 九宫格列数
private static final int PUZZLE_COUNT = COLUMN_COUNT * COLUMN_COUNT; // 拼图块数
private GridView mGridView;
private PuzzleAdapter mAdapter;
private int[] mPuzzleData; // 拼图数据
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGridView = findViewById(R.id.grid_view);
mGridView.setNumColumns(COLUMN_COUNT);
// 初始化拼图数据
mPuzzleData = new int[PUZZLE_COUNT];
for (int i = 0; i < PUZZLE_COUNT; i++) {
mPuzzleData[i] = i;
}
shuffleArray(mPuzzleData); // 打乱拼图
mAdapter = new PuzzleAdapter(this, mPuzzleData);
mGridView.setAdapter(mAdapter);
}
// 打乱数组
private void shuffleArray(int[] array) {
Random random = new Random();
for (int i = array.length - 1; i > 0; i--) {
int j = random.nextInt(i + 1);
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
}
```
接下来,我们需要定义 `PuzzleAdapter` 类来管理拼图的数据和显示。在此类中,我们需要实现 `getView` 方法来创建每个拼图块的视图,并将其添加到 `GridView` 中。另外,我们还需要实现一些辅助方法来获取和设置拼图数据,并处理拼图块的移动。
下面是 `PuzzleAdapter` 的代码:
```java
public class PuzzleAdapter extends BaseAdapter {
private Context mContext;
private int[] mPuzzleData;
public PuzzleAdapter(Context context, int[] data) {
mContext = context;
mPuzzleData = data;
}
@Override
public int getCount() {
return mPuzzleData.length;
}
@Override
public Object getItem(int position) {
return mPuzzleData[position];
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView imageView;
if (convertView == null) {
imageView = new ImageView(mContext);
} else {
imageView = (ImageView) convertView;
}
// 获取拼图块的图片资源ID
int imageResId = getImageResId(mPuzzleData[position]);
imageView.setImageResource(imageResId);
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setLayoutParams(new GridView.LayoutParams(
parent.getWidth() / MainActivity.COLUMN_COUNT,
parent.getWidth() / MainActivity.COLUMN_COUNT));
return imageView;
}
// 获取拼图块的图片资源ID
private int getImageResId(int puzzleValue) {
switch (puzzleValue) {
case 0:
return R.drawable.puzzle_1;
case 1:
return R.drawable.puzzle_2;
case 2:
return R.drawable.puzzle_3;
case 3:
return R.drawable.puzzle_4;
case 4:
return R.drawable.puzzle_5;
case 5:
return R.drawable.puzzle_6;
case 6:
return R.drawable.puzzle_7;
case 7:
return R.drawable.puzzle_8;
case 8:
return R.drawable.puzzle_blank;
default:
return 0;
}
}
// 判断拼图块是否为空块
public boolean isBlank(int position) {
return mPuzzleData[position] == 8;
}
// 获取空块的位置
public int getBlankPosition() {
for (int i = 0; i < mPuzzleData.length; i++) {
if (isBlank(i)) {
return i;
}
}
return -1;
}
// 判断拼图块是否可以移动
public boolean canMove(int position) {
int blankPosition = getBlankPosition();
int row = position / MainActivity.COLUMN_COUNT;
int col = position % MainActivity.COLUMN_COUNT;
int blankRow = blankPosition / MainActivity.COLUMN_COUNT;
int blankCol = blankPosition % MainActivity.COLUMN_COUNT;
return (row == blankRow && Math.abs(col - blankCol) == 1)
|| (col == blankCol && Math.abs(row - blankRow) == 1);
}
// 移动拼图块
public void move(int position) {
int blankPosition = getBlankPosition();
int temp = mPuzzleData[position];
mPuzzleData[position] = mPuzzleData[blankPosition];
mPuzzleData[blankPosition] = temp;
notifyDataSetChanged();
}
}
```
最后,我们需要在 `res` 目录下创建布局文件和图片资源文件。
首先是 `activity_main.xml`,它包含一个 `GridView` 控件:
```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:gravity="center"
android:orientation="vertical">
<GridView
android:id="@+id/grid_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:horizontalSpacing="1dp"
android:verticalSpacing="1dp"
android:numColumns="3"
android:stretchMode="columnWidth" />
</LinearLayout>
```
接下来是拼图块的图片资源文件,我们需要在 `drawable` 目录下创建以下文件:
- `puzzle_1.png`
- `puzzle_2.png`
- `puzzle_3.png`
- `puzzle_4.png`
- `puzzle_5.png`
- `puzzle_6.png`
- `puzzle_7.png`
- `puzzle_8.png`
- `puzzle_blank.png`
这些图片可以自行搜索或制作。
好了,现在你就可以运行你的九宫格拼图游戏了!