Java::拼图小游戏::

思路:
1,生成一个拼图棋盘
2,准备一个正确的数组格式,一个给用户拼的数组
3,每次移动要看用户是否拼完

/**
 * FileName: Puzzle
 * Author:   86186
 * Date:     2022/3/22 12:23
 * Description: Puzzle
 * History:
 *           
package project;

import java.util.Random;
import java.util.Scanner;

/**
 * 〈一句话功能简述〉
* 〈Puzzle〉 * * @author Hacker * @create 2022/3/22 * @since 1.0.0 */
public class Puzzle { public static int level;//数组长度 public static int[][] resultArr; public static Scanner input = new Scanner(System.in); public static int x;//0的横坐标 public static int y;//0的纵坐标 public static int step;//记录用户移动的步数 public static boolean signs = true;//判断是否可以移动 public static void main(String[] args) { System.out.println("==拼图游戏=="); System.out.println("请输入难度: 1 简单 2 普通 3 困难"); level = input.nextInt(); level += 2; System.out.println("开始游戏"); int[][] pazzle = buildPuzzle();//给用户拼的数组 Random r = new Random(); char[] sign = {'w','s','a','d'}; //任意打乱 char[] fings = new char[20]; findZeor(pazzle); for(int i = 0;i < 20;i ++){ int temp = r.nextInt(4); char t = sign[temp]; // System.out.println(t); switch (t){ case 'w': signs = moverUp(pazzle); break; case 's': signs = moverDown(pazzle); break; case 'a': signs = shiftLeft(pazzle); break; case 'd': signs = shiftRight(pazzle); break; } if(signs){ if(t == 'a'){ fings[i] = 'd'; }else if(t == 'd'){ fings[i] = 'a'; }else if(t == 'w'){ fings[i] = 's'; }else{ fings[i] = 'w'; } } } show(resultArr); System.out.println("======================"); show(pazzle); while(true){ System.out.println("请选择: w 上移:s 下移:a 左移:d 右移"); String chocie = input.next(); switch (chocie){ case "w": signs = moverUp(pazzle); break; case "s": signs = moverDown(pazzle); break; case "a": signs = shiftLeft(pazzle); break; case "d": signs = shiftRight(pazzle); break; //以下俩个方式,用户是不知道的!!!!嘿嘿 case "chenqian"://一键完成 pazzle = resultArr; break; case "fings"://得到正确结果的步骤 for(int i = fings.length - 1;i >= 0;i --){ System.out.print(fings[i] + " "); } System.out.println(); break; } if(!signs){ System.out.println("不能移动!!!!!"); } step ++; show(pazzle); if(success(pazzle)){ System.out.println("恭喜你拼图完成!!!,你一共走了" + step + "步"); break; } } } //比较是否完成 public static boolean success(int[][] array){ for(int i = 0;i < array.length;i ++){ for(int j = 0;j < array[i].length;j ++){ if(resultArr[i][j] != array[i][j]){ return false; } } } return true; } //右移 public static boolean shiftRight(int[][] array){ if(y == 0){ return false; } int temp = array[x][y]; array[x][y] = array[x][y - 1]; array[x][y - 1] = temp; y --; return true; } //左移 public static boolean shiftLeft(int[][] array){ if(y == level - 1){ // System.out.println("不能移动"); return false; } int temp = array[x][y]; array[x][y] = array[x][y + 1]; array[x][y + 1] = temp; y ++; return true; } //下移 public static boolean moverDown(int[][] array){ if(x == 0){ // System.out.println("不能移动!!!"); return false; } int temp = array[x][y]; array[x][y] = array[x - 1][y]; array[x - 1][y] = temp; x --; return true; } //上移 public static boolean moverUp(int[][] array){ if(x == level - 1){ return false; } int temp = array[x][y]; array[x][y] = array[x + 1][y]; array[x + 1][y] = temp; x ++; return true; } //找零 public static void findZeor(int[][] pazzle){ for(int i = 0;i < pazzle.length;i ++){ for(int j = 0;j < pazzle[i].length;j ++){ if(pazzle[i][j] == 0){ x = i; y = j; return; } } } } //创建拼图 public static int[][] buildPuzzle(){ resultArr = oneToTwo(buildArr()); int[] t = buildArr(); //upSet(t); int[][] pazzle = oneToTwo(t); return pazzle; } //显示数组 public static void show(int[][] array){ for(int[] t : array){ for(int i : t){ System.out.print(i + "\t"); } System.out.println(); } } //数组的打乱 public static void upSet(int[] array){ Random r = new Random(); for(int i = 0;i < array.length - 2;i ++){ int index1 = r.nextInt(array.length - i - 1); int index2 = array.length - i - 1; int temp = array[index1]; array[index1] = array[index2]; array[index2] = temp; } } //一维数组转为二维数组 public static int[][] oneToTwo(int[] array){ int[][] buildArr = new int[level][level]; for(int i = 0;i < array.length;i ++){ buildArr[i / level][i % level] = array[i]; } return buildArr; } //创建一个一维数组 public static int[] buildArr(){ int[] newArr = new int[level * level]; for(int i = 0;i < newArr.length - 1;i ++){ newArr[i] = i + 1; } newArr[newArr.length - 1] = 0; return newArr; } }

你可能感兴趣的:(Java,java)