Java學習小程式(10)三個等級的才字母遊戲
阿新 • • 發佈:2018-12-17
猜字母遊戲----實現遊戲等級,遊戲等級設為三級: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; } }