拼图游戏(控制台)

涉及的相关知识点有,一维数组的创建,一维数组的打乱排序,一维数组转化为二维数组,switch()的使用。

package demo;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Test3 {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int[] a = { 1, 2, 3, 4, 0, 6, 7, 8, 5 };
		int[] crr = { 1, 2, 3, 4, 0, 6, 7, 8, 5 };	//保留原始数据
		System.out.println(Arrays.toString(crr));
		System.out.println();
		
		Random r = new Random();
		int k = 0;
		
		 /**
		  *  打乱一维数组
		 **/ 
		 
		while (k < 20) {

			int i = r.nextInt(8);
			int j = r.nextInt(8);
			int t = a[i];
			a[i] = a[j];
			a[j] = t;
			k++;
		}
		System.out.println(Arrays.toString(a));
		System.out.println("--------------");
		int b[][] = new int[3][3];//定义二维数组
		/*
		 * 一维转二维
		 */
		for (int i = 0; i < a.length; i++) {
			b[i / 3][i % 3] = a[i];

		}
		for (int j = 0; j < b.length; j++) {
			System.out.println(Arrays.toString(b[j]));
		}

		System.out.println("------------------");
        /*
         * 尋找0
         */
		int indexX = 0;//二維行下標
		int indexY = 0;//二維列下標
		for (int i = 0; i < b.length; i++) {
			for (int j = 0; j < b[i].length; j++) {
				if (b[i][j] == 0) {
					indexX = i;
					indexY = j;
					break;
				}

			}
		}
		Scanner sc = new Scanner(System.in);
		while (true) {
			System.out.println("请输入w上移,s下移,a左移,d右移");
			String ch = sc.next();
			switch (ch) {
			case "w":
				if (indexX > 0) {
					int t = b[indexX][indexY];
					b[indexX][indexY] = b[indexX- 1][indexY ];
					b[indexX- 1][indexY ] = t;
					indexX--;
				}
				break;

			case "s":
				if (indexX < b.length - 1) {
					int t = b[indexX][indexY];
					b[indexX][indexY] = b[indexX+ 1][indexY ];
					b[indexX+ 1][indexY ] = t;
					indexX++;
				}

				break;
			case "a":
				if (indexY >0) {
					int t = b[indexX][indexY];
					b[indexX][indexY] = b[indexX][indexY - 1 ];
					b[indexX][indexY -1] = t;
					indexY--;
				}
				break;
			case "d":
				if (indexY < b.length -1) {
					int t = b[indexX][indexY];
					b[indexX][indexY] = b[indexX][indexY + 1 ];
					b[indexX][indexY + 1] = t;
					indexY++;
				}
				break;
			}
			for (int j = 0; j < b.length; j++) {
				System.out.println(Arrays.toString(b[j]));
			}
			/*
			 * 判斷是否拼圖成功
			 */
			int g = 0;//一維下標
			boolean flag = true;
			for(int i = 0 ; i < b.length && flag; i++){				
				for(int j = 0; j < b[i].length; j++){
					
					  if( b[i][j] != crr[g]){
						  flag = false;
						  //System.out.println(crr[g]);
						  System.out.println("拼图失败");
						  break;
					  }
					   g++;
				}
			}
			if(flag){
				System.out.println("拼图成功");
				break;
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值