Java: получение координат символа, считывание из файла
Добрый вечер,
В течение нескольких часов я безуспешно искал решение этой проблемы, поэтому решил, что задам вопрос здесь! У меня есть вопрос относительно чтения символов / строк из текстового файла. Я был в состоянии реализовать функцию, которая читает строки из файла. Я использую Greenfoot (Java) для создания игры, которая использует блоки 32x32. Я хотел бы создать мир из этого текстового файла, получив координату x- / y каждого "блока" / "символа" и поместив его в этот мир. Будет ли проще использовать массив? Мой текущий код выглядит так, но я не могу понять, как получить координаты. Может ли он работать с использованием возвращаемого хеш-кода?
public void readFile(String filename) throws IOException
{
String s;
int x = 0;
int y = 0;
// Create BufferedReader and FileReader
BufferedReader r = new BufferedReader(new FileReader(filename));
// Try-catch block as exception handler
try {
while((s = r.readLine()) != null) {
// Create the blocks
GrassBlock A = new GrassBlock();
// Place them in the world
addObject(A, x, y);
// Test to see, if the blocks get recognised
System.out.println(A);
DirtBlock B = new DirtBlock();
System.out.println(B);
addObject(B, x, y);
}
} catch (IOException e) {
System.out.println("Fehler beim Öffnen der Datei");
} finally {
}
}
Мой файл выглядит примерно так:
0000000000
0000000000
AAAAAA00AA
BBBBBB00BB
Я вижу, что я назначил значение "0" для x и y, поэтому, конечно, это не может работать так, но как я могу получить эту позицию? Прямо сейчас функция может читать строки, генерировать блоки в (0, 0) и показывать блоки в консоли с хеш-кодом.
PS Извините, если я использовал неправильный термин для некоторых вещей, я относительно новичок в программировании!
Спасибо джулиан
1 ответ
Просто самый базовый, без слишком большого изменения кода вопроса, не полный
определение номера строки y:
int y = 0; while ((s = ...) != null) { // do something with s y += 1; // or y++ }
аналогично для позиции символа х внутри строки и использования
charAt
чтобы извлечь персонажа:while ((s = ...) != null) { int x = 0; while (x < s.length()) { char ch = s.charAt(x); // do something with ch, x, y - test for 0, A or B and add block x += 1; // or x++ } y += 1; // or y++ }
Заметки: x
объявлен во внешнем (первом) цикле, так как он не нужен в другом месте; x
устанавливается в ноль перед внутренним циклом, так как это начало новой строки; for
цикл может быть использован вместо while
- в основном лучше при использовании счетчиков (например, x
)