小言_互联网的博客

2048简易版

301人阅读  评论(0)

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

public class myGame {
static char[][] panel =new char[6][6];
static Random ran = new Random();
static boolean hasMoved = false;
static int score = 0;
public static void main(String[] args){
init(); //初始化
show();
play();
}

public static void play(){
	Scanner con = new Scanner(System.in);
	String userStr;
	//不断地
	while(true){
		
		//用户给方向
		System.out.println("请输入方向(W/A/S/D 表示上/左/下/右)");
		while(true){
			userStr = con.next();
			if(userStr != null && userStr.length() == 1){
				break;
			}
			System.out.println("请按套路出牌.W/A/S/D 表示上/左/下/右!");
		}
		userStr = userStr.toUpperCase(); //将用户 的输入转为大写字母
		char dir = userStr.charAt(0);
		switch(dir){
		case 'W': toUpMove();break;
		case 'A': toLeftMove();break;
		case 'S': toDownMove();break;
		case 'D': toRightMove();break;
		default:System.out.println("请按套路出牌.W/A/S/D 表示上/左/下/右!");
		}
		if(hasMoved){
			random();	
			hasMoved = false;  //为了下次判定
		}else{
			System.out.println("不是路到了尽头,而是该转弯了");
		}
		show();
		System.out.println("分数为:"+score);
		if(!hasFull() && !hasSame()){
			break;
		}
	}
	System.out.println("Game Over!!!");
	//按照用户给定方向移动
}

public static boolean hasSame() {
	for (int i = 1; i < panel.length-1; i++) {
		for (int j = 1; j < panel[i].length-1; j++) {
			if(panel[i][j] != panel[i+1][j] || panel[i][j]!=panel[i][j+1]){
				hasMoved = true;
				break;
			}
		}
	}
	return hasMoved;
}

public static boolean hasFull() {
	for (int i = 1; i < panel.length-1; i++) {
		for (int j = 1; j < panel[i].length-1; j++) {
			if(panel[i][j] ==0){
				hasMoved = true;
				break;
			}
		}
	}
	return hasMoved;
}

public static void toUpMove(){
	//移动
	for(int j=1; j<panel[0].length-1; j++){	
		for(int i=1; i<panel.length-2; i++){
			for(int k =i+1; k<panel.length-1; k++){
				if(panel[i][j]==0 && panel[k][j]!= 0){
					panel[i][j] = panel[k][j];
					panel[k][j] = 0;
					hasMoved = true;
				}
			}
		}
	}
	//合并
	for(int j=1; j<panel[0].length-1; j++ ){
		for(int i=1; i<panel.length-2; i++){
			if(panel[i][j] == panel[i+1][j] && panel[i][j]!=0){
				panel[i][j] +=1;
				panel[i+1][j] = 0;
				score += Math.pow(2, panel[i][j]-'a'+1);
				hasMoved = true;
				for(int k = i+1; k<panel.length-2; k++){
					panel[k][j] = panel[k+1][j];
					panel[k+1][j] = 0;
				}
			}
		}
	}
}
public static void toLeftMove(){
	//移动
	for(int i=1; i<panel.length-1; i++){	
		for(int j=1; j<panel[i].length-2; j++){
			for(int k =j+1; k<panel[i].length-1; k++){
				if(panel[i][j]==0 && panel[i][k]!= 0){
					panel[i][j] = panel[i][k];
					panel[i][k] = 0;
					
					hasMoved = true;
				}
			}
		}
	}
	//合并
	for(int i=1; i<panel.length-1; i++ ){
		for(int j=1; j<panel[i].length-2; j++){
			if(panel[i][j] == panel[i][j+1] && panel[i][j]!=0){
				panel[i][j] +=1;
				panel[i][j+1] = 0;
				score += Math.pow(2, panel[i][j]-'a'+1);
				hasMoved = true;
				for(int k = j+1; k<panel[i].length-2; k++){
					panel[i][k] = panel[i][k+1];
					panel[i][k+1] = 0;
				}
			}
		}
	}
}
public static void toDownMove(){
	for(int j=1; j<panel[0].length-1; j++){	
		for(int i=panel.length-2; i>1; i--){
			for(int k =i-1; k>0; k--){
				if(panel[i][j]==0 && panel[k][j]!= 0){
					panel[i][j] = panel[k][j];
					panel[k][j] = 0;
					
					hasMoved = true;
				}
			}
		}
	}
	//合并
	for(int j=1; j<panel[0].length-1; j++ ){
		for(int i=panel.length-2; i>1; i--){
			if(panel[i][j] == panel[i-1][j] && panel[i][j]!=0){
				panel[i][j] +=1;
				panel[i-1][j] = 0;
				score += Math.pow(2, panel[i][j]-'a'+1);
				hasMoved = true;
				for(int k = i-1; k>1; k--){
					panel[k][j] = panel[k-1][j];
					panel[k-1][j] = 0;
				}
			}
		}
	}
}
public static void toRightMove(){
	for(int i=1; i<panel.length-1; i++){	
		for(int j=panel[i].length-2; j>1; j--){
			for(int k =j-1; k>0; k--){
				if(panel[i][j]==0 && panel[i][k]!= 0){
					panel[i][j] = panel[i][k];
					panel[i][k] = 0;
					
					hasMoved = true;
				}
			}
		}
	}
	//合并
	for(int i=1; i<panel.length-1; i++ ){
		for(int j=panel[i].length-2; j>1; j--){
			if(panel[i][j] == panel[i][j-1] && panel[i][j]!=0){
				panel[i][j] +=1;
				panel[i][j-1] = 0;
				score += Math.pow(2, panel[i][j]-'a'+1);
				hasMoved = true;
				for(int k = j-1; k>1; k--){
					panel[i][k] = panel[i][k-1];
					panel[i][k-1] = 0;
				}
			}
		}
	}
}
public static void init(){
	//画边框
	for(int i = 0; i<panel.length; i++){
		for(int j = 0; j<panel[i].length; j++){
			if(i==0||i==panel.length-1){
				panel[i][j] = '─';
			}else if(j==0||j==panel[i].length-1){
				panel[i][j] = '│';
			}
		}
	}
	panel[0][0] = '┌';
	panel[panel.length-1][0] = '└';
	panel[0][panel.length-1] = '┐';
	panel[panel.length-1][panel.length-1] = '┘';
	
	//在随机位置放上a
	random();
	random();
}

//在随机的空位置上产生a
public static void random(){
	//不断的随机一个位置,直到产生的位置为空位置为止
	int row;
	int col;
	while(true){
		row = ran.nextInt(panel.length-2)+1;
		col = ran.nextInt(panel[0].length-2)+1;
		if(panel[row][col] == 0){
			break;
		}
	}
	//在这个位置上放上a或b
	if(ran.nextInt(10) == 0){
		panel[row][col] = 'b';
	}else{
		panel[row][col] = 'a';			
	}
}

//在控制台上打印二维数组
public static void show(){
	for(int i = 0;i<panel.length; i++){
		for(int j = 0; j<panel[i].length; j++){
			System.out.print(panel[i][j]);
		}
		System.out.println();
	}
}

}


转载:https://blog.csdn.net/weixin_45484306/article/details/102486232
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场