Я пишу текстовый интерфейс тральщика как домашнее задание для университетского проекта. Я хотел попробовать использовать этот символ Юникода ⚑ (U + 2691) в качестве флага для обозначения мин, и это работает, иногда ... это результат. Когда есть один флаг, матрица имеет хороший отступ, но когда два флага находятся рядом, это как если бы промежутки между ними были меньше. Я почти уверен, что консоль после печати флага продолжает использовать другую кодировку, пока не встретит другой тип (целое число в моем случае). В любом случае, я новичок в Java и неопытен.
Два отдельных флага и два смежных флага:
У меня есть две матрицы: поле, которое содержит все бомбы и числа рядом с ними, и состояние, которое сообщает, была ли ячейка уже обнаружена или нет: в частности, если ячейка в матрице состояний == 0 , он доступен, если == 1, он уже обнаружен, а если == 2, это означает, что пользователь поставил флаг в этой ячейке. Оставляя в стороне код для генерации матрицы, рекурсивный метод для обнаружения всех смежных нулей и методы, которые перечисляют строки и столбцы матрицы, это интересная часть кода:
public class Minesweeper {
//possible initial configuration
private int [][] state = new int [10][10];
private int [][] field = {
{ 0, 1,-1,-1, 1, 0, 1, 1, 1, 0},
{ 0, 1, 2, 2, 1, 0, 1,-1, 1, 0},
{ 0, 1, 2, 3, 2, 1, 1, 1, 2, 1},
{ 0, 1,-1,-1,-1, 1, 0, 0, 2,-1},
{ 0, 1, 2, 3, 2, 1, 0, 0, 1,-1},
{ 0, 0, 0, 0, 1, 1, 2, 1, 3, 2},
{ 0, 0, 0, 0, 1,-1, 2,-1, 2,-1},
{ 1, 2, 1, 0, 1, 1, 3,-1, 2, 1},
{-1, 3,-1, 2, 1, 2, 2, 2, 1, 0},
{-1, 3, 1, 2,-1, 2,-1, 0, 0, 0}};
public void printField() {
String FLAG = "⚑"; //or "⚐"
for (int row = 0; row < field.length; row++) {
for (int col = 0; col < field[row].length; col++) {
if (state[row][col] == 0)
System.out.printf("%4c", '-');
if (state[row][col] == 1 && field[row][col] != -1)
System.out.printf("%4d", field[row][col]);
if (field[row][col] == -1 && state[row][col] == 1)
System.err.printf("%4c", '*');
if (state[row][col] == 2) {
System.err.printf("%4c" , FLAG);
}
}
System.out.println();
}
}
public static void main (String [] args) {
Minesweeper campo = new Minesweeper ();
campo.printField();
}
}