3
respuestas

Juego Bulls And Cows - Java

El juego Bulls And Cows es un juego en donde se genera un codigo secreto y el usuario debe adivinarlo, Cow es cuando se introduce un digito que coincide con un numero del codigo secreto pero no en la misma posicion, Bull es cuando se introduce un digito que coincide con el codigo secreto en la misma posicion, el juego continua el ciclo hasta que el usuario introduce el numero correcto. El codigo se genera de forma semi aleatoria y no tiene ningun digito repetido, por lo que su cantidad de digitos es maximo de 10.

// BullsCows.java

public class BullsCows {

    private final Scanner scanner = new Scanner(System.in);
    private long numToGuess;
    private int turns = 0;
    boolean gameOn = true;

    public void startGame() {
        generateNumToGuess();
        System.out.println("Okay, let's start a game!");
        // System.out.println("Number: " + numToGuess);
        do {
            System.out.printf("Turn %d:\n", ++turns);
            long inputNumber = getInputNumber(); // numero del usuario
            List<Integer> bullsCows = checkInputNumber(inputNumber);
            printBullsAndCows(bullsCows);
        } while (gameOn);
        System.out.println("Congratulations! You guessed the secret code.");
    }

    private long getInputNumber() {
        return scanner.nextLong();
    }

    private void generateNumToGuess() {

        NumGenerator numGenerator = new NumGenerator();
        numToGuess = numGenerator.setSecretCode();
    }

    private List<Integer> checkInputNumber(long number) {

        int bulls = 0;
        int cows = 0;
        List<Integer> numbers = new ArrayList<>();

        char[] digitsToGuess = String.valueOf(numToGuess).toCharArray();
        char[] answer = String.valueOf(number).toCharArray();

        for (int i = 0; i < digitsToGuess.length; i++) {
            for (int j = 0; j < answer.length; j++) {
                if (i == j && digitsToGuess[i] == answer[j])
                    bulls++;
                else if (i != j && digitsToGuess[i] == answer[j])
                    cows++;
            }
        }

        numbers.add(bulls);
        numbers.add(cows);
        return numbers;
    }

    private void printBullsAndCows(List<Integer> bullsCows) {

        int bulls = bullsCows.get(0);
        int cows = bullsCows.get(1);
        StringBuilder outputString = new StringBuilder("Grade: ");
        String outBulls = bulls > 1 ? "bulls" : bulls == 1 ? "bull" : "bulls";
        String outCows = cows > 1 ? "cows" : cows == 1 ? "cow" : "";

        outputString.append(bulls)
                .append(" ")
                .append(outBulls)
                .append(" ");

        if (cows != 0)
            outputString.append(cows)
                    .append(" ")
                    .append(outCows);

        String strToGuess = String.valueOf(numToGuess);
        if (bulls == strToGuess.length())
            gameOn = false;
        System.out.println(outputString);
    }
}
3 respuestas

Continuacion del codigo.

// NumGenerator.java

public class NumGenerator {

    private final int MAX = 10;
    private final StringBuilder ERROR =
            new StringBuilder("Error: can't generate a secret " +
                    "number with a length of  because there aren't " +
                    "enough unique digits.");
    private final Scanner scanner = new Scanner(System.in);
    private long secretCode;

    public long setSecretCode() {
        int lengthCode;
        boolean valid = false;
        do {
            lengthCode = getCodeLength();
            if (lengthCode > MAX || lengthCode < 1) {
                ERROR.insert(55, lengthCode);
                System.out.println(ERROR);
            } else {
                generateSecretCode(lengthCode);
                valid = true;
            }
        } while (!valid);
        return secretCode;
    }

    private int getCodeLength() {
        System.out.println("Please, enter the secret code's length:");
        return scanner.nextInt();
    }

    private void generateSecretCode(int lengthCode) {

        int number;
        StringBuilder stringBuilder = new StringBuilder();
        ArrayList<Integer> finalNum = new ArrayList<>();
        Random random = new Random();
        int ZERO = 0;
        int index = ZERO;

        while (index < lengthCode) {
            number = random.nextInt(MAX);
            if (index == ZERO && number == ZERO) {
                while (number == ZERO) {
                    number = random.nextInt(MAX);
                }
                finalNum.add(number);
                index++;
            } else if (!finalNum.contains(number)) {
                finalNum.add(number);
                index++;
            }
        }

        for (int num : finalNum) {
            stringBuilder.append(num);
        }

        secretCode = Long.parseLong(stringBuilder.toString());
    }
}

// Main.java

public class Main {
    public static void main(String[] args) {
        BullsCows newGame = new BullsCows();
        newGame.startGame();
    }
}

Hola Christian, espero que estés bien

No conocía el juego y lo explicaste claramente, gracias. Encontré el juego interesante, y encontré su implementación aún más interesante, siempre es divertido programar juegos en este estilo, puedo ver que repasaste muchos temas esenciales de Lógica de Programación. Estoy feliz por tu esfuerzo y resultados, sigue estudiando!

Sin embargo, el foro está enfocado a dudas sobre los cursos y actividades de la plataforma. Si eres estudiante del programa ONE, te sugiero que compartas tus códigos con nosotros a través de discord, para que nosotros, los scubas y otros estudiantes, podamos interactuar contigo y discutir el contenido utilizado, ¿sí?

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios.

Excelente desarrollo gracias por compartirlo