說明:其實我的下界值、上界值可以直接裝在陣列裡,指是這樣不易解讀程式碼功能,所以我刻意用上下界值來表示
public class GuessNumber {
static int cnt=0;
public static int ComputerGuess(int lower,int upper) /*讓電腦猜一個數字,輸入上下界值,輸出範圍內的隨機數字*/
{
int gus=0;
gus = fun.Rand(lower,upper);
cnt++;
if(cnt>1)
System.out.println("*AI: The"+cnt+" times, I guess "+gus+"*");
else
System.out.println("*AI: The"+cnt+" time, I guess "+gus+"*");
return gus;
}
public static int CheckAnswer() /*檢察電腦猜的答案,和玩家想的答案是否一樣,給玩家輸入0、1、2來表示 電腦猜的比我小、達對了、電腦猜的比我大*/
{
int Ipt = 0;boolean fg = true;
Ipt = fun.InputNum("System: Enter 1 is correct, 2 is bigger than my answer, 0 is smaller than my answer: ","");
do
{
fg = true;
if(Ipt==1){System.out.println("Me: Bingo!!You win~ You total guess "+cnt+" time(s)");}
else if(Ipt==2){System.out.println("*Me: Guess smaller~*");} /*這是劇情:告訴電腦要猜小一點喔*/
else if(Ipt==0){System.out.println("*Me: Guess bigger~*");} /*這是劇情:告訴電腦要猜大一點喔*/
else{fg = false;System.out.println("System: Only Enter 1,2 or 0");} /*這是防呆裝置,我少做防文字輸入的部份,可以用try-catch製作*/
}while(fg == false);
return Ipt;
}
public static int[] Reguess(int checkans,int gus,int lower,int upper) /*當電腦猜錯時,將上下界值範圍更改成電腦剛剛猜的數字,用矩陣可以多輸出*/
{
int[] range = null;
range = new int[2];
if(checkans==2){
upper = gus-1;
}
else{lower=gus+1;}
range[0]= lower;
range[1]= upper;
return range;
}
public static void main(String[] args) {
int[] range = null;
range = new int[2];
int lower=0, upper=999,gus=0,checkans=0;
boolean fg=true;
System.out.println("System: Plz think a 3-digi number from 0 to 999"); /*本次遊戲設定範圍是0~999之間的數字*/
do{
fg=true;
gus = ComputerGuess(lower,upper);
checkans = CheckAnswer();
if(checkans==1){fg=true;}
else{
fg=false;
range = Reguess(checkans,gus,lower,upper);
lower = range[0];
upper = range[1];
}
}while(fg==false);
}
}