用Android Studio做一个超好玩的拼图游戏( 六 )

< 20; j++) {//随机生成第一个角标//Math.random()产生的随机数为0~1之间的小数 此处说的0~1是包含左不包含右,即包含0不包含1//Math.random()的值域为[0,1),然后*8就是[0,8),再int取整最终值域为{0,1,2,3,4,5,,6,7}rand1 = (int)(Math.random()*(imageIndex.length-1));//第二次随机生成的角标,不能和第一次随机生成的角标相同,如果相同,就不方便交换了do {rand2 = (int)(Math.random()*(imageIndex.length-1));//判断第一次和第二次生成的角标是否相同,不同则break立刻跳出循环,执行swap交换if (rand1!=rand2) {break;}//若第二次生成的与第一次相同,则重新进入do-while循环生成rand2}while (true);swap(rand1,rand2);}
这里的swap方法很简单,就是交换两个数的值,只不过这里参数是数组的下标:
//交换数组指定角标(0-7这八个自然数)上的数据private void swap(int rand1, int rand2) {int temp = imageIndex[rand1];imageIndex[rand1] = imageIndex[rand2];imageIndex[rand2] = temp;}
这里有个整个游戏的一个核心点:我们打乱的拼图下标是{0,1,2,3,4,5,6,7}这八个,第九张拼图的下标是不参与打乱的,有同学问为什么?是因为第九张图片是不显示出来的,而且不会参与到拼图中,所以我们是将第九个图片按钮就设置成第九张图片,然后 。
最后我们将每个图片按钮设置图片,这时候 [i]就是被打乱的下标,有可能是这样的顺序:{2,6,5,4,1,7,0,3,8},也有可能是这样的顺序{1,3,0,5,2,7,4,6,8}等等,不管怎么样,[8]一直是8,上面解释过 。代码如下:
//ib00是绑定的第一块图片按钮,设置图片资源,//imageIndex[i]就是被打乱的下标,然后image[x]就表示对应下标为x的图片的idib00.setImageResource(image[imageIndex[0]]);ib01.setImageResource(image[imageIndex[1]]);ib02.setImageResource(image[imageIndex[2]]);ib10.setImageResource(image[imageIndex[3]]);ib11.setImageResource(image[imageIndex[4]]);ib12.setImageResource(image[imageIndex[5]]);ib20.setImageResource(image[imageIndex[6]]);ib21.setImageResource(image[imageIndex[7]]);ib22.setImageResource(image[imageIndex[8]]);
综上,()的整体逻辑代码如下:
//随机打乱数组当中元素,以不规则的形式进行图片显示private void disruptRandom() {//给下标数组每个元素赋值,下标是i,值就为ifor (int i = 0; i < imageIndex.length; i++) {imageIndex[i] = i;}//规定20次,随机选择两个角标对应的值进行交换int rand1,rand2;for (int j = 0; j < 20; j++) {//随机生成第一个角标//Math.random()产生的随机数为0~1之间的小数 此处说的0~1是包含左不包含右,即包含0不包含1//Math.random()的值域为[0,1),然后*8就是[0,8),再int取整最终值域为{0,1,2,3,4,5,,6,7}rand1 = (int)(Math.random()*(imageIndex.length-1));//第二次随机生成的角标,不能和第一次随机生成的角标相同,如果相同,就不方便交换了do {rand2 = (int)(Math.random()*(imageIndex.length-1));//判断第一次和第二次生成的角标是否相同,不同则break立刻跳出循环,执行swap交换if (rand1!=rand2) {break;}//若第二次生成的与第一次相同,则重新进入do-while循环生成rand2}while (true);//交换两个角标上对应的值swap(rand1,rand2);}//随机排列到指定的控件上//ib00是绑定的第一块图片按钮,设置图片资源,imageIndex[i]就是被打乱的图片数组下标,然后image[x]就表示对应下标为x的图片的idib00.setImageResource(image[imageIndex[0]]);ib01.setImageResource(image[imageIndex[1]]);ib02.setImageResource(image[imageIndex[2]]);ib10.setImageResource(image[imageIndex[3]]);ib11.setImageResource(image[imageIndex[4]]);ib12.setImageResource(image[imageIndex[5]]);ib20.setImageResource(image[imageIndex[6]]);ib21.setImageResource(image[imageIndex[7]]);ib22.setImageResource(image[imageIndex[8]]);}