今天看Android,看到一个开源库android-FlipView,然后看着看着就绕到了拼图游戏上,现在我打算写一个简单的拼图游戏。这将是我第二个连载的系列文章,今天是第一天,简单的用java命令行模拟一下拼图游戏的实现。代码:
package com.wly.algorithmproblem; import java.util.Scanner; /** * 拼图游戏的简单模拟 * @author wly * */ public class PicGame { private static int COLUMN = 4; private static int[][] elems = new int[COLUMN][COLUMN]; public static void main(String[] args) { int elemsNum = elems.length*elems.length-1; for(int i=0;i<elems.length;i++) { for(int j=0;j<elems[0].length;j++) { elems[i][j] = i*elems.length + j; } } //1.生成随机数据,随机的两两交换 for(int i=0;i<elems.length;i++) { for(int j=0;j<elems[0].length;j++) { int random = (int)(Math.random() * elemsNum); exchangeElems(elems,i,j,random/elems.length,random%elems.length); } } printMatrix(elems); while(true) { System.out.print("输入x和y:"); Scanner scanner = new Scanner(System.in); int x = scanner.nextInt(); int y = scanner.nextInt(); move(x, y); printMatrix(elems); } } public static void move(int line,int column) { //检查参数合法性 if(line < 0 || line > (elems.length-1) || column < 0 || column > (elems.length -1)) { System.out.println("输入数据有误,不再有效范围内!"); return; } if(line > 0) { //上 if(elems[line-1][column] == 0) { exchangeElems(elems, line, column, line-1, column); return; } } if(line < (elems.length-1)) { //下 if(elems[line+1][column] == 0) { exchangeElems(elems, line, column, line+1, column); return; } } if(column > 0) { //左 if(elems[line][column-1] == 0) { exchangeElems(elems, line, column, line, column-1); return; } } if(column < (elems.length-1)) { //右 if(elems[line][column+1] == 0) { exchangeElems(elems, line, column, line, column+1); return; } } System.out.println("不能移动当前元素"); return; } /** * 交换二维数组中相邻的两个元素 * @param array * @param x1 * @param y1 * @param x2 * @param y2 */ private static void exchangeElems(int[][] array,int x1,int y1,int x2,int y2) { int temp = array[x1][y1]; array[x1][y1] = array[x2][y2]; array[x2][y2] = temp; } /** * 打印二维矩阵 * @param matrix */ private static void printMatrix(int[][] matrix) { for(int i=0;i<matrix.length;i++) { for(int j=0;j<matrix[0].length;j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } } }
运行效果:
14 8 5 13 10 6 1 7 15 0 11 12 4 3 9 2 输入x和y:2 0 14 8 5 13 10 6 1 7 0 15 11 12 4 3 9 2 输入x和y:1 0 14 8 5 13 0 6 1 7 10 15 11 12 4 3 9 2 输入x和y:0 0 0 8 5 13 14 6 1 7 10 15 11 12 4 3 9 2 输入x和y:
东西很简单,没什么好说的,仅仅想做一个简单的开篇。计划用5天时间讨论一下拼图游戏的算法问题。之后再用5天左右的时间,实现一下Android版的拼图游戏。敬请期待!
注意:这里随机生成的谜题仅仅是简单的模拟矩阵的样子,实际上这样生成的谜题大约有%50左右是无解的,这将在下一篇博客中加以介绍。
O啦~~~
转载请保留出处:http://blog.csdn.net/u011638883/article/details/17099617
谢谢!!