Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 16.11.2019
Сообщений: 1

Нужно оптимизировать код

25.03.2021, 21:40. Показов 718. Ответов 0
Метки java (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть код игры hangman. Файлы game.txt поэтапно строят виселицу, петлю и самого человека. Файлы находятся здесь ./src/main/resources/GameData/. Вот код:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
 
public class Game {
    private final String[] words = "кит кобра лось".split(" ");
    private String secretWord;
    private final String[] hangmanPictures = {
        "game-1.txt",
        "game-2.txt",
        "game-3.txt",
        "game-4.txt",
        "game-5.txt",
        "game-6.txt",
        "game-7.txt",
    };
    private String alreadyGuessed = "";
    private String missedLetters = "";
    private String correctLetters = "";
    private Scanner sc = new Scanner(System.in);
 
    /**
     * Считываем картинку из файла
     * и выводим на экран
     */
    public void readFileData(String name) throws FileNotFoundException {
        String path = "./src/main/resources/GameData/";
        File file = new File(path + name);
        Scanner reader = new Scanner(file);
        while (reader.hasNextLine()) {
            String data = reader.nextLine();
            System.out.println(data);
        }
        reader.close();
    }
 
    /**
     * Возвращаем случайное слово - оно же загаданное
     */
    private String getRandomWord() {
        int wordIndex = getRandomValueBetweenRange(0, words.length - 1);
        return words[wordIndex];
    }
 
    public int getRandomValueBetweenRange(int min, int max) {
        return (int) (Math.random() * ((max - min) + 1) + min);
    }
 
    /**
     * Возвращает true, если игрок будет продолжать игру,
     * иначе возвращаем false
     */
    private boolean playAgain() {
        System.out.println("Хотите играть еще раз?(да или нет)");
        return sc.nextLine().toLowerCase().startsWith("д");
    }
 
    private String getGuess() {
        while (true) {
            System.out.print("Введите букву: ");
            String guess = sc.nextLine().toLowerCase();
            if (guess.length() != 1) {
                System.out.println("Пожалуйста, введите одну букву ");
            } else if (!"абвгдеёжзийклмнопрстуфхцчшщьыъэюя".contains(guess)) { //guess -> char  guess>'а' and guess<'я'
                System.out.println("Пожалуйста, введите БУКВУ!");
            } else if (alreadyGuessed.contains(guess)) {
                System.out.println("Вы уже указывали эту букву, введите другую:");
            } else {
                return guess;
            }
        }
    }
 
    private void displayBoard() throws FileNotFoundException {
        String hangmanPicture = hangmanPictures[missedLetters.length()];
        readFileData(hangmanPicture);
        System.out.println("Ошибочные буквы: ");
        for (int i = 0; i < missedLetters.length(); i++) {
            System.out.print(missedLetters.charAt(i) + " ");
        }
        System.out.println();
 
        //_ _ _ _ _
        String blanks = "";
        for (int i = 0; i < secretWord.length(); i++) {
            blanks += "_";
        }
        //кит
        // _ _ _
        // _ и _
        //нужно заменить пропуски на отгаданные буквы
        for (int i = 0; i < secretWord.length(); i++) {
            if (correctLetters.contains(String.valueOf(secretWord.charAt(i)))) {
                blanks = blanks.substring(0, i) + secretWord.charAt(i) + blanks.substring(i + 1, secretWord.length());
            }
        }
 
        for (int i = 0; i < blanks.length(); i++) {
            System.out.print(blanks.charAt(i) + " ");
        }
        System.out.println();
    }
 
 
    public void start() throws FileNotFoundException {
        System.out.println("В И С Е Л И Ц А");
        secretWord = getRandomWord();
        boolean gameIsDone = false;
        while (true) {
            displayBoard();
            alreadyGuessed = correctLetters + missedLetters;
            //позволяем игроку ввести одну букву
            String guess = getGuess();
            if (secretWord.contains(guess)) {
                correctLetters += guess;
                //проверка, а не выиграл ли игрок?
                boolean foundAllLetters = true;
                for (int i = 0; i < secretWord.length(); i++) {
                    if (!correctLetters.contains(String.valueOf(secretWord.charAt(i)))) {
                        foundAllLetters = false;
                        break;
                    }
                }
                if (foundAllLetters) {
                    System.out.println("Да! Секретное слово: " + secretWord + ". Вы угадали!");
                    gameIsDone = true;
                }
            } else {
                missedLetters += guess;
                if (missedLetters.length() == (hangmanPictures.length - 1)) {
                    displayBoard();
                    System.out.println("Вы исчерпали все попытки!");
                    System.out.println("Не угадали " + missedLetters.length() + " букв");
                    System.out.println("Угадано букв: " + correctLetters.length());
                    System.out.println("Загаданное слово: " + secretWord);
                    gameIsDone = true;
                }
            }
            if (gameIsDone) {
                if (playAgain()) {
                    missedLetters = "";
                    correctLetters = "";
                    gameIsDone = false;
                    secretWord = getRandomWord();
                } else {
                    break;
                }
            }
        }
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2021, 21:40
Ответы с готовыми решениями:

Нужно оптимизировать код с графическим интерфейсом
У меня есть код которий вычисляет биномиальный коэффициент. Вот он: import java.io.BufferedReader; import java.io.InputStreamReader; ...

Посоветуйте, как оптимизировать код!
Программа переводит минуты в часы. import java.io.IOException; import java.util.InputMismatchException; import java.util.Scanner; ...

Очередь. Можно ли оптимизировать код?
Добрый вечер, ув. форумчани. Сегодня понял что не могу написать очередь на яве. Вернее сказать могу, но совсем не элегантно. Потратив 2-3...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.03.2021, 21:40
Помогаю со студенческими работами здесь

Нужно оптимизировать код
Вобщем код не принемает сайт, немного нагружает и по времени не проходит задание Август и Беатриса играют в игру. Август загадал...

Нужно оптимизировать код
Нужно максимально сократить код #include &lt;iostream&gt; using namespace std; int main(int argc, char** argv) { int a, i,...

Нужно оптимизировать код
Собственно есть код, который я написал. Хочется сделать его более качественным и оптимизированным, всё что знал сделал, больше ни чего...

Нужно оптимизировать код
const pushToURL = (name, key, value) =&gt; window.history.replaceState(null, null, `${name}?${key}=${value}`) function f(){ ...

Нужно оптимизировать код
Гистограмма является многоугольником, сформированным из последовательности прямоугольников, выровненных на общей базовой линии....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru