目标
在做这个游戏之前,我们先定一些小目标列出来,一个一个的解决,这样,一个小游戏就不知不觉的完成啦。我们的目标如下:
1. 游戏全屏,将图片拉伸成屏幕大小,并将其切成若干块。
2. 将拼图块随机打乱,并保证其能有解。
3. 在屏幕上留出一个空白块,当点空白块旁边的块,将这块移动到空白块。
4. 判断是否已经拼好。
实现目标
1.将图片拉伸成屏幕大小,并将其切成若干块。
想拉伸成屏幕大小,首先要知道屏幕的大小,Android获得屏幕大小的代码如下:
DisplayMetrics metrics =new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(metrics);//sdk17+
int screenWidth = metrics.widthPixels;//屏幕宽
int screenHeight = metrics.heightPixels;//屏幕高
将图片拉伸到屏幕大小
Bitmap back=Bitmap.createScaledBitmap(bitmap,
MainActivity.getScreenWidth(),
MainActivity.getScreenHeight(),
true);
将图片切成若干块
private final int COL=3;//列,默认3列
private final int ROW=3;//行,默认3行
int tileWidth=back.getWidth()/COL;//每一块的宽
int tileHeight=back.getHeight()/ROW;//每一块的高
Bitmap[] bitmapTiles =new Bitmap[COL*ROW];
int idx=0;
for(int i=0;i<ROW;i++)
{
for(int j=0;j<COL;j++)
{
bitmapTiles[idx++]=Bitmap.createBitmap(back,
j*tileWidth,
i*tileHeight,
tileWidth,tileHeight);
}
}
2. 将拼图块随机打乱,并保证其能有解。
这个问题应该是这个小游戏的核心了,有些人在做拼图的时候就随便乱摆,最后发现拼不回来,超级尴尬。要想打乱了还能拼回来,我们呢,就想到了模拟人打乱拼图的方法,就是将空白块与旁边的非空白块交换位置,与旁边哪个非空白块交换是随机的,然后将这个过程重复若干次,重复的次数也是随机的,这样一来,保证了图块的随机,又保证了能拼回来。在这里我们用数字0到N-1(N为块的数量)表示每一块,并用二维数组存储他们。