2015-03-14 5 views
0

Я хочу создать мини-игру в консоли что-то вроде лабиринта. мне нужно создать что-то вроде этого на первый https://i.stack.imgur.com/X3SZS.jpg Мой вопрос, как я могу заполнить массив вроде gamemap без определения каждый один [] [] позиции, как я уже сделалКонсоль для лабиринта - Двумерные массивы

`char s = '#'; 
    char [][] ary = new char [5][5];x 
    ary[0][0] = s; 
    ary[0][1] = s; 
    ary[0][2] = s; 
    ary[0][4] = s; 

    ary[1][0] = s; 
    ary[1][1] = s; 
    ary[1][4] = s; 

    ary[2][0] = s; 
    ary[2][1] = s; 
    ary[2][3] = s; 
    ary[2][4] = s; 

    ary [3][0] = s; 
    ary [3][3] = s; 
    ary [3][4] = s; 

    ary [4][2] = s; 
    ary [4][3] = s; 
    ary [4][4] = s; 

Я хочу сделать проще что-то вроде

char [][] ary {{#, #, #, , #}; 
       {#, #, , , #}; 

и так далее ..

это возможно? Спасибо за ваше время.

ответ

0

карте данные должны быть сохранены как данные, а не код, вероятно, в данном случае в виде текстового файла, возможно, что-то, что выглядит как:

# # # # # # # 
# # # # 
# #  # 
#   # # 
# # # # # # # 

Затем вы должны иметь код, который читает в текстовый файл и использует свою информацию для заполнения вашего массива карт. Я бы использовал объект Scanner, инициализированный текстовым файлом, а затем прочитал в каждой строке свой собственный отдельный сканер, инициализированный каждой строкой текста, и заполнил мой массив в вложенных циклах.

Поместив лабиринт в область данных, вы значительно увеличите гибкость своей программы, теперь вы можете изменить свою карту без изменения кода.

Что-то подобное может работать, если вы знали, с уверенностью содержимое текстового файла, включая число строк и число маркеров в каждой строке ...

public static char[][] readMap(String filePath) throws FileNotFoundException { 
    char[][] map = new char[MAP_ROWS][MAP_COLUMNS]; 
    File mapFile = new File(filePath); 
    Scanner mapScanner = new Scanner(mapFile); 
    for (int row = 0; row < map.length; row++) { 
    String line = mapScanner.nextLine(); 
    Scanner lineScanner = new Scanner(line); 
    for (int col = 0; col < map[row].length; col++) { 
     map[row][col] = lineScanner.next().charAt(0); 
    } 
    lineScanner.close(); 
    } 
    if (mapScanner != null) { 
    mapScanner.close(); 
    } 

    return map; 
} 

В противном случае рекомендуется использовать вложенные ArrayLists и проверки наличия маркеров сканера Перед чтением.

Смежные вопросы