Как распечатать сетку объектов 10 x 10 на консоли - PullRequest
1 голос
/ 04 ноября 2011

Я делаю игру на линейных кораблях, чтобы играть в консоли - Как вы NSLog строки, чтобы они выглядели как сетка 10 х 10, а не длинный список Каждая координата является объектом "X" из boardArray. В идеале я хотел бы сделать это в цикле - но, что угодно! Спасибо.

NSMutableArray *boardArray = [[NSMutableArray alloc]initWithCapacity:110];
NSMutableString *blank =[[NSMutableString alloc]initWithString:@"X"];

for (int x = 0; x < 101; x++) {
    [boardArray insertObject:blank atIndex:x];
}


for (int x = 0; x < 100; x++){

    // what goes here to print (NSLog) a 10 x 10 grid of objects
    // each object is a string @"X" from the boardArray.

}

Ответы [ 4 ]

3 голосов
/ 04 ноября 2011

Быстрый пример:

// Create Array (01, 02, 03, 04, 05, etc.)

NSMutableArray *theArray = [[NSMutableArray alloc]init];
for (int i = 0; i < 100; i++) {
    [theArray addObject:[NSString stringWithFormat:@"%02d",i]];
}

// Print Array

for (int i = 0; i < 10; i++) {
    NSArray *subArray = [theArray subarrayWithRange:NSMakeRange(0+(i*10),10)];
    NSLog(@"%@",[subArray componentsJoinedByString:@" "]);
}

Выход:

00 01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18 19
20 21 22 23 24 25 26 27 28 29
30 31 32 33 34 35 36 37 38 39
40 41 42 43 44 45 46 47 48 49
50 51 52 53 54 55 56 57 58 59
60 61 62 63 64 65 66 67 68 69
70 71 72 73 74 75 76 77 78 79
80 81 82 83 84 85 86 87 88 89
90 91 92 93 94 95 96 97 98 99
1 голос
/ 04 ноября 2011

Для меня имеет больше смысла, чтобы ваша модель соответствовала вашей структуре, например, 10 x 10 является двухмерным, поэтому используйте 2D-структуру.

  NSMutableArray *board = [[NSMutableArray alloc] initWithCapacity:10];
  NSMutableArray *row   = [[NSMutableArray alloc] initWithCapacity:10];

  for (int i = 0; i < 10; i++) {
    [row addObject:@"X"];
  }

  [board addObject:row];

  NSMutableArray *preFilledRow = nil;

  for (int i = 0; i < 9; i++) {
    preFilledRow = [row mutableCopy];
    [board addObject:preFilledRow];
    [preFilledRow release]; preFilledRow = nil;
  }

  [row release]; row = nil;

  for (NSMutableArray *boardRow in board) {
    NSLog(@"%@", [boardRow componentsJoinedByString:@" "]);
  // printf("%s\n", [[boardRow componentsJoinedByString:@" "] UTF8String]); <- Use this if you don't want additional info printed
  }

  [board release]; board = nil;
0 голосов
/ 04 ноября 2011

Вы можете использовать C's printf(), который работает так же, как NSLog, но не печатает фактическую информацию журнала (время и другую информацию), и автоматически не ставит новую строку (вы все еще можете использовать \n)

0 голосов
/ 04 ноября 2011

Вам нужно взглянуть на класс NSMutableString, чтобы создать вашу строку для последующего отображения в NSLog ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...