Как показать содержимое шахматной доски в виде строк на языке C (шахматные фигуры и точки или пробелы для пустых мест) и сохранить строки в таблице? Я могу показать, что я уже сделал.Как показать содержимое шахматной доски в виде строк на языке C и сохранить строки в таблице?
ответ
Вообще то, что вам нужно, это массив строк 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. Я надеюсь, что локации правильно один раз - я не шахматист ...
И есть ли способ, которым я могу добавить 4 рыцарей, не написав в 4 раза слово рыцарь? –
@ J.Doe - см. Обновленный ответ – 4386427
Места правильные! Я скомпилировал и выполнил программу, и она сработала! –
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]);
}
Так здорово - может быть, не совсем то, о чем попросил ОП, но это гораздо более круто. Тем не менее, я бы удалил пробелы. – 4386427
Спасибо @ 4386427, выглядит как узкий без пробелов, возможно, подгоняя шрифт ... –
Я не могу использовать ответ Альтера Манна, у меня есть вопросительные знаки вместо кусков. –
вопрос слишком общий. Вы спрашиваете о печати на экране или внутреннем представлении? Пожалуйста, поделитесь тем, что у вас есть. – eyalm
Пожалуйста, покажите, что вы уже сделали, и постарайтесь быть как можно более конкретными в своем вопросе. –
Добро пожаловать в переполнение стека! __ «Я могу показать ...» __, да, пожалуйста, покажите свои исследования/отладки. Сначала прочитайте страницу [Ask]. –