admin管理员组

文章数量:1596408

建议在Eclipse中运行,控制台输出可能会出现排版问题。 

Eclipse控制台字号建议为小四。

程序运行截图:


程序源代码:

import java.util.Random;
import java.util.Scanner;
/**
 * Eliminate - 十二生肖版本	版本号 1.3.1
 * @author CSDN-Spixii
 * 2016-8-19
 */


public class Eliminate {
	public static void main(String[] args){
		Random ra = new Random();
		Scanner sc = new Scanner(System.in);
		
		/* 运算变量定义 */
		int arrSize;//后设-矩阵尺寸
		int chNum;//后设-字符类型数量
		int point = 0;//回合计分
		int totalPoints = 0;//总分
		int life = 0;//设置 - 生命值
		int time = 0;//回合数
		int tempInt = 0;//测试 - 行列号
		int testTime = -1;//测试 - 运算次数
		boolean pass;//判断消除完成
		int bomb;//炸弹累计
		boolean start = true;//判断游戏是否开始
		boolean delay = true;//开关 - 延时特效
		boolean test = false;//开关 - 测试模式
		if(test){delay = false;}//测试模式禁用延时效果
		if(test){life = 100000;}//测试模式解除生命限制
		
		/* 交互变量定义 */
		int num1 = 0;//行列数1
		int num2 = 0;//行列数2
		int h1 = 0;//行数1
		int l1 = 0;//列数1
		int h2 = 0;//行数2
		int l2 = 0;//列数2
		String tempExchange = "";//元素临时交换用
		
		
		System.out.println("=====================");
		System.out.println("    - Eliminate -    ");  
		System.out.println("=====================\n");
		if(test){System.out.println("    - Test Mode -    \n");}
		
		/* 游戏属性设置 */
		while(true){
			System.out.print("> 请设置矩阵尺寸[3~10]:");
			arrSize = Integer.parseInt(sc.next());//设置-矩阵大小[3~10]
			if(arrSize<3 || arrSize>10){
				System.out.println("*设定范围外的输入!");
				continue;
			}
			System.out.print("> 请设置游戏难度[3~12]:");
			chNum = Integer.parseInt(sc.next());//设置-游戏难度/字符类型数 [3~12]
			System.out.println();
			if(chNum<3 || chNum>12){
				System.out.println("*设定范围外的输入!");
				continue;
			}
			break;
		}
		
		/* 创建游戏矩阵 */
		String [][]arr = new String [arrSize][];
		for(int i=0; i
   
   
    
    j-3; k--){//元素下落 - x轴遍历
									for(int l=i; l>0; l--){//元素下落 - y轴操作
										arr[l][k] = arr[l-1][k];//元素下落
									}
								}
								/* 顶部补充元素 */
								arr[0][j] = getCharacter(ra.nextInt(chNum),true);
								arr[0][j-1] = getCharacter(ra.nextInt(chNum),true);
								arr[0][j-2] = getCharacter(ra.nextInt(chNum),true);
								if(test){System.out.println("
    
     X轴出现消除,行号:"+i);}
								point ++;
								pass = false; 
								/* 横向触发爆炸检测-触发点数:6 */
								int tempI = 0;
								if(!start && i>0){//扫描坠落天花板/主动碰撞触发
									tempI = i;
									for (int k=j-2; k
    
    
     
     2; l--){//元素下落 - x轴操作
									arr[l][j] = arr[l-3][j];//元素下落
								}
								/* 顶部补充元素 */
								arr[0][j] = getCharacter(ra.nextInt(chNum),true);
								arr[1][j] = getCharacter(ra.nextInt(chNum),true);
								arr[2][j] = getCharacter(ra.nextInt(chNum),true);
								if(test){System.out.println("
     
      Y轴出现消除,列号:"+j);}
								point ++;
								pass = false; 
								/* 纵向触发爆炸检测-触发点数:2 */
								int tempI = 0;
								if(!start && i-2>0){//炸点不在地板时/主动碰撞触发
									tempI = i;
									if(!start && detonate(arr,tempI,j,arrSize)){//碰撞位 上一点 炸弹检测
										point ++;
										bomb ++;
										printArray(arr,arrSize,delay);
										//元素下落
										elementsFall(arr, chNum);
										//break;
									}
								}
								if(!start && i<9){//炸点不在天花板时/被动碰撞触发
									tempI = i+1;
									if(!start && detonate(arr,tempI,j,arrSize)){//碰撞位 下一点 炸弹检测
										point ++;
										bomb ++;
										printArray(arr,arrSize,delay);
										//元素下落
										elementsFall(arr, chNum);
										//break;
									}
								}
								
							}else{
								temp2 = temp1;
								temp1 = arr[i][j];
							}
						}else{
							temp1 = arr[i][j];
							temp2 = "";
						}
					}
				}
			}while(!pass);			
			if(test){System.out.println("\ntestTime:"+testTime+"  tempInt:"+tempInt+"  bomb:"+bomb+"\n");}
		
			/* 分数计算与结束判断 */
			if(start){//判断是否刚刚开始
				totalPoints = 0;
				point = 0;
				start = false;
			}else{
				if(point == 0){
					life --;
					//tempExchange = arr[h1][l1];//高生命值-交换返回
					//arr[h1][l1] = arr[h2][l2];
					//arr[h2][l2] = tempExchange;
					if(life == -1){
						System.out.println("=====[GAME OVER]=====");
						System.out.println("总分:"+totalPoints+"		回合:"+time);  //运算次数测试
						System.out.println("=====================");
						sc.close();
						return;
					}
				}
				totalPoints += point;
				if(delay){for(int t=0; t<10000000; t++){}}//延时特效
				System.out.println("=====================");
				if(delay){for(int t=0; t<500000000; t++){}}//延时特效
				System.out.println(" 得分:"+point+"	总分:"+totalPoints+"	回合:"+time);  //运算次数测试
				if(delay){for(int t=0; t<500000000; t++){}}//延时特效
				System.out.println("=====================");
				if(delay){for(int t=0; t<500000000; t++){}}//延时特效
			}
		
			/* 交互 - 显示矩阵 */
			printArray(arr,arrSize,delay);

			/* 交互 - 用户输入 */
			while(true){
				num1 = importOperand(1,arrSize);
				num2 = importOperand(2,arrSize);
				if(num1==num2){
					System.out.println("*请勿输入相同的行列数!");
					continue;
				}
				//响应操作
				h1 = num1/10;
				l1 = num1%10;
				h2 = num2/10;
				l2 = num2%10;
				if(test||((h1 == h2)&&(l1-l2 == -1||l1-l2 == 0||l1-l2 == 1))||((l1 == l2)&&(h1-h2 == -1||h1-h2 == 0||h1-h2 == 1))){
					tempExchange = arr[h1][l1];//交换
					arr[h1][l1] = arr[h2][l2];
					arr[h2][l2] = tempExchange;
					time ++;
					System.out.println();
					break;
				}else{
					System.out.println("*请输入相邻的元素行列数!");
					continue;
				}
			}
		}/* -restart-*/
	}
	/**
	 * 用户输入
	 * @param id	//形参
	 * @return int
	 */
	@SuppressWarnings("resource")//解除Scanner无关闭警告
	static int importOperand(int id, int arrSize){
		int num;//输入数字
		while(true){
			Scanner sc = new Scanner(System.in);
			System.out.print("> 请输入元素"+id+"的行列号:");
			num = Integer.parseInt(sc.next());
			
			if(num/100>0){
				System.out.println("*错误的输入!请输入两个字节");
				continue;
			}
			int h = num/10;
			int l = num%10;
			if(h>=arrSize || l>=arrSize){
				System.out.println("*错误的输入!请输入矩阵范围内的行列数");
				continue;
			}
			return num;
		}
	}
	/**
	 * 打印矩阵
	 * @param arr
	 * @param arrSize
	 * @param delay
	 */
	static void printArray(String[][] arr, int arrSize, boolean delay){
		System.out.print("  0 1 2");//行号
		for(int i=0; i
     
     
      
      0){
				arr[x-1][y] = strX;
				if(y>0){arr[x-1][y-1] = strX;}
				if(y
      
      
       
       0){arr[x+1][y-1] = strX;}
				if(y
       
       
         0){arr[x][y-1] = strX;} if(y 
        
          0; i--){ arr[i][x] = arr[i-1][x]; } arr[0][x] = charX;// } } } for(int i=0; i 
          
         
       
      
      
     
     
    
    
   
   

使用到的Java基础知识点:

  1. Random
  2. Scanner
  3. String处理
  4. 静态方法使用
  5. 二维数组操作
  6. 多重循环嵌套与处理

实现的功能:

  1. 随机生成二维矩阵
  2. 控制台输入设置矩阵大小(游戏尺寸)与元素种类(游戏难度)
  3. 横向与纵向检测消除项目(三连消除)
  4. 消除后的元素下落
  5. 四种类型炸弹 (纵:纵向爆破、横:横向爆破、鬼:3*3矩阵爆破、神:十字爆破)
  6. 延时“特效”
  7. 测试模式

*如运行过程中出现异常抛出,请将异常发至文章评论_(:з」∠)_

本文标签: 小游戏Eliminate