实现效果如图10、图11所示。
图10 拼图成功
图11 玩家排名
五、图片自动排序
其原理很简单,主要分为以下几个阶段:第一,记录下图片打乱前生成的打乱路径。第二,记录玩家移动图片的轨迹。第三,根据记录的数据逆序交换图片。经过上面的三个步骤将图片还原到起始状态了。在还原的过程中,主要的是为了让玩家了解第一阶段的路径还原,所以在逆序第二阶段的数据时速度较快(主要是恢复玩家已经交换的图片)。具体的代码:
int[] copychange = new int[200];//最多纪录200个步骤 记录了用户回溯的轨迹
private void timer1_Tick(object sender, EventArgs e) //回溯图片交换轨迹
{
if (c > 0 ) //c中主要记录了第一阶段和第二阶段交换图片的次数
{
label1.Text = "正在回溯用户的交换,还有" + (c - grade).ToString() + "步";
if (c < grade ) //表明到了图片交换的第一阶段
{
label1.Text = "正在回溯电脑的打乱顺序,还有" + (c-1).ToString() + "步";
autoorderpicture.Interval = 700; //到了第一阶段 将图片交换周期变为 700毫秒
}
autochange(c); //根据数组里面的记录回溯(逆交换),c大于grade的时候,主要回溯用户的交换轨迹(回溯第二阶段的数据)
}
else
{
label1.Text = "图片还原成功";
autoorderpicture.Enabled = false;
enbalepicture();
}
c=c-1;
}
//交换图片 实现图片的逆交换 (自动排序)
public void autochange(int i)
{
picturebox[copychange[i]].Image = picturebox[copychange[i - 1]].Image;
picturebox[copychange[i - 1]].Image = null;
}
实现效果如图12:
图12自动排序效果
六、总结
本软件采用两个数组,很简单地解决了拼图成功判断问题。理解拼图游戏中图片的运动规律,简易地解决打乱轨迹问题,本软件其实可以完全由一个数组解决拼图成功判断问题,不知道读者有没有发现。该软件还有很多的地方可以改进:自动拼图的功能不够灵活(虽然本文的方法能够确保自动排序成功)等,另外还可以加入玩家拼图步数的记录(步数越少越厉害)。
|