import java.util.*;
public class Bagels {
private static final int NUM_DIGITS = 3;
private static final int MAX_GUESSES = 10;
public static String getSecretNum(){
int[] number = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0};
List<Integer> list = new ArrayList<Integer>();
for (int i : number) {
list.add(i);
}
Collections.shuffle(list);
int[] shuffledArray = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
shuffledArray[i] = list.get(i);
}
String secretNum = "";
for(int i=1;i<=NUM_DIGITS;i++){
secretNum += shuffledArray[i];
}
return secretNum;
}
private static String getClues(String guess, String secretNum) {
if (guess.equals(secretNum) ){
return "你猜对了!";
}
String clues = "";
for (int i = 0; i < guess.length(); i++){
if (guess.charAt(i)==secretNum.charAt(i)){
clues+="Fermi";
}else if (secretNum.contains(String.valueOf(guess.charAt(i)))){
clues+="Pico";
}
}
if (clues.length()==0){
return "Bagels";
}else {
return clues;
}
}
public static void main(String[] args) {
System.out.printf(
"Bagels,一个演绎逻辑游戏。\n"+
"我想到的是一个没有重复数字的%d位数字。\n"+
"当我说: 这意味着:\n" +
"Pico 一个数字是正确的,但位置不对。\n"+
"Fermi 一个数字是正确的,在正确的位置。\n"+
"Bagels 没有数字是正确的。\n"+
"例如:如果秘密号码是248,而您的猜测是843,则线索将是Fermi Pico。\n",NUM_DIGITS
);
while (true){
String secretNum = getSecretNum();
System.out.printf("我想到了一个数字\n"+
"您有%d个猜测可以得到它\n",MAX_GUESSES);
int numGuesses = 1;
while (numGuesses <= MAX_GUESSES){
String guess = "";
while (guess.length() != NUM_DIGITS || !guess.matches("\\d+")){
System.out.printf("第%d轮", numGuesses);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的猜的数字:");
guess = scanner.nextLine();
}
String clues = getClues(guess, secretNum);
System.out.println(clues);
numGuesses += 1;
if (guess.equals(secretNum)) {
break;
}
if (numGuesses > MAX_GUESSES) {
System.out.println("你的猜测已经用完了。");
System.out.printf("答案是%s。", secretNum);
}
}
Scanner scanner = new Scanner(System.in);
System.out.println("再来一次?(yes/no)");
if (!scanner.nextLine().startsWith("y")){
break;
}
}
System.out.println("谢谢您的游玩");
}
}