2016-09-08 4 views
0

Как показать содержимое шахматной доски в виде строк на языке C (шахматные фигуры и точки или пробелы для пустых мест) и сохранить строки в таблице? Я могу показать, что я уже сделал.Как показать содержимое шахматной доски в виде строк на языке C и сохранить строки в таблице?

+2

вопрос слишком общий. Вы спрашиваете о печати на экране или внутреннем представлении? Пожалуйста, поделитесь тем, что у вас есть. – eyalm

+2

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

+1

Добро пожаловать в переполнение стека! __ «Я могу показать ...» __, да, пожалуйста, покажите свои исследования/отладки. Сначала прочитайте страницу [Ask]. –

ответ

1

Вообще то, что вам нужно, это массив строк 8x8. Так как строки C представляют собой массивы символов с нулевым завершением, он заканчивается как массив 3D-символов.

Что-то вроде:

#define MAX_TEXT 30 
char board[8][8][MAX_TEXT]; 

int i, j; 
for (i=0; i<8; ++i) 
{ 
    for (j=0; j<8; ++j) 
    { 
     strcpy(board[i][j], "."); // Make all spots empty 
    } 
} 

strcpy(board[0][1], "knight"); // Put a knight at location (0, 1) 

// and so on ... 

Update из-за комментарии

разместить 4 рыцарей с помощью петли, вы можете сделать что-то вроде:

for (i=0; i<8; i = i + 7) // i will be 0 and 7 
{ 
    for (j=1; j<8; j = j + 5) // j will be 1 and 6 
    { 
     strcpy(board[i][j], "knight"); // Put a knight at location (0, 1) 
             //       (0, 6) 
             //       (7, 1) 
             //       (7, 6) 
    } 
} 

P.S. Я надеюсь, что локации правильно один раз - я не шахматист ...

+0

И есть ли способ, которым я могу добавить 4 рыцарей, не написав в 4 раза слово рыцарь? –

+0

@ J.Doe - см. Обновленный ответ – 4386427

+0

Места правильные! Я скомпилировал и выполнил программу, и она сработала! –

4
char board[][sizeof("♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜")] = { 
    {"♜ ♞ ♝ ♛ ♚ ♝ ♞ ♜"}, 
    {"♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟"}, 
    {"… … … … … … … …"}, 
    {"… … … … … … … …"}, 
    {"… … … … … … … …"}, 
    {"… … … … … … … …"}, 
    {"♙ ♙ ♙ ♙ ♙ ♙ ♙ ♙"}, 
    {"♖ ♘ ♗ ♕ ♔ ♗ ♘ ♖"} 
}; 

Каждый кусок доски и многоточие многобайтные символы

strlen("♜") == 3

strlen("…") == 3

пример перемещения лошади:

♜ … ♝ ♛ ♚ ♝ ♞ ♜ 
♟ ♟ ♟ ♟ ♟ ♟ ♟ ♟ 
… … ♞ … … … … … 

#define ROWS 8 
#define DOT "…" 
#define MBSZ sizeof(DOT) 
#define CELLS (MBSZ + 1) 

char *pt1 = board[0] + (CELLS * 1); /* 1 cell */ 
char *pt2 = board[2] + (CELLS * 2); /* 2 cells */ 

memmove(pt2, pt1, MBSZ); 
memmove(pt1, DOT, MBSZ); 

for (int i = 0; i < ROWS; i++) { 
    printf("%s\n", board[i]); 
} 
+1

Так здорово - может быть, не совсем то, о чем попросил ОП, но это гораздо более круто. Тем не менее, я бы удалил пробелы. – 4386427

+0

Спасибо @ 4386427, выглядит как узкий без пробелов, возможно, подгоняя шрифт ... –

+0

Я не могу использовать ответ Альтера Манна, у меня есть вопросительные знаки вместо кусков. –