如何在C语言中将棋盘内容显示为字符串并将字符串存储在table中?
How can I display the chess board content as strings in C language and store the strings in a table?
如何在 C 语言中将棋盘内容显示为字符串(棋子和点或空白点的空格)并将字符串存储在 table 中?
我可以展示我已经做过的事情。
一般来说,您需要的是一个 8x8 的字符串数组。由于 C 字符串本身是零终止的 char 数组,因此它最终成为 3D char 数组。
类似于:
#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 ...
因评论而更新
要使用循环放置 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。我希望这些位置一次都是正确的 - 我不是国际象棋选手...
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]);
}
如何在 C 语言中将棋盘内容显示为字符串(棋子和点或空白点的空格)并将字符串存储在 table 中? 我可以展示我已经做过的事情。
一般来说,您需要的是一个 8x8 的字符串数组。由于 C 字符串本身是零终止的 char 数组,因此它最终成为 3D char 数组。
类似于:
#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 ...
因评论而更新
要使用循环放置 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。我希望这些位置一次都是正确的 - 我不是国际象棋选手...
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]);
}