Java 基礎 猜字元小遊戲
阿新 • • 發佈:2019-01-06
猜字元小遊戲是對Java 語言基礎的總結,幾乎涵蓋的了語言基礎中的所有知識,包括 順序機構,分支結構,迴圈結構,陣列,以及方法的呼叫.
本文原始碼中有詳細的註解,如果有看不懂的,歡迎留言問答!本文是提供給入門的新手的,還望路過的大牛,不喜勿噴.
package GuessGame; import java.util.Scanner; public class Guessing { public static void main(String[] args) { char [] chs = character();// 獲取控制檯許可權 System.out.println(chs);// 作弊,列印的結果 Scanner scanner = new Scanner(System.in);//獲取控制檯許可權 int count = 0;//宣告次數 while(true){//自造死迴圈 System.out.println("Guess!(猜吧)"); String str = scanner.nextLine().toUpperCase();//將使用者輸入的轉為大寫 if(str.equals("EXIT")) {//如果使用者輸入EXIT直接退出程式 System.out.println("Game Over! Welcome to come again(遊戲結束!歡迎下次再來) "); return; } char [] input = str.toCharArray();//將使用者輸入的字串轉為字元陣列 int [] result =check(chs,input);//對比隨機陣列chs 和使用者輸入的 input陣列 是否正確 if(result[1] == chs.length){// 如果字元對的位置個數與chs的長度相同,說明猜對了 int score = 100 * chs.length - count * 10; System.out.println("Congratulations! Your score is(恭喜你猜對了,你的得分為):"+score); return; }else { count ++;//猜錯的次數自增 System.out.println("Number of characters correctly guessed(猜對的字元個數為):"+result[0]+ " Number of correct character positions(猜對的字元位置個數為):" +result[1]); } } } // 生成隨機字元陣列 public static char [] character(){ char [] chs = new char [5]; // 隨機字元陣列 char [] letters = new char [26];// 26個英文字元的範圍,然後遍歷賦值,此處可以有另外一種方法生成,雖然比較麻煩但不需要遍歷賦值,下面註釋中演示 for (int i = 0; i < letters.length; i++) { letters [i] = (char) ('A'+i); } /*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];// 開關資料用來比較去除重複 for(int i = 0; i <chs.length; i++){//遍歷賦值隨機字元 int index;// 下標 do { index = (int)(Math.random()*letters.length);//生成隨機下標 } while (flags[index] == true);//當下標index對應的開關為true時,表示對應字元已存過,則重新生成下標index //當下標index對應的開頭為false時,表示對應字元未存過,則迴圈結束 chs [i] = letters[index];//基於下標index到letters中獲取字元,並賦值給chs中的每一個元素 flags [index] = true;// //將下標index對應的開關修改為true,表示對應字元已存過 } return chs; } // 比較去重的過程 /*i=0 index=0 chs[0]='A' flags[0]=true * i=1 index=25 chs[1]='Z' flags[25]=true * i=2 index=0/25/0/1 chs[2]='B' flags[1]=true*/ // 對比chs 字元陣列和 input 字元陣列 public static int [] check(char [] chs, char [] input){ int [] result = new int [2];// 對比結果(0,0) 假設 result[0]為字元對的個數,result[1]為字元位置對的個數 for (int i = 0; i < chs.length; i++) {//遍歷隨機字元陣列 for (int j = 0; j < input.length; j++) {//遍歷使用者輸入的字元陣列 if(chs[i] == input[j]){// 字元正確 result [0]++;// 字元對的個數自增 if(i == j){//字元位置正確 result [1]++;//字元對的位置自增 } break;//剩餘的input元素本輪不再比較 } } } return result; } }