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
查看评论