类型:转载 责任编辑:asp.net 日期:2007/05/23
热门软件下载:
需要选择一对相同的图案连线,但此连线是在避开其他图案后,呈现的路径以不超过两次转弯,如符合规定则消除此对图案而得分。每一局里玩家需要在规定的时间内消除所有的图案,当完成任务后,方能进行下一关。
网友回答:
首先申明本人没有实际写过,只是刚到贴子,发表一下自己的意见:
1。依据传入的参数生成若干个 Button ,一般是根据菜单上的级别来生成
2。在生成的时候,随机填充图片,填充分二次进行
2.1 根据随机数填充第一次,将本次已填充的图片记录下来,以便在进行第二次填充的时候配对
2.2 根据第一次填充记录的图片来,来进行第次填充
2.3 将每个 Button.Tag 记录下图片类型与坐标(图片+行+列 ---> 01R1C1)
3。上面生成完后,下面可以进行单击事件处理了
4。申明一个全局变量,记录每个第一次点击的坐标(A1),在第二次点击(A2)的时候清空
5。在得到A2的时候,首先要判断是否=A1,
6。判断转弯的情况,我要再考虑一下了。。。。。
< 大体上应该首先根据A2的Tag值,检查周边是否存在 >
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{ //在这里产生需要显示的图案
Graphics::TBitmap *Bitmap;
TRect RectSour, RectTarg;
int left,top,right,bottom;
for(int i=1;i<5;i++)
{
for(int j=1;j<4;j++)
{
left =60+i*40;
top = 10+j*40;
right = 100+i*40;
bottom = 50+j*40;
switch(a[j][i])
{
case 1 : //对应点的值为1时在这点所在位置用图案1,下面的2,3分别对应另2张图案
RectTarg = Rect(left,top,right, bottom);
Bitmap = new Graphics::TBitmap;
Bitmap->LoadFromFile("1.bmp");
RectSour = Rect(0,0,40,40);
Form1->Canvas->CopyRect(RectTarg, Bitmap->Canvas, RectSour);
Bitmap->Dormant();
Bitmap->FreeImage();
break;
case 2 :
RectTarg = Rect(left,top,right, bottom);
Bitmap = new Graphics::TBitmap;
Bitmap->LoadFromFile("2.bmp");
RectSour = Rect(0,0,39,39);
Form1->Canvas->CopyRect(RectTarg, Bitmap->Canvas, RectSour);
Bitmap->Dormant();
Bitmap->FreeImage();
break;
case 3 :
RectTarg = Rect(left,top,right, bottom);
Bitmap = new Graphics::TBitmap;
Bitmap->LoadFromFile("3.bmp");
RectSour = Rect(0,0,40,40);
Form1->Canvas->CopyRect(RectTarg, Bitmap->Canvas, RectSour);
Bitmap->Dormant();
Bitmap->FreeImage();
break;
}
}
}
}
路径的判断其实就是在一个矩阵中进行连接测试,象上面说的,找寻通路,并判断在找寻中是否超过两次转折,如果超过仍未到达则停止该路线。
在找寻中,当然要考虑实际情况进行有向性的探寻,即要两两相消的图案位置情况以及不超过两次转折的连线情况如下:
水平位置:
---------
| |
A O---------O B
| |
---------
垂直位置:
A
--O--
| | |
| | |
| | |
--O--
B
路线多一点的斜对位置:
---------
| |
O---------|
|---------|
|---------O
| |
---------
在这些连线方向上如果碰到表示有不为空的图案存在的标记则更换路线,否则,每前进一个空位就要进行更短连线距离的测试,因为效果是要找到最短的连线距离,这点在城市交通电子地图中有很好的应用体现。
如果自己专心想想并且写出来的话,这会是一个很愉快的事情,所以建议楼主不妨试试。