知道了上面的原理,可以在开始的时候让电脑自动产生打乱路径:设定初始是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";
}
|