java二维数组实现数字拼图效果-pg电子游戏官网

热度:4℃ 发布时间:2022-01-24 00:45:13

二维数组实现数字拼图,供大家参考,具体内容如下

二维数组可以自己随意定义大小,通过方法判断来实现对所有的数字进行随机打乱,并可以通过移动来正确还原,并可以判断0(表示空格)是否可以移动,是否在范围内。

public static void main(string[] args) { scanner scanner = new scanner(system.in); int[][] arrays = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 0 } }; int sum = 1; string direction; bianli(arrays); daluanerweishuzu(arrays); system.out.println("========================================"); while (true) { bianli(arrays); if (isok(arrays)) { break; } sum ; try { thread.sleep(500); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } system.out.println("请输入移动方向(w 上、s 下、a 左、d 右)"); direction = scanner.next(); switch (direction) { case "w": case "w": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "上", arrays); break; case "s": case "s": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "下", arrays); break; case "a": case "a": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "左", arrays); break; case "d": case "d": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "右", arrays); break; default: system.out.println("非法输入,重新输入"); break; } } system.out.println("一共走了" sum "步"); system.out.println("挑战成功");}

判断当前坐标是否可以移动

/** * 判断当前坐标是否可以移动 * * @param arrays * @return 可以移动返回true */ public static boolean isyidong(int[][] arrays) { int returnx = returnx(arrays); int returny = returny(arrays); system.out.println(returnx ":" returny); if (returnx >= 0 && returnx 1 < arrays.length && returny >= 0 && returny 1 < arrays.length) { return true; } return false; }

获取当前0所在行的具体地址

// 获取0所在行的位置 public static int returnx(int[][] arrays) { for (int i = 0; i < arrays.length; i ) { for (int j = 0; j < arrays[i].length; j ) { if (0 == arrays[i][j]) { return i; } } } return -1; }

获取当前0所在列的具体地址

// 获取0所在列的位置 public static int returny(int[][] arrays) { for (int i = 0; i < arrays.length; i ) { for (int j = 0; j < arrays[i].length; j ) { if (0 == arrays[i][j]) { return j; } } } return -1; }

二维数组随机打乱,需要判断左上角、右上角、左下角、右下角、中间、上中、下种、左中、右中,那些方向可以移动,生成随机数来确定移动方向

// 二维数组随机打乱 public static void daluanerweishuzu(int[][] arrays) { for (int i = 0; i < arrays.length; i ) { for (int j = 0; j < arrays[i].length; j ) { // 左上 if (i == 0 && j == 0) { // 根据生成的随机数确定向右边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "下", arrays); } else { tihuanshuzuweizhi(i, j, "右", arrays); } } // 右上 if (i == 0 && j == arrays[0].length - 1) { // 根据生成的随机数确定向左边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "下", arrays); } else { tihuanshuzuweizhi(i, j, "左", arrays); } } // 左下 if (i == arrays.length - 1 && j == 0) { // 根据生成的随机数确定向左边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "上", arrays); } else { tihuanshuzuweizhi(i, j, "右", arrays); } } // 右下 if (i == arrays.length - 1 && j == arrays[i].length - 1) { // 根据生成的随机数确定向左边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "上", arrays); } else { tihuanshuzuweizhi(i, j, "左", arrays); } } // 上中 if (i == 0 && j > 0 && j < arrays[i].length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "右", arrays); break; case 1: tihuanshuzuweizhi(i, j, "下", arrays); break; case 2: tihuanshuzuweizhi(i, j, "左", arrays); break; default: break; } } // 左中 if (j == 0 && i > 0 && i < arrays.length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "右", arrays); break; case 2: tihuanshuzuweizhi(i, j, "下", arrays); break; default: break; } } // 下中 if (i == arrays.length - 1 && j > 0 && j < arrays[i].length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "右", arrays); break; case 2: tihuanshuzuweizhi(i, j, "左", arrays); break; default: break; } } // 右中 if (j == arrays[i].length - 1 && i > 0 && i < arrays[i].length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "左", arrays); break; case 2: tihuanshuzuweizhi(i, j, "下", arrays); break; default: break; } } if (i > 0 && j > 0 && i < arrays.length - 2 && j < arrays[i].length - 2) { switch (onetothree(4)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "右", arrays); break; case 2: tihuanshuzuweizhi(i, j, "下", arrays); break; case 3: tihuanshuzuweizhi(i, j, "左", arrays); break; default: break; } } } } }

该方法实现对0的位置和需要替换位置数据的替换,并对0范围进行验证,怕0出现数组下标越位。

/** * 根据输入的数据,对二维数组进行数据替换 * * @param i 高位坐标 * @param j 地位坐标 * @param direction 移动方向 * @param arrays 需要交换数据的数组 */ public static void tihuanshuzuweizhi(int i, int j, string direction, int[][] arrays) { int tem = -1; switch (direction) { case "上": if (i > 0) { tem = arrays[i][j]; arrays[i][j] = arrays[i - 1][j]; arrays[i - 1][j] = tem; } break; case "下": if (i < arrays.length - 1) { tem = arrays[i][j]; arrays[i][j] = arrays[i 1][j]; arrays[i 1][j] = tem; } break; case "左": if (j > 0) { tem = arrays[i][j]; arrays[i][j] = arrays[i][j - 1]; arrays[i][j - 1] = tem; } break; case "右": if (j < arrays.length - 1) { tem = arrays[i][j]; arrays[i][j] = arrays[i][j 1]; arrays[i][j 1] = tem; } break; default: break; } }

完整代码如下

import .util.random;import java.util.scanner;public class demo { public static void main(string[] args) { scanner scanner = new scanner(system.in); int[][] arrays = { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 0 } }; int sum = 1; string direction; bianli(arrays); daluanerweishuzu(arrays); system.out.println("========================================"); while (true) { bianli(arrays); if (isok(arrays)) { break; } sum ; try { thread.sleep(500); } catch (interruptedexception e) { // todo auto-generated catch block e.printstacktrace(); } system.out.println("请输入移动方向(w 上、s 下、a 左、d 右)"); direction = scanner.next(); switch (direction) { case "w": case "w": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "上", arrays); break; case "s": case "s": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "下", arrays); break; case "a": case "a": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "左", arrays); break; case "d": case "d": tihuanshuzuweizhi(returnx(arrays), returny(arrays), "右", arrays); break; default: system.out.println("非法输入,重新输入"); break; } } system.out.println("一共走了" sum "步"); system.out.println("挑战成功"); }// /**// * 判断当前坐标是否可以移动// * // * @param arrays// * @return 可以移动返回true// */// public static boolean isyidong(int[][] arrays) {// int returnx = returnx(arrays);// int returny = returny(arrays);// system.out.println(returnx ":" returny);// if (returnx >= 0 && returnx 1 < arrays.length && returny >= 0 && returny 1 < arrays.length) {// return true;// }// return false;// } /** * * @param arrays 需要验证的数据 * @return 成功返回true */ public static boolean isok(int[][] arrays) { int sum = 1; for (int i = 0; i < arrays.length; i ) { for (int j = 0; j < arrays.length; j ) { if (sum == 9) { sum = 0; } if (arrays[i][j] != sum) { return false; } sum ; } } return true; } // 获取0所在行的位置 public static int returnx(int[][] arrays) { for (int i = 0; i < arrays.length; i ) { for (int j = 0; j < arrays[i].length; j ) { if (0 == arrays[i][j]) { return i; } } } return -1; } // 获取0所在列的位置 public static int returny(int[][] arrays) { for (int i = 0; i < arrays.length; i ) { for (int j = 0; j < arrays[i].length; j ) { if (0 == arrays[i][j]) { return j; } } } return -1; } // 遍历二维数组 public static void bianli(int[][] arrays) { for (int[] is : arrays) { for (int is2 : is) { system.out.print(is2 "t"); } system.out.println(); } } // 二维数组随机打乱 public static void daluanerweishuzu(int[][] arrays) { for (int i = 0; i < arrays.length; i ) { for (int j = 0; j < arrays[i].length; j ) { // 左上 if (i == 0 && j == 0) { // 根据生成的随机数确定向右边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "下", arrays); } else { tihuanshuzuweizhi(i, j, "右", arrays); } } // 右上 if (i == 0 && j == arrays[0].length - 1) { // 根据生成的随机数确定向左边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "下", arrays); } else { tihuanshuzuweizhi(i, j, "左", arrays); } } // 左下 if (i == arrays.length - 1 && j == 0) { // 根据生成的随机数确定向左边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "上", arrays); } else { tihuanshuzuweizhi(i, j, "右", arrays); } } // 右下 if (i == arrays.length - 1 && j == arrays[i].length - 1) { // 根据生成的随机数确定向左边边移动还是向下移动 if (oushuorjishu()) { tihuanshuzuweizhi(i, j, "上", arrays); } else { tihuanshuzuweizhi(i, j, "左", arrays); } } // 上中 if (i == 0 && j > 0 && j < arrays[i].length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "右", arrays); break; case 1: tihuanshuzuweizhi(i, j, "下", arrays); break; case 2: tihuanshuzuweizhi(i, j, "左", arrays); break; default: break; } } // 左中 if (j == 0 && i > 0 && i < arrays.length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "右", arrays); break; case 2: tihuanshuzuweizhi(i, j, "下", arrays); break; default: break; } } // 下中 if (i == arrays.length - 1 && j > 0 && j < arrays[i].length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "右", arrays); break; case 2: tihuanshuzuweizhi(i, j, "左", arrays); break; default: break; } } // 右中 if (j == arrays[i].length - 1 && i > 0 && i < arrays[i].length - 1) { switch (onetothree(3)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "左", arrays); break; case 2: tihuanshuzuweizhi(i, j, "下", arrays); break; default: break; } } if (i > 0 && j > 0 && i < arrays.length - 2 && j < arrays[i].length - 2) { switch (onetothree(4)) { case 0: tihuanshuzuweizhi(i, j, "上", arrays); break; case 1: tihuanshuzuweizhi(i, j, "右", arrays); break; case 2: tihuanshuzuweizhi(i, j, "下", arrays); break; case 3: tihuanshuzuweizhi(i, j, "左", arrays); break; default: break; } } } } } /** * 判断是否是偶数 * * @return 偶数返回true */ public static boolean oushuorjishu() { return new random().nextint(1000) % 2 == 0 ? true : false; } /** * * @param n 需要模的值 * @return 返回0-(n-1)的值 */ public static int onetothree(int n) { return new random().nextint(1000) % n; } /** * 根据输入的数据,对二维数组进行数据替换 * * @param i 高位坐标 * @param j 地位坐标 * @param direction 移动方向 * @param arrays 需要交换数据的数组 */ public static void tihuanshuzuweizhi(int i, int j, string direction, int[][] arrays) { int tem = -1; switch (direction) { case "上": if (i > 0) { tem = arrays[i][j]; arrays[i][j] = arrays[i - 1][j]; arrays[i - 1][j] = tem; } break; case "下": if (i < arrays.length - 1) { tem = arrays[i][j]; arrays[i][j] = arrays[i 1][j]; arrays[i 1][j] = tem; } break; case "左": if (j > 0) { tem = arrays[i][j]; arrays[i][j] = arrays[i][j - 1]; arrays[i][j - 1] = tem; } break; case "右": if (j < arrays.length - 1) { tem = arrays[i][j]; arrays[i][j] = arrays[i][j 1]; arrays[i][j 1] = tem; } break; default: break; } }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持软科小院。

网友评论
评论
更多编程技术
  • 编程技术推荐
更多
最新软件下载
网站地图