Написал примитивную игру Морской Бой в консоли. Пока без рандомной генерации кораблей на поле, приходится вносить их вручную, но позже допилю. Все остальное вроде работает как нужно, или как я задумал. Хотелось бы увидеть обратную связь, комментарии по коду от товарищей коллег.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class marineWar {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int[][] firstPlayerField = {
{1, 1, 1, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
};
int[][] secondPlayerField = {
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
};
// Начало игры
System.out.println("Нажмите Enter для начала игры.");
try {
while(true) {
String start = reader.readLine();
if (!start.equals("\n")) {
System.out.println("Игра началась.");
break;
}
}
}
catch(IOException ex) {
System.out.println(ex.getMessage());
}
System.out.println("Пожалуйста, введите имя первого игрока: ");
String nameFirst = reader.readLine();
System.out.println("Теперь введите имя второго игрока");
String nameSecond = reader.readLine();
System.out.println("Отлично, в этой битве схлестнутся " + nameFirst + " и " + nameSecond);
while(true) {
int countFirst;
int countSecond;
String text;
// Принимаем координаты ячейки от первого пользователя
System.out.println(nameFirst + " указывает точку для нанесения удара:");
int a = Integer.parseInt(reader.readLine()) - 1;
int b = Integer.parseInt(reader.readLine()) - 1;
// Если по указанным координатам ячейка содержит в себе 1, то игрок попал и может ввести новые координаты
if(secondPlayerField[b][a] == 1) {
secondPlayerField[b][a] = 0;
countFirst = 0;
// Считаем сколько осталось заполненных ячеек
for (int i = 0; i < secondPlayerField.length - 1; i++) {
for(int j = 0; j < secondPlayerField.length - 1; j++) {
if(secondPlayerField[i][j] == 1) {
countFirst++;
}
}
}
// Если в массиве не осталось заполненных ячеек, то игрок победил (НУЖНО ОСТАНОВИТЬ ИСПОЛНЕНИЕ ПРОГРАММЫ)
if(countFirst == 0) {
System.out.println("Победил " + nameFirst + ". Поздравляем!");
break;
}
// Поправляем склонение
if (countFirst % 10 == 1) {
text = " удар.";
} else if (countFirst % 10 == 2 || countFirst % 10 == 3 || countFirst % 10 == 4) {
text = " удара.";
} else if(countFirst == 11){
text = " ударов.";
}
else {
text = " ударов.";
}
System.out.println("Попадание. Для победы вам осталось нанести" + " " + countFirst + text);
}
else {
System.out.println("По указанным координатам попадание не зафиксировано.");
while(true) {
System.out.println(nameSecond + " указывает точку для нанесения удара:");
a = Integer.parseInt(reader.readLine()) - 1;
b = Integer.parseInt(reader.readLine()) - 1;
if(firstPlayerField[b][a] == 1) {
firstPlayerField[b][a] = 0;
countSecond = 0;
// Считаем сколько осталось заполненных ячеек
for (int i = 0; i < firstPlayerField.length - 1; i++) {
for(int j = 0; j < firstPlayerField.length - 1; j++) {
if(firstPlayerField[i][j] == 1) {
countSecond++;
}
}
}
// Если в массиве не осталось заполненных ячеек, то игрок победил (НУЖНО ОСТАНОВИТЬ ИСПОЛНЕНИЕ ПРОГРАММЫ)
if(countSecond == 0) {
System.out.println("Победил " + nameSecond + ". Поздравляем!");
System.exit(0);
}
// Поправляем склонение
if (countSecond % 10 == 1) {
text = " удар.";
} else if (countSecond % 10 == 2 || countSecond % 10 == 3 || countSecond % 10 == 4) {
text = " удара.";
} else if(countSecond == 11){
text = " ударов.";
}
else {
text = " ударов.";
}
System.out.println("Попадание. Для победы вам осталось нанести" + " " + countSecond + text);
}
else {
System.out.println("По указанным координатам попадание не зафиксировано.");
break;
}
}
}
}
}
}