(C/C++高手进来看)请教一个连连看的布局算法
最好能写成模板,生成的布局我可以自己做,如果没有就自动生成普通的布局也行!!!
[解决办法]
/** * @param m * 将要创建地图的行 * @param n * 将要创建地图的列 * @param type * 地图中不同图片种类的数量 * @return 返回一个二维的整型数组用于表示地图 * @param 注意: * @param 前两个参数至少要有一个偶数,为了连连看能够配对. * @param 不在这里添加参数m,n的奇偶校验是为了写成通用方法. */ public static byte[][] createMap(byte m, byte n, byte type) { byte[][] map = new byte[m][n]; for (byte i = 0; i < m; i++) { for (byte j = 0; j < n; j++) { map[i][j] = (byte) (j % type); } } return map; } /** * @param map * @param 函数功能:打乱地图 * @param x,y随机坐标 */ public static void swap(byte[][] map) { byte m = (byte) map.length; byte n = (byte) map[0].length; byte x, y;// 记录坐标 for (byte i = 0; i < m; i++) { for (byte j = 0; j < n; j++) { x = (byte) rand.nextInt(m); y = (byte) rand.nextInt(n); /** * 当 i==x && j==y 的时候,异或交换的结果是0,会丢失原数,所以要加个判断 * 当然也可以不用异或,再定义个变量来交换 */ if (i != x || j != y) { map[i][j] ^= map[x][y]; map[x][y] ^= map[i][j]; map[i][j] ^= map[x][y]; } } } }
[解决办法]
download.csdn.net/source/446854
代码+文档,参考一下
[解决办法]
每个坐标可以 用1bit表示 省空间
可以隔行 或 倾斜行 或 空缺
思路告诉你: 你计算布局的量RealNum 比如32 实际棋盘量FullSize 48
那么就对 一个 32大小的 棋子数组乱序 然后 依次放入 RealSize大小的布局中
简单快速