2017-01-26 2 views
-1

кода я сейчас печатает сетку, сделанную из массива:Java - изменение одного элемента в представлении сетки

//some code that generates the array gameCards[] = {'a','a','a','a','b','b','b','b'} 
//n is the size/length of the array 
public String BoardToString(){ 

    int gridCount = 1; 
    int cardCount = 0; 
    char[][] showBoard = new char[n/4][4]; 
    while (cardCount < n){ 
     for(int row = 0; row < (n/4); row++){ 
      for(int column = 0; column < 4; column++){ 
       showBoard[row][column] = gameCards[cardCount]; // also how can I use gameCards if it's generated in another method within the same class? 
       System.out.print("X (" + gridCount + ") "); 
       gridCount++; 
       cardCount++; 
      } 
      if ((n/4) > 1) System.out.println(); 
     } 
    } 
} 

Это напечатает что-то вроде этого:

// if n = 8 
X(1) X(2) X(3) X(4) 
X(5) X(6) X(7) X(8) 

Сретения сетки соответствует порядку элементов в исходном массиве. Если я хочу, чтобы добиться чего-то вроде этого:

a(1) X(2) X(3) X(4) 
X(5) X(6) X(7) X(8) 

или

a(1) X(2) X(3) X(4) 
X(5) b(6) X(7) X(8) 

Как я должен написать цикл так, он может напечатать большую часть замаскированной сетки и показывает только один фактический элемент (максимальный элемент I нужно выявить 2)?

+0

Когда и где вы хотите напечатать «a» или «b», каково условие для этого? Кроме того, ваш BoardToString() не возвращает строку, указанную в ее подписи. –

+0

Это на самом деле для карточной игры Pairs. Игроки могут перевернуть любую карту, которую они хотят, и доска должна открыть карту, которую они просто перевернули. Если две карты совпадают, они должны оставаться открытыми; если есть несоответствие, они снова будут откидываться назад (только показать X). Я сделал свой массив, должен ли я изменить его на строки? – aRandomStudent

+0

Чтобы нарисовать «a» или «b» для карты, которую выбирает игрок, метод BoardToString() должен знать карту, выбранную в виде (x, y) позиции в showBoard. –

ответ

0

В основном вам необходимо сохранить координаты выбранной пользователем карты. Затем при печати карты проверьте, выбран ли пользователь карты. Если это так, напечатайте ее букву вместо буквы X. Запомните первый вариант и повторите процесс для второй карты. После второго раунда очистите две карты, которые вы сохранили и повторите.

for(int column = 0; column < 4; column++){ 
    showBoard[row][column] = gameCards[cardCount]; // also how can I use gameCards if it's generated in another method within the same class? 
    if (pickedRow1 == row && pickedCol1 == column || pickedRow2 == row && pickedCol2 == column) { 
     System.out.print(CARD_LETTER + " (" + gridCount + ") "); 
    } else {   
     System.out.print("X (" + gridCount + ") "); 
    } 
    gridCount++; 
    cardCount++; 
} 

Для вашего второго вопроса. Когда вы создаете gameCards в другом методе, либо передайте его BoardToString в качестве параметра, либо вы можете сохранить его на instance variable и позже получить доступ к нему в методе BoardToString.

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