2025-03-26 09:16:50
几个问题:
weizhi这个存放坐标的数组需要用二维数组,否则只能存放一行位置;
初始化棋盘的动作从draw函数里移出来,放在main函数里做,draw只负责把当前棋盘和棋子画出来,初始化棋盘就是输入棋盘的大小;
存放棋子的二维数组p需要初始化;
draw画棋盘的时候,要判断p数组对应存放了什么字符来决定输出什么内容;
判断棋子超过棋盘范围,只需要检查输入的坐标x和y是否都比棋盘小就可以了,放在for循环里,每次都会被执行到。
代码改了一下,你看一看。
#include<stdio.h>
#define N 20
#define X 10
struct zuobiao
{
int x;
int y;
};
struct zuobiao weizhi[N][N];
char p[N][N];
int len;
void draw ();
void main()
{
int i,j;
int a,b;
memset(p, 0, N*N);
printf ("Please input the five_chess's board\n");
scanf ("%d", &len);
draw();
printf ("请输入一个坐标:例如 3,4 \n");
scanf("%d,%d", &a,&b);
if(a >= len || b >= len)
printf("棋子超过棋盘范围\n");
for(i=0;i<len;i++)
{
for(j=0;j<len;j++)
{
if ((weizhi[i][j].x==a) && (weizhi[i][j].y==b))
{
p[a][b]='@';
draw();
}
}
}
}
void draw()
{
int i,j,k;
for (i = 0; i<len; i++)
{
if(i==0)
printf("%3d",i);
else
printf("%2d", i );
}
printf("\n");
for (i = 0; i<len; i++)
{
printf ("%2d", i );
for (k = 0; k< len; k++)
{
if(p[i][k] == 0)
printf ("十");
else
printf ("%c ", p[i][k]);
weizhi[i][k].x=i;
weizhi[i][k].y=k;
}
printf ("\n");
}
}