Висeлица на Java. Хорошо ли спроектировано?

157
03 ноября 2018, 11:00

Вопрос даже не вопрос, а, точнее сказать, просьба показать на мои возможные недочёты, предложить более грамотный код.

Класс Game:

public class Game {
    private int lifes = 5;
    private String secret;
    private List<Character> progress, mistakes;
    public void startGame(String word) {
        secret = word.toLowerCase();
        progress = new ArrayList<>();
        for (int i = 0; i < secret.length(); i++) {
            progress.add('_');
        }
        mistakes = new ArrayList<Character>();
        printProgress();
        Scanner scanner = new Scanner(System.in);
        while (true) {
            String input = scanner.nextLine().toLowerCase();
            if (input.length() != 1 || !Character.isLetter(input.charAt(0))) {
                System.out.print("Введите букву: ");
                continue;
            }
            char userVariant = input.charAt(0);
            if (mistakes.contains(userVariant) || progress.contains(userVariant)) {
                System.out.println("Эта буква уже была");
                System.out.print("Введите букву: ");
                continue;
            }
            List<Integer> indexes = new ArrayList<>();
            for (int index = secret.indexOf(userVariant); index >= 0; index = secret.indexOf(userVariant, index + 1)) {
                progress.set(index, userVariant);
                indexes.add(index);
            }
            if (indexes.isEmpty()) {
                System.out.print("Неправильно! ");
                mistakes.add(userVariant);
                lifes--;
                if (lifes == 0) {
                    System.out.println("\nВы проиграли...");
                    break;
                }
            } else {
                System.out.print("Правильно! ");
                boolean playerWin = true;
                for (Character letter : progress) {
                    if (!Character.isLetter(letter)) {
                        playerWin = false;
                    }
                }
                if (playerWin) {
                    System.out.println("Вы выйграли!");
                    break;
                }
            }
            printProgress();
        } 
        System.out.println("Это было слово: " + secret.toUpperCase());
    }
    private void printProgress() {
        System.out.print("Слово:");
        for (char letter : progress) {
            System.out.print(" " + letter);
        }
        System.out.print("\nЖизни: ");
        for (int i = 0; i < lifes; i++) {
            System.out.print("
READ ALSO
Не работают тесты (TestNG) web-приложение java

Не работают тесты (TestNG) web-приложение java

Я только учусь, не судите строго за вопрос, а еще лучше - помогитеСборка gradle

162
Записать ArrayList&lt;String[]&gt; в txt файл

Записать ArrayList<String[]> в txt файл

Подскажите пожалуйста, как записать большой (5000 строк) ArrayList<String[]> в файл через разделительString[] состоит из 13 элементов

170
Ошибка 500 The server encountered an unexpected condition that prevented it from fulfilling the request. (tiles, JSP, Java)

Ошибка 500 The server encountered an unexpected condition that prevented it from fulfilling the request. (tiles, JSP, Java)

Пытался прикрутить к простейшему проекту tiles из примера https://o7planningorg/ru/11683/spring-boot-apache-tiles-jsp-tutorial все вроде делал по писанному, за исключением...

178