1. 程式人生 > >Java學習小程式(10)三個等級的才字母遊戲

Java學習小程式(10)三個等級的才字母遊戲

猜字母遊戲----實現遊戲等級,遊戲等級設為三級:5,7,9,代表所需猜測的字母個數

//為猜字母遊戲新增遊戲等級,遊戲等級為5,7,9
import java.util.Scanner; 
public class GuessingGame {
       public static void main(String[] args) {  //主方法
		//便是玩家猜測的次數
    	   int count = 0;
    	   //表示使用者猜測的資料
    	   char[] input = null;
    	   //用於儲存判斷的結果
    	   int[] result = new int[2];
    	   Scanner scan = new Scanner(System.in);
    	   System.out.println("GuessingGame>歡迎嘗試猜字母遊戲!");
    	   int level;
    	   do {
    		   System.out.println("請輸入等級(5,7,9):");
    		   level = scan.nextInt();
    	   }while(level!= 5 && level!=7 && level!=9);
    	   char[] chs = generate(level);  //獲取隨機字元陣列
    	   System.out.println(chs);   //作弊哈,顯示猜測答案
    	   System.out.println("GuessingGame>遊戲開始,請輸入您所猜測的5個字母序列:(exit--退出)");
    	   while(true) {  //自造死迴圈
    		   String inputStr = scan.next().trim().toUpperCase();  //接收字串,並轉換為大寫
    		   if("Exit".equals(inputStr)) {
    			   System.out.println("GuessingGame>謝謝你的嘗試,再見!");
    			   break;
    		   }
    		   input = inputStr.toCharArray();
    		   result = check(chs,input);
    		   if(result[0] == chs.length) {  //完全猜對的情況
    			   int score = 100 * chs.length - count *10;  //一個字元100分,猜錯一次扣10分
    			   System.out.println("GuessingGame>恭喜你猜對了!你的得分是:"+score);
    			   break;
    		   }else {
    			   count++;
    			   System.out.println("Guessing>你猜對"+result[1]+"個字元,其中"
    					   +result[0]+"個字元的位置對!(總次數="+count+",exit--退出)");
    			   
    		   }
    	   }
    	   scan.close();

	}
       //隨機生成需要猜測的字母序列,level表示等級
       public static char[] generate(int level) {
    	   char[] letters = {'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
			          'O','P','Q','R','S','T','U','V','W','X','Y','Z'};  //字元可選範圍陣列
    	   boolean[] flags = new boolean[letters.length];  //開關陣列,預設為false
    	   char[] chs = new char[level];  //生成隨機字元陣列
    	   for (int i = 0;i < chs.length; i++) {  //遍歷隨機字元陣列
    		   int index;
    		   do {
    			   index = (int) (Math.random()* (letters.length));  //生成隨機下標,0到25
    		   }while(flags[index]==true);
    		   //若下標對應的開關為true,表示已經存過,重新生成index
    		   //當下標對應開關為false,表示未存過,條件為假,則為迴圈結束
    		   chs[i] = letters[index];  //基於index下標去letters中獲取資料,並賦值給chs中每一個元素
    		   flags[index] = true;  //修改index下標對應開關為true,表示已經存過
    	   }
    	   return chs;
       }
       //比較玩家輸入的字母序列和程式所生成的字母序列,逐一比較字元及其位置,並記載比較結果
       //result[0]為位置對,result[1]為字元對
       
       public static int[] check(char[] chs,char[] input) {
    	   int[] result = new int[2];  //字元對和位置對
    	   for (int i = 0;i < chs.length;i++) {
    		   for (int j = 0; j < input.length; j++) {
    			   if (chs[i] == input[j]) {  //判斷字元是否正確
    				   result[1]++;  //字元對個數加1
    				   if (i == j) {  //判斷位置是否正確
    					   result[0]++;  //位置對個數加1
    				   }
    				   break;
    			   }
    		   }
    	   }
    	   return result;
       }

}