连连看游戏设计与实现:优化路径算法探讨.pdfVIP

  • 0
  • 0
  • 约8.77千字
  • 约 8页
  • 2026-02-12 发布于北京
  • 举报

连连看游戏设计与实现:优化路径算法探讨.pdf

游戏之乐_1.14_连连看游戏设计

问题描述

◼生成游戏初始界面;

◼每次用户选择两个图形,如果图形满足一定条件(图形一样,且这

两个图形之间存在少于3个弯的路径),则两个图形就能够消掉;

◼判断游戏是否结束,如果所有图形全部消去,游戏结束;

◼判断死锁,当游戏玩家不可能再消去任意两个图像的时候,游戏

进入“死锁”状态,如下图所示,该局面中已经不存在两个相同

的相连的路径转弯数目小于3的情况。在整个游戏都死锁的

情况下,我们不终止游戏,而是随机打乱局面,打破“死锁”。

简化

把问题简化一下,只处理的东西。

我们把问题简化到如下图所示:初始化我们就用一个二维数组,

处理两个1之间是否有满足要求的连线:

➢只能从0经过;

➢在转弯数最少的情况下满足路径最短;

➢转弯数不大于3;

根据以上要求得出的有效路径为如下所示:

解决方法:

首先定义问题的类型,这是一个最优化问题,最优化问题的解决

方法有几类,大家可能马上会想到什么动态规划或者贪心,其实还有

法可以求最优化问题,即广度优先搜索。这是在解决图一类问

题时常要考虑到的。

这个算法很直观,就是在有限的转弯次数内不断构建出更大的路

径网络,看看能否“覆盖”到被连接的图形

思想就是:先从起点开始算起,看0次转弯能否达到终点,如果

没有达到就在0次转弯的基础上进行1次转弯,没有到终点,就进行

2次转弯,如果还是没有达到终点就说明起点到终点小于3次转弯的

情况走不通。

代码见源码1所示:

下面就是源码的一个大概介绍:

源码:

#includestdio.h

#defineINIT_VALUE0

#defineINF100

#defineM10

#defineN10

typedefstructpoint

{

charx;

chary;

}POINT;

typedefstructMAP

{

charvalue;//0或者1

POINTfrom;//上一个点时哪个点

intdistance_to_start;//到起点的距离

charcorn_times;//拐弯次数

}MAP;

voidInit_Map(MAPnmap[][N],charmap[][N]);

charCorn(MAPnmap[][N],POINTstart,POINTend,charcorn);

charIsOk(charmap[][N],POINTstart,POINTend);

intmain(void)

{

charmap[M][N]=

{{1,0,0,0},{0,1,1,1},{0,1,0,0},{0,1,1,0},{0,0,0,1},{1,0,0,1},{0,1,0,1}};

POINTstart,end;

start.x=1;

start.y=2;

end.x=4;

end.y=3;

if(!IsOk(map,start,end))

{

printf(没有找到路!!!\n);

}

return0;

}

charIsOk(charmap[][N],POINTstart,POINTend)

{

chari,j,temp;

charflag=0;

POINTtemp_point;

MAPnmap[M][N];

Init_Map(nmap,map);

文档评论(0)

1亿VIP精品文档

相关文档