
--===============================================================================
-- ■ 随机地图()
--===============================================================================
function 随机地图 ()
	
	local 本次物体= 引擎:取随机整数(1,5)  -- 因为有5种连连看物件 

	local k = 0
	
	while k<2 do   -- 寻找到2个空位置 并且填充
		local 本次列 = 引擎:取随机整数(1,连连看列数)
		local 本次行 = 引擎:取随机整数(1,连连看行数)
		
		if( 物体组[本次列][本次行] ~= 1) then 
			物体组[本次列][本次行]  = 1       -- 1表示障碍
			标识组[本次列][本次行]  = 本次物体
			k = k + 1
		end 
	
	end 


end 




function connectAble(x1, y1, x2, y2) --检测两个在同一水平线或同一竖直线上的两个点(x1,y1),(x2,y2)之间是否(true/false)可以连接
	
	
	if (x1 == x2) then--如果在同一竖直线
	
		if (y1 > y2) then
			y1,y2=y2,y1
		end
		
		for n = y1, y2 do--从上向下逐个检测
			if (物体组[x1][n] > 0) then--如果有障碍
				return false;
			end
		end
		
		
		
	 else --否则(就是在同一水平线了^_^)
	 
		if (x1 > x2) then
			x1,x2=x2,x1
		end
		
		for  n = x1,x2  do--从左向右逐个检测
			
			if (物体组[n][y1] > 0) then--如果有障碍
				return false;
			end
			
		end
		
	end
	--如果能够经过上面的步骤没有 return false 的话就是没有障碍物(可以连接),所以:
	return true;
end





function getPoint(x1, y1, x2, y2)   --从(x1,y1)到(x2,y2)按连连看的游戏规则找一条合法的最短的路线
	local d = 10000;		--用来记录路程,因为下面要比较路程的长短,所以先给它一个很大的值,这样找到的第一条路总会比它短,经过比较就会替换掉它
	本次路径 = {};	--用来记录得到的路线的四个折点
	local x, y, temp =0,0,0
	
	物体组[x1][y1] = 0;
	物体组[x2][y2] = 0; -- 先把m1,m2所在的点的地图值置0,否则下面的检测会把它们当障碍物

	for  x = x1 - 1, 1,-1 do ----向左搜索
	
		if (connectAble(x1, y1, x, y1)) then					--如果第一条线段可以连接
			if (connectAble(x, y1, x, y2) and connectAble(x, y2, x2, y2)) then--如果剩下的两条也可以连接
				d = math.abs(x - x1) + math.abs(y2 - y1) + math.abs(x2 - x);--计算路程
				本次路径 = {
				o1={x=x1,y= y1},
				o2={x=x, y=y1}, 
				o3={x=x, y=y2}, 
				o4 ={x=x2, y=y2}
				};--记录折点
				
			
				break;--不用在这个方向继续搜了
			end
			
		else --否则就不用在这个方向继续搜了
			break;
		end
		
	end



	for x = x1 + 1, 连连看列数  do --向右搜索
		if (connectAble(x1, y1, x, y1)) then
			if (connectAble(x, y1, x, y2) and connectAble(x, y2, x2, y2)) then
				temp = math.abs(x - x1) + math.abs(y2 - y1) + math.abs(x2 - x);
				if (temp < d) then--比较路程
					d = temp;
					
					本次路径 = {
					o1={x=x1,y= y1},
					o2={x=x, y=y1}, 
					o3={x=x, y=y2}, 
					o4 ={x=x2, y=y2}
					};--记录折点
					
					
				end
				break;
			end
		 else 
			break;
		end
	end


	for y = y1 - 1,  1, -1  do--向上搜索
		if (connectAble(x1, y1, x1, y)) then
			if (connectAble(x1, y, x2, y) and connectAble(x2, y, x2, y2))then
				temp = math.abs(y - y1) + math.abs(x2 - x1) + math.abs(y2 - y);
				if (temp < d) then
					d = temp;

					本次路径 = {
					o1={x=x1,y= y1},
					o2={x=x1, y=y}, 
					o3={x=x2, y=y}, 
					o4 ={x=x2, y=y2}
					};--记录折点
					
					
				end
				break;
			end
		 else 
			break;
		end
	end
	
	
	for y = y1 + 1,  连连看行数 do--向下搜索
		if (connectAble(x1, y1, x1, y))then
			if (connectAble(x1, y, x2, y) and connectAble(x2, y, x2, y2)) then
				temp = math.abs(y - y1) + math.abs(x2 - x1) + math.abs(y2 - y);
				if (temp < d) then
					d = temp;

					
					本次路径 = {
					o1={x=x1,y= y1},
					o2={x=x1, y=y}, 
					o3={x=x2, y=y}, 
					o4 ={x=x2, y=y2}
					};--记录折点	
					
					
				end
				break;
			end
		 else 
			break;
		end
	end


	物体组[x1][y1] = 1;
	物体组[x2][y2] = 1; -- 把置0的地图值恢复


end 





--=============================================================================--
-- ■ 画格子
--=============================================================================--

function 画格子(起始位置x,起始位置y,格子行数,格子列数,格子宽高,格子颜色)
	
	for i = 1 , 格子列数 + 1 do
	
		引擎:画线(
		起始位置x + (i - 1) * 格子宽高 ,
		起始位置y  ,
		起始位置x + (i - 1) * 格子宽高 ,
		起始位置y + 格子行数 *  格子宽高,
		格子颜色)  
		
		
	end
   
	for j = 1 , 格子行数 + 1 do
	
		引擎:画线(
		起始位置x ,
		起始位置y + (j - 1) * 格子宽高 ,
		起始位置x + 格子列数 *  格子宽高 ,
		起始位置y + (j - 1) * 格子宽高 ,
		格子颜色)
		

	end

end