| 
				 知道了上面的原理,可以在开始的时候让电脑自动产生打乱路径:设定初始是0区域(没有图片),所以从0开始随机的选择他周边(1,4)之一进行交换,如选择4 ,则下次从4的周围开始选择(0,5,8)之一,如选择5 ,则下次从5的周围选择(1,4,6,9)之一,依次n次,就打乱图片了,效果如图6。 
 
 
 
  
图(6)打乱效果
这里的n越大,图片就打乱了越严重,但是上面的方法在设计的时候要小心,因为里面有些打乱没有意义,假定在图4和图5中:1开始选择5,5接着又选择了1,这样第一次和第二次的交换合起来就是无用的,所以这里将之更改如下:如1选择了5 ,则下次5只能从(4,6,9)中选择,排除了上次选择5区域的1区域 ,如图7。 
| 
 01  | 
 15  | 
 22  | 
 33  |  
| 
 44  | 
 5-1  | 
 66  | 
 77  |  
| 
 88  | 
 99  | 
 1010  | 
 1111  |  
| 
 1212  | 
 1313  | 
 1414  | 
 1515  |   
图7 当1和5交换后,5就不能再和1交换 
当玩家每次交换图片格内的图片进行排序(只能将空白图格和其紧靠的交换)时,数组b里面的数据就变化了,此时判断下a数组和b数组的元素是否完全相同,如果相同,就表明图片已经还原了,拼图成功了。 
四、实现 
1.   设定游戏模式 
在玩游戏的时候根据自己的要求,可以选择四格,和十六格,也可以根据自己的实际能力选择游戏的难度:简单、中等困难,这里只写出了原理及部分代码,具体可查看源代码。 
public static  int modeselect= 16;        //定义选择的模式(16或者4)  默认情况下是16格 
public  static   string degree = "simple";//  标记游戏难度 
int grade = 15;                           //图片打乱次数                      
   //选择图片模式:为16个格子 
     private void sixteenselect_Click(object sender, EventArgs e) 
        { 
            if (!sixteenselect.Checked) 
            { 
                fourselect.Checked = false; 
                sixteenselect.Checked = true; 
            } 
            modeselect = 16;                                
   } 
  //选择图片模式:为四个格子 
        private void fourselect_Click(object sender, EventArgs e) 
        { 
            if (!fourselect.Checked) 
            { 
                fourselect.Checked = true; 
                sixteenselect.Checked = false; 
            } 
            modeselect = 4;                                     
 } 
     private void simple_Click(object sender, EventArgs e) //设置难度为简单 
        { 
            if (!simple.Checked) 
            { 
                simple.Checked = true; 
                middle.Checked = false; 
                hard.Checked = false; 
            } 
            if (modeselect == 4) 
            { 
                grade = 2;                              //设定图片序列打乱次数 
            } 
            else 
            { 
                grade = 15; 
            } 
            degree = "simple"; 
        } 
        private void middle_Click(object sender, EventArgs e) //设置难度为中等 
        { 
          if (!middle.Checked) 
            { 
                simple.Checked = false; 
                middle.Checked = true; 
                hard.Checked = false; 
            } 
            if (modeselect == 4) 
            { 
                grade = 3;                            //设定图片序列打乱次数 
            } 
            else 
            { 
                grade = 30; 
            } 
degree = "normal"; 
        } 
        private void hard_Click(object sender, EventArgs e) //设置难度为困难 
        { 
         f (!hard.Checked) 
            { 
                hard.Checked = true; 
                middle.Checked = false; 
                simple.Checked = false; 
            } 
            if (modeselect == 4)                 //设定图片序列打乱次数 
            { 
                grade = 4;  
            } 
            else 
            { 
                grade = 50;     
            } 
degree = "hard"; 
  } 			
				 |