|
一个连连看游戏的通路检测算法(1)
在看了一篇关于连连看通路检测算发的启发下篇写的,列出代码如下:
// 连连看通路检测算法 //#include <iostream> //using namespace std; #include <stdio.h> int main () { // 地图设置 short mapX = 6, mapY = 5; // (要改进)横纵参数应该可以设置 short map[5][6] = {0, 0, 0, 0, 0, 0, 0, 1, 3, 2, 3, 0, 0, 2, 2, 1, 2, 0, 0, 1, 3, 1, 3, 0, 0, 0, 0, 0, 0, 0}; // 设置选中坐标 // (要改进)要检测位置是否相同,值是否相同 short Set1X = 4, Set1Y = 1, Set2X = 2, Set2Y = 3; // 处理过程 // 纵向处理 // 缓存初始 // (要改进)缓存长度应该可以设置 short Set1BufY[6][2] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; short Set2BufY[6][2] ={0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // 基点放入缓存 Set1BufY[0][0] = Set1X; Set1BufY[0][1] = Set1Y; Set2BufY[0][0] = Set2X; Set2BufY[0][1] = Set2Y; // 纵向检测:基点1以上 short nBufY = 1; for (short TmpY = Set1Y - 1; TmpY >= 0; --TmpY) { if (map[TmpY][Set1X] == 0) { Set1BufY[nBufY][0] = Set1X; Set1BufY[nBufY][1] = TmpY; ++nBufY; } else { break; } } // 纵向检测:基点1以下 for (short TmpY = Set1Y + 1; TmpY < mapY; ++TmpY) { if (map[TmpY][Set1X] == 0) { Set1BufY[nBufY][0] = Set1X; Set1BufY[nBufY][1] = TmpY; ++nBufY; } else { break; } } Set1BufY[nBufY][0] = 0; Set1BufY[nBufY][1] = 0; // 纵向检测:基点2以上 nBufY = 1;
|