Skip to content

Commit 7472918

Browse files
committed
project: финальная версия после всех правок
1 parent ee13349 commit 7472918

5 files changed

Lines changed: 174 additions & 22 deletions

File tree

README.md

Lines changed: 140 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,142 @@
1-
# java-project-61
1+
# Игры разума (Mind Games)
22

3-
## Hexlet tests and linter status:
3+
## Статус проекта
44
[![Actions Status](https://github.com/Mercer241/java-project-61/workflows/hexlet-check/badge.svg)](https://github.com/Mercer241/java-project-61/actions)
5+
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=Mercer241_java-project-61&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=Mercer241_java-project-61)
6+
[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=Mercer241_java-project-61&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=Mercer241_java-project-61)
7+
[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=Mercer241_java-project-61&metric=security_rating)](https://sonarcloud.io/summary/new_code?id=Mercer241_java-project-61)
8+
9+
## О проекте
10+
11+
**«Игры разума»** — это набор консольных игр, разработанных в рамках первого проекта на Хекслете. Проект направлен на изучение основ Java, работы с Gradle, настройки CI/CD и написания чистого кода.
12+
13+
Каждая игра предлагает пользователю ответить на три вопроса. За каждый правильный ответ начисляется балл. Три правильных ответа подряд считаются победой. Неправильный ответ завершает игру и предлагает попробовать снова.
14+
15+
### Список игр
16+
17+
| Номер | Игра | Описание |
18+
|-------|------|----------|
19+
| 1 | **Greet** | Приветствие и знакомство с игроком |
20+
| 2 | **Even** | Определение четного числа (ответ "yes"/"no") |
21+
| 3 | **Calc** | Решение арифметических выражений |
22+
| 4 | **GCD** | Поиск наибольшего общего делителя |
23+
| 5 | **Progression** | Поиск пропущенного числа в арифметической прогрессии |
24+
| 6 | **Prime** | Определение простого числа (ответ "yes"/"no") |
25+
26+
## Технологии
27+
28+
- Java 17
29+
- Gradle 8.14
30+
- Checkstyle
31+
- SonarQube / SonarCloud
32+
- GitHub Actions (CI/CD)
33+
34+
## Установка и запуск
35+
36+
### Требования
37+
- Java 17 или выше
38+
- Gradle (или использование Gradle Wrapper)
39+
40+
### Сборка проекта
41+
42+
1. Клонируйте репозиторий:
43+
```bash
44+
git clone https://github.com/Mercer241/java-project-61.git
45+
46+
2. Перейдите в директорию проекта:
47+
cd java-project-61/app
48+
49+
3. Соберите проект:
50+
./gradlew clean build
51+
52+
## Запуск игр
53+
54+
Способ 1: Запуск JAR-файла (рекомендуется для интерактивной игры)
55+
- java -jar build/libs/app.jar
56+
57+
Способ 2: Запуск через Gradle (без возможности ввода с клавиатуры)
58+
- ./gradlew run
59+
60+
## Как играть
61+
62+
После запуска появится меню:
63+
64+
Please enter the game number and press Enter.
65+
66+
1 - Greet
67+
68+
2 - Even
69+
70+
3 - Calc
71+
72+
4 - GCD
73+
74+
5 - Progression
75+
76+
6 - Prime
77+
78+
0 - Exit
79+
80+
Your choice:
81+
82+
Введите номер игры и следуйте инструкциям на экране.
83+
84+
## Пример игры
85+
### Игра «Калькулятор»:
86+
87+
Welcome to the Brain Games!
88+
89+
May I have your name? John
90+
91+
Hello, John!
92+
93+
What is the result of the expression?
94+
95+
Question: 5 + 3
96+
97+
Your answer: 8
98+
99+
Correct!
100+
101+
Question: 10 - 4
102+
103+
Your answer: 6
104+
105+
Correct!
106+
107+
Question: 7 * 2
108+
109+
Your answer: 14
110+
111+
Correct!
112+
113+
Congratulations, John!
114+
115+
## Структура проекта
116+
app/
117+
118+
├── src/main/java/hexlet/code/
119+
120+
│ ├── games/ #Логика всех игр
121+
122+
│ ├── App.java # Точка входа в приложение
123+
124+
│ ├── Cli.java # Приветствие и ввод имени
125+
126+
│ ├── Engine.java # Игровой движок (логика вопросов-ответов)
127+
128+
│ └── Utils.java # Вспомогательные функции
129+
130+
├── build.gradle.kts # Конфигурация Gradle
131+
132+
└── README.md # Документация проекта
133+
134+
## Разработка
135+
### Проверка стиля кода
136+
./gradlew checkstyleMain
137+
138+
### Запуск тестов (если есть)
139+
./gradlew test
140+
141+
### Анализ кода через SonarQube
142+
./gradlew sonar

app/src/main/java/hexlet/code/App.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,15 +40,17 @@ private static int getChoice() {
4040
try {
4141
if (scanner.hasNextInt()) {
4242
int choice = scanner.nextInt();
43-
if (scanner.hasNextLine()) {
44-
scanner.nextLine();
45-
}
43+
// Очищаем буфер после ввода числа
44+
scanner.nextLine();
4645
return choice;
4746
} else {
48-
return 0;
47+
String input = scanner.nextLine();
48+
throw new RuntimeException("Invalid input. Expected a number, but got: '" + input + "'");
4949
}
50+
} catch (RuntimeException e) {
51+
throw e;
5052
} catch (Exception e) {
51-
return 0;
53+
throw new RuntimeException("Error reading input: " + e.getMessage());
5254
}
5355
}
5456

app/src/main/java/hexlet/code/Cli.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,5 @@ public static void greet() {
1010
System.out.print("May I have your name? ");
1111
String name = scanner.nextLine();
1212
System.out.println("Hello, " + name + "!");
13-
1413
}
1514
}

app/src/main/java/hexlet/code/games/Calc.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,14 @@ public static void start() {
2929

3030
private static int calculate(int num1, int num2, String operator) {
3131
switch (operator) {
32-
case "+": return num1 + num2;
33-
case "-": return num1 - num2;
34-
case "*": return num1 * num2;
35-
default: return 0;
32+
case "+":
33+
return num1 + num2;
34+
case "-":
35+
return num1 - num2;
36+
case "*":
37+
return num1 * num2;
38+
default:
39+
throw new RuntimeException("Unknown operator: '" + operator + "'. Supported operators: +, -, *");
3640
}
3741
}
3842
}

app/src/main/java/hexlet/code/games/Progression.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package hexlet.code.games;
22

33
import hexlet.code.Engine;
4-
import hexlet.code.Utils; // ← ДОБАВИТЬ
4+
import hexlet.code.Utils;
55

66
public class Progression {
77
private static final int MIN_LENGTH = 5;
@@ -28,23 +28,32 @@ private static String[] generateRound() {
2828
int step = Utils.generateNumber(MIN_STEP, MAX_STEP);
2929
int hiddenPosition = Utils.generateNumber(0, length - 1);
3030

31-
String question = buildProgression(start, step, length, hiddenPosition);
32-
int hiddenNumber = start + hiddenPosition * step;
31+
int[] progression = generateProgression(start, step, length);
32+
33+
String question = hideElement(progression, hiddenPosition);
34+
35+
int hiddenNumber = progression[hiddenPosition];
3336

3437
return new String[] {question, Integer.toString(hiddenNumber)};
3538
}
3639

37-
private static String buildProgression(int start, int step, int length, int hiddenPosition) {
38-
String[] progression = new String[length];
39-
40+
private static int[] generateProgression(int start, int step, int length) {
41+
int[] progression = new int[length];
4042
for (int i = 0; i < length; i++) {
43+
progression[i] = start + i * step;
44+
}
45+
return progression;
46+
}
47+
48+
private static String hideElement(int[] progression, int hiddenPosition) {
49+
String[] result = new String[progression.length];
50+
for (int i = 0; i < progression.length; i++) {
4151
if (i == hiddenPosition) {
42-
progression[i] = "..";
52+
result[i] = "..";
4353
} else {
44-
progression[i] = Integer.toString(start + i * step);
54+
result[i] = Integer.toString(progression[i]);
4555
}
4656
}
47-
48-
return String.join(" ", progression);
57+
return String.join(" ", result);
4958
}
5059
}

0 commit comments

Comments
 (0)