Итак, я создаю метод для игры с линкорами, которая состоит из кораблей размером от 2 до 5 квадратов по горизонтали на сетке 10x10 на Java. Этот метод заключается в подсчете количества затонувших кораблей в сетке, которые отмечены знаком «*», корабль будет отмечен знаком «S» и водой «.». Я разработал этот метод, но продолжаю сталкиваться с проблемой при правильном подсчете количества затонувших кораблей, поскольку он либо считает затонувшие корабли с одной звездой (которые не являются допустимыми кораблями) подряд как затонувшие корабли, но недавно я столкнулся с проблема, заключающаяся в том, что все отдельные звезды считаются затонувшими кораблями. Как вы можете видеть на доске ниже, предполагается, что он возвращает 1 корабль, поскольку это единственный действительный корабль на доске, но когда я запускаю этот метод, он возвращает 4. Это также проблема, возникающая позже в методе подсчета количества кораблей, которых нет на доске/сетке.
Вот доска/сетка:
public static int sunkenShips(char boardArray[][]) {
board = boardArray;
int sunkenShips = 0; //counts the amount of sunken ships
boolean sunken = false; //used later to check if the the space is a sunken ship
for(char[] row : boardArray) { //loops through board array
for(int i = 0; i < row.length; i++) { //loops through each row
if(row[i] == '*') { //checks if current element is a sunken ship
sunken = true; //sets it to true then
int ii = 0; //resets so it can check if it is a one star (not a sunken ship) in each row
for(int j = i; j < row.length && j < i + 5; j++) { //if it is sunken it checks whether its a valid sunken ship (2-5 squares long), it will go on until the 5th square and/or until the end of the row
ii++;
if(row[j] != '*' && ii == 1) { //checks if the next square after the one is was on is a * and if not which would make it only 1 star and not a sunken ship, break out of the loop
sunken = false; //changes it to false therefore
break;
}
}
if(sunken == true) { //if the ship is sunken then increments to the sunken ship variable
sunkenShips++;
}
}
}
}
if (validBoard(boardArray) == 12 && sunken == true) { //checks if board is valid using other method and if board has sunken ships
return sunkenShips;
}
else if (validBoard(boardArray)==12) {
for(char[] row: boardArray) {
for(int i = 0; i < row.length; i++) { //goes through the array to check if there aren't any ships
if (row[i] == 'S') { //checks if there is a ship
boolean validShip = true; //used to checking if its a valid ship (2-5 squares in length)
int iii = 0; //resets so it can check if it is a one S (not a ship) in each row
for(int j = i; j < row.length && j < i + 5; j++) { // same logic as above
iii++;
if(row[j] != 'S' && iii == 1) { //same logic as above to check if its a ship
validShip = false;
break;
} else {
validShip = true;
}
}
if (validShip == false) { // if there aren't ships it should return this value
return 0;
}
}
}
}
}
return 2; //default return value
}
Я попробовал много настроек: эта часть кода перебирает следующие 4 пробела, чтобы проверить, является ли это действительным боевым кораблем, и оператор проверки if, чтобы проверить, является ли он действительным или нет ( минимум 2 пробела). Но каждый раз он либо не выполняет оператор if, либо в последнее время неправильно выполняет цикл for.
for(int j = i; j < row.length && j < i + 5; j++) { //if it is sunken it checks whether its a valid sunken ship (2-5 squares long), it will go on until the 5th square and/or until the end of the row
ii++;
if(row[j] != '*' && ii == 1) { //checks if the next square after the one is was on is a * and if not which would make it only 1 star and not a sunken ship, break out of the loop
sunken = false; //changes it to false therefore
break;
}
}
Вот вопрос по этому методу для всех, кому интересно:
Write a method that when given a valid board (see above – assume the input board is valid) returns the number of sunk ships. If there are no ships on the board (this is still a valid board) a value should be returned.
Итак, я создаю метод для игры с линкорами, которая состоит из кораблей размером от 2 до 5 квадратов по горизонтали на сетке 10x10 на Java. Этот метод заключается в подсчете количества затонувших кораблей в сетке, которые отмечены знаком «*», корабль будет отмечен знаком «S» и водой «.». Я разработал этот метод, но продолжаю сталкиваться с проблемой при правильном подсчете количества затонувших кораблей, поскольку он либо считает затонувшие корабли с одной звездой (которые не являются допустимыми кораблями) подряд как затонувшие корабли, но недавно я столкнулся с проблема, заключающаяся в том, что все отдельные звезды считаются затонувшими кораблями. Как вы можете видеть на доске ниже, предполагается, что он возвращает 1 корабль, поскольку это единственный действительный корабль на доске, но когда я запускаю этот метод, он возвращает 4. Это также проблема, возникающая позже в методе подсчета количества кораблей, которых нет на доске/сетке. Вот доска/сетка: [code] static char[][] board = { {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}, {'.', '.', 'S', '.', '.', '*', '*', '.', '.', '.'}, {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}, {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}, {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}, {'.', '.', '.', '.', '.', '*', '.', '.', '.', '.'}, {'.', '.', '.', '.', '.', '*', '.', '.', '.', '.'}, {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}, {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'}, {'.', '.', '.', '.', '.', '.', '.', '.', '.', '.'} }; [/code] [code]public static int sunkenShips(char boardArray[][]) { board = boardArray; int sunkenShips = 0; //counts the amount of sunken ships boolean sunken = false; //used later to check if the the space is a sunken ship for(char[] row : boardArray) { //loops through board array for(int i = 0; i < row.length; i++) { //loops through each row if(row[i] == '*') { //checks if current element is a sunken ship sunken = true; //sets it to true then int ii = 0; //resets so it can check if it is a one star (not a sunken ship) in each row for(int j = i; j < row.length && j < i + 5; j++) { //if it is sunken it checks whether its a valid sunken ship (2-5 squares long), it will go on until the 5th square and/or until the end of the row ii++; if(row[j] != '*' && ii == 1) { //checks if the next square after the one is was on is a * and if not which would make it only 1 star and not a sunken ship, break out of the loop sunken = false; //changes it to false therefore break; } } if(sunken == true) { //if the ship is sunken then increments to the sunken ship variable sunkenShips++; } } } } if (validBoard(boardArray) == 12 && sunken == true) { //checks if board is valid using other method and if board has sunken ships return sunkenShips; } else if (validBoard(boardArray)==12) { for(char[] row: boardArray) { for(int i = 0; i < row.length; i++) { //goes through the array to check if there aren't any ships if (row[i] == 'S') { //checks if there is a ship boolean validShip = true; //used to checking if its a valid ship (2-5 squares in length) int iii = 0; //resets so it can check if it is a one S (not a ship) in each row for(int j = i; j < row.length && j < i + 5; j++) { // same logic as above iii++; if(row[j] != 'S' && iii == 1) { //same logic as above to check if its a ship validShip = false; break; } else { validShip = true; } } if (validShip == false) { // if there aren't ships it should return this value return 0; } } } } } return 2; //default return value } [/code] Я попробовал много настроек: эта часть кода перебирает следующие 4 пробела, чтобы проверить, является ли это действительным боевым кораблем, и оператор проверки if, чтобы проверить, является ли он действительным или нет ( минимум 2 пробела). Но каждый раз он либо не выполняет оператор if, либо в последнее время неправильно выполняет цикл for. [code]for(int j = i; j < row.length && j < i + 5; j++) { //if it is sunken it checks whether its a valid sunken ship (2-5 squares long), it will go on until the 5th square and/or until the end of the row ii++; if(row[j] != '*' && ii == 1) { //checks if the next square after the one is was on is a * and if not which would make it only 1 star and not a sunken ship, break out of the loop sunken = false; //changes it to false therefore break; } } [/code] Вот вопрос по этому методу для всех, кому интересно: [code]Write a method that when given a valid board (see above – assume the input board is valid) returns the number of sunk ships. If there are no ships on the board (this is still a valid board) a value should be returned.[/code]
Я пишу игру о линкорах для своего студенческого проекта и хочу рандомизировать позиции кораблей в начале игры. В моей программе есть абстрактный суперкласс Ship, который разветвляется на четыре различных типа других кораблей:
Я пишу игру о линкорах для своего студенческого проекта и хочу рандомизировать позиции кораблей в начале игры. В моей программе есть абстрактный суперкласс Ship, который разветвляется на четыре различных типа других кораблей:
Я пишу игру о линкорах для своего студенческого проекта и хочу рандомизировать позиции кораблей в начале игры. В моей программе есть абстрактный суперкласс Ship, который разветвляется на четыре различных типа других кораблей:
У меня есть карта C++, которая управляет загруженными регионами. С каждым регионом связан MTLBuffer для геометрии, созданной после преобразования данных региона в сетку. Идея состоит в том, чтобы сохранить ссылку на каждый буфер внутри карты C++,...
У меня есть карта C++, которая управляет загруженными регионами. С каждым регионом связан MTLBuffer для геометрии, созданной после преобразования данных региона в сетку. Идея состоит в том, чтобы сохранить ссылку на каждый буфер внутри карты C++,...