Skip to content

Commit f7aaaa1

Browse files
committed
refactored every game logic
1 parent eb97f8a commit f7aaaa1

File tree

9 files changed

+169
-145
lines changed

9 files changed

+169
-145
lines changed

README.md

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,12 @@
33
[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=aseccxz_java-project-61&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=aseccxz_java-project-61)
44
[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=aseccxz_java-project-61&metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=aseccxz_java-project-61)
55
## Игры разума ##
6-
Этот проект представляет собой комплект из пяти консольных игр, созданных по аналогии с мобильными тренажерами для ума. Игровой процесс любой из них строится на ответах на вопросы. Для успешного прохождения требуется дать три правильных ответа подряд. В случае ошибки игра останавливается, и участнику предлагается попробовать свои силы еще раз.
7-
Примеры игр:
8-
[Определение четного числа](https://asciinema.org/a/Iaff6ukLhja6iQoGAjxWDoeOu)
9-
[Калькулятор](https://asciinema.org/a/88N93aimt7NfYdxmFRtSMhTnb)
10-
[Определение наибольшего общего делителя](https://asciinema.org/a/1FHH1S1pSiaUlHgbpE2ZT1Dhb)
11-
[Прогрессия](https://asciinema.org/a/LTi47kRlWxjvuKXa8lv25CLhR)
12-
[Определение простого числа](https://asciinema.org/a/a6xdZWjGkXJGJS8x3yT8zhCwS)
13-
6+
Этот проект представляет собой комплект из пяти консольных игр, созданных по аналогии с мобильными тренажерами для ума. Игровой процесс любой из них строится на ответах на вопросы. Для успешного прохождения требуется дать три правильных ответа подряд. В случае ошибки игра останавливается, и участнику предлагается попробовать свои силы еще раз.
7+
Примеры игр:
8+
1.[Определение четного числа](https://asciinema.org/a/Iaff6ukLhja6iQoGAjxWDoeOu)
9+
2.[Калькулятор](https://asciinema.org/a/88N93aimt7NfYdxmFRtSMhTnb)
10+
3.[Определение наибольшего общего делителя](https://asciinema.org/a/1FHH1S1pSiaUlHgbpE2ZT1Dhb)
11+
4.[Прогрессия](https://asciinema.org/a/LTi47kRlWxjvuKXa8lv25CLhR)
12+
5.[Определение простого числа](https://asciinema.org/a/a6xdZWjGkXJGJS8x3yT8zhCwS)
1413
Для запуска проекта используется команда make run-dist
1514

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

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package hexlet.code;
22

3+
import hexlet.code.games.CalcGame;
4+
import hexlet.code.games.EvenGame;
5+
import hexlet.code.games.GCDGame;
6+
import hexlet.code.games.PrimeGame;
7+
import hexlet.code.games.ProgressionGame;
8+
39
import java.util.Scanner;
410

511
public class App {
@@ -16,9 +22,27 @@ public static void main(String[] args) {
1622
String gameChoice;
1723
Scanner input = new Scanner(System.in);
1824
gameChoice = input.nextLine();
19-
if (!gameChoice.equals("0")) {
20-
System.out.println("Your choice: " + gameChoice);
21-
Engine.gameRun(gameChoice);
25+
switch (gameChoice) {
26+
case "1":
27+
Cli.greeting();
28+
break;
29+
case "2":
30+
EvenGame.evenGame();
31+
break;
32+
case "3":
33+
CalcGame.calcGame();
34+
break;
35+
case "4":
36+
GCDGame.gcdGame();
37+
break;
38+
case "5":
39+
ProgressionGame.progressionGame();
40+
break;
41+
case "6":
42+
PrimeGame.primeGame();
43+
break;
44+
default:
45+
System.out.println("Unexpected input");
2246
}
2347
}
2448
}

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

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,13 @@
33
import java.util.Scanner;
44

55
public class Cli {
6-
private static String name;
76

87
public static void greeting() {
8+
Scanner input = new Scanner(System.in);
99
System.out.println("Welcome to the Brain Games!");
10-
if (name == null) {
11-
System.out.print("May I have your name? ");
12-
Scanner input = new Scanner(System.in);
13-
name = input.nextLine();
14-
}
10+
System.out.print("May I have your name? ");
11+
String name = input.next();
1512
System.out.println("Hello, " + name + "!");
16-
}
17-
public static String getName() {
18-
return name;
13+
input.close();
1914
}
2015
}
Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,61 +1,36 @@
11
package hexlet.code;
22

3-
import hexlet.code.games.CalcGame;
4-
import hexlet.code.games.EvenGame;
5-
import hexlet.code.games.GCDGame;
6-
import hexlet.code.games.PrimeGame;
7-
import hexlet.code.games.ProgressionGame;
83
import java.util.Scanner;
94

105
public class Engine {
116
static final int NUMBER_OF_GAMES = 3;
127

13-
public static void gameRun(String gameNum) {
14-
Cli.greeting();
15-
int gameCount = 0;
16-
String solution = "";
17-
String playerAnswer;
8+
public static void gameRun(String gameRules, String[][] questionsAndAnswers) {
189
Scanner input = new Scanner(System.in);
19-
while (gameCount < NUMBER_OF_GAMES) {
20-
if (gameNum.equals("1")) {
21-
break;
22-
}
23-
switch (gameNum) {
24-
case "2":
25-
EvenGame.showGameRules(gameCount);
26-
solution = EvenGame.getSolution();
27-
break;
28-
case "3":
29-
CalcGame.showGameRules(gameCount);
30-
solution = CalcGame.getSolution();
31-
break;
32-
case "4":
33-
GCDGame.showGameRules(gameCount);
34-
solution = GCDGame.getSolution();
35-
break;
36-
case "5":
37-
ProgressionGame.showGameRules(gameCount);
38-
solution = ProgressionGame.getSolution();
39-
break;
40-
case "6":
41-
PrimeGame.showGameRules(gameCount);
42-
solution = PrimeGame.getSolution();
43-
break;
44-
default:
45-
System.out.println("Unexpected input");
46-
}
47-
playerAnswer = input.nextLine();
48-
if (solution.equals(playerAnswer)) {
10+
String playerAnswer;
11+
int gameCount = 0;
12+
System.out.println("Welcome to the Brain Games!");
13+
System.out.print("May I have your name? ");
14+
String userName = input.next();
15+
System.out.println("Hello, " + userName + "!");
16+
System.out.println(gameRules);
17+
for (int i = 0; i < NUMBER_OF_GAMES; i++) {
18+
String question = questionsAndAnswers[i][0];
19+
String answer = questionsAndAnswers[i][1];
20+
System.out.println(question);
21+
playerAnswer = input.next();
22+
if (answer.equals(playerAnswer)) {
4923
System.out.println("Correct!");
5024
gameCount++;
5125
} else {
52-
System.out.println("'" + playerAnswer + "' is wrong answer ;(. Correct answer was '" + solution + "'.");
53-
System.out.println("Let's try again, " + Cli.getName() + "!");
26+
System.out.println("'" + playerAnswer + "' is wrong answer ;(. Correct answer was '" + answer + "'.");
27+
System.out.println("Let's try again, " + userName + "!");
5428
break;
5529
}
56-
}
57-
if (gameCount == NUMBER_OF_GAMES) {
58-
System.out.println("Congratulations, " + Cli.getName() + "!");
30+
31+
if (gameCount == NUMBER_OF_GAMES) {
32+
System.out.println("Congratulations, " + userName + "!");
33+
}
5934
}
6035
}
6136
}
Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,32 @@
11
package hexlet.code.games;
22

3+
import hexlet.code.Engine;
4+
35
public class CalcGame {
46
static final int MAX_NUMBER_VALUE = 100;
57
static final int MAX_INDEX_VALUE = 3;
6-
public static void showGameRules(int gameCount) {
7-
if (gameCount == 0) {
8-
System.out.println("What is the result of the expression?");
8+
static final int NUMBER_OF_GAMES = 3;
9+
static final int COLUMN_INDEX = 3;
10+
static final int ROW_INDEX = 2;
11+
12+
public static void calcGame() {
13+
String gameRules = "What is the result of the expression?";
14+
String[][] questionsAndAnswers = new String[COLUMN_INDEX][ROW_INDEX];
15+
for (int i = 0; i < NUMBER_OF_GAMES; i++) {
16+
int firstNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
17+
int secondNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
18+
int operatorIndex = (int) (Math.random() * MAX_INDEX_VALUE);
19+
char[] operator = {'+', '-', '*'};
20+
int solution = 0;
21+
questionsAndAnswers[i][0] = "Question: " + firstNumber + " " + operator[operatorIndex] + " " + secondNumber;
22+
solution = switch (operator[operatorIndex]) {
23+
case '+' -> firstNumber + secondNumber;
24+
case '-' -> firstNumber - secondNumber;
25+
case '*' -> firstNumber * secondNumber;
26+
default -> solution;
27+
};
28+
questionsAndAnswers[i][1] = Integer.toString(solution);
929
}
10-
}
11-
public static String getSolution() {
12-
int firstNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
13-
int secondNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
14-
int operatorIndex = (int) (Math.random() * MAX_INDEX_VALUE);
15-
char[] operator = {'+', '-', '*'};
16-
int solution = 0;
17-
System.out.println("Question: " + firstNumber + " " + operator[operatorIndex] + " " + secondNumber);
18-
solution = switch (operator[operatorIndex]) {
19-
case '+' -> firstNumber + secondNumber;
20-
case '-' -> firstNumber - secondNumber;
21-
case '*' -> firstNumber * secondNumber;
22-
default -> solution;
23-
};
24-
return Integer.toString(solution);
30+
Engine.gameRun(gameRules, questionsAndAnswers);
2531
}
2632
}
Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,22 @@
11
package hexlet.code.games;
22

3+
import hexlet.code.Engine;
4+
35
public class EvenGame {
46
static final int MAX_NUMBER_VALUE = 100;
7+
static final int NUMBER_OF_GAMES = 3;
8+
static final int COLUMN_INDEX = 3;
9+
static final int ROW_INDEX = 2;
510

6-
public static void showGameRules(int gameCount) {
7-
if (gameCount == 0) {
8-
System.out.println("Answer 'yes' if the number is even, otherwise answer 'no'.");
11+
public static void evenGame() {
12+
String gameRules = "Answer 'yes' if the number is even, otherwise answer 'no'.";
13+
String[][] questionsAndAnswers = new String[COLUMN_INDEX][ROW_INDEX];
14+
for (int i = 0; i < NUMBER_OF_GAMES; i++) {
15+
int guessedNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
16+
String solution = guessedNumber % 2 == 0 ? "yes" : "no";
17+
questionsAndAnswers[i][0] = "Question: " + guessedNumber;
18+
questionsAndAnswers[i][1] = solution;
919
}
10-
}
11-
public static String getSolution() {
12-
int guessedNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
13-
System.out.println("Question: " + guessedNumber);
14-
return guessedNumber % 2 == 0 ? "yes" : "no";
20+
Engine.gameRun(gameRules, questionsAndAnswers);
1521
}
1622
}
Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,30 @@
11
package hexlet.code.games;
22

3+
import hexlet.code.Engine;
4+
35
public class GCDGame {
46
static final int MAX_NUMBER_VALUE = 100;
7+
static final int NUMBER_OF_GAMES = 3;
8+
static final int COLUMN_INDEX = 3;
9+
static final int ROW_INDEX = 2;
510

6-
public static void showGameRules(int gameCount) {
7-
if (gameCount == 0) {
8-
System.out.println("Find the greatest common divisor of given numbers.");
9-
}
10-
}
11-
public static String getSolution() {
12-
int firstNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
13-
int secondNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
14-
int solution;
15-
System.out.println("Question: " + firstNumber + " " + secondNumber);
16-
while (secondNumber != 0) {
17-
int swapNumber;
18-
swapNumber = firstNumber % secondNumber;
19-
firstNumber = secondNumber;
20-
secondNumber = swapNumber;
11+
public static void gcdGame() {
12+
String gameRules = "Find the greatest common divisor of given numbers.";
13+
String[][] questionsAndAnswers = new String[COLUMN_INDEX][ROW_INDEX];
14+
for (int i = 0; i < NUMBER_OF_GAMES; i++) {
15+
int firstNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
16+
int secondNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
17+
int solution;
18+
questionsAndAnswers[i][0] = "Question: " + firstNumber + " " + secondNumber;
19+
while (secondNumber != 0) {
20+
int swapNumber;
21+
swapNumber = firstNumber % secondNumber;
22+
firstNumber = secondNumber;
23+
secondNumber = swapNumber;
24+
}
25+
solution = firstNumber;
26+
questionsAndAnswers[i][1] = Integer.toString(solution);
2127
}
22-
solution = firstNumber;
23-
return Integer.toString(solution);
28+
Engine.gameRun(gameRules, questionsAndAnswers);
2429
}
2530
}
Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
11
package hexlet.code.games;
22

3+
import hexlet.code.Engine;
4+
35
public class PrimeGame {
46
static final int MAX_NUMBER_VALUE = 100;
57
static final int MIN_INDEX_TO_START = 3;
8+
static final int NUMBER_OF_GAMES = 3;
9+
static final int COLUMN_INDEX = 3;
10+
static final int ROW_INDEX = 2;
611

7-
public static void showGameRules(int gameCount) {
8-
if (gameCount == 0) {
9-
System.out.println("Answer 'yes' if given number is prime. Otherwise answer 'no'.");
10-
}
11-
}
12-
public static String getSolution() {
13-
int guessedNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
14-
System.out.println("Question: " + guessedNumber);
15-
if (guessedNumber < 2) {
16-
return "no";
12+
public static boolean isPrime(int number) {
13+
if (number < 2) {
14+
return false;
1715
}
18-
if (guessedNumber == 2) {
19-
return "yes";
16+
if (number == 2) {
17+
return true;
2018
}
21-
if (guessedNumber % 2 == 0) {
22-
return "no";
19+
if (number % 2 == 0) {
20+
return false;
2321
}
24-
for (int i = MIN_INDEX_TO_START; i * i <= guessedNumber; i += 2) {
25-
if (guessedNumber % i == 0) {
26-
return "no";
22+
for (int j = MIN_INDEX_TO_START; j * j <= number; j += 2) {
23+
if (number % j == 0) {
24+
return false;
2725
}
2826
}
29-
return "yes";
27+
return true;
28+
}
29+
30+
public static void primeGame() {
31+
String gameRules = "Answer 'yes' if given number is prime. Otherwise answer 'no'.";
32+
String[][] questionsAndAnswers = new String[COLUMN_INDEX][ROW_INDEX];
33+
for (int i = 0; i < NUMBER_OF_GAMES; i++) {
34+
int guessedNumber = (int) (Math.random() * MAX_NUMBER_VALUE);
35+
questionsAndAnswers[i][0] = "Question: " + guessedNumber;
36+
questionsAndAnswers[i][1] = isPrime(guessedNumber) ? "yes" : "no";
37+
}
38+
Engine.gameRun(gameRules, questionsAndAnswers);
3039
}
3140
}

0 commit comments

Comments
 (0)