所谓“磨刀不误砍柴工”,我们先别急着用WPF把UI层给做好。当下的首要任务是先把这个项目里最难的一部分解决,之后我们基本上就可以开开心心地和WPF玩耍了。
我们目前要解决的问题就是:如何判断选中的两张图片是否可以被消除。
首先了解一下连连看的游戏规则:根据我以前玩过的连连看游戏(年代久远了),刚开始的简单级别是12X8的图片数量。选中的两张图片最多只能由三条直线连接起来,且连线中不能包含其它图片。
先贴贴我用C++写的代码,然后我再进行说明。(没错,就是用C++写的。很容易就能改成C#代码。至于我现在为什么是用C++实现的这部分代码,你猜。。。这份代码写得比较像ACM代码,不过我还是注意了可读性)
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
struct Vertex
{
int r;//row number
int c;//column number
Vertex* parent;
};//Data structure of grid
const int ROW=14;
const int COLUMN=10;
int visited[ROW][COLUMN];
int map[ROW][COLUMN];
bool BFS(Vertex* u,Vertex* v,Vertex*& t)
{
memset(visited,0,sizeof(visited));
queue<Vertex*> qu;
int i;
int direction[4][2]={
{-1,0},{
0,1},{
1,0},{
0,-1}};//Four directions of BFS
visited[u->r][u->c]=1;
qu.push(u);
while(!qu.empty())
{
Vertex* tmp=qu.front()