你好,我是一个编程新手,这个任务让我很沮丧,因为我仍然不能让棋子在棋盘上移动。我猜这是我的while循环函数造成的,但仍然不能让它正确。第一个用户输入应该检测要移动的角色的坐标,并显示哪些可用的点,它可以使用validateMove将棋子发送到这些点().这是我的代码,已经查了好几个星期了。
#include <stdio.h>
char board[8][8] = {
{' ', 'B', ' ', 'B', ' ', 'B', ' ', 'B'},
{'B', ' ', 'B', ' ', 'B', ' ', 'B', ' '},
{' ', 'B', ' ', 'B', ' ', 'B', ' ', 'B'},
{'*', ' ', '*', ' ', '*', ' ', '*', ' '},
{' ', '*', ' ', '*', ' ', '*', ' ', '*'},
{'W', ' ', 'W', ' ', 'W', ' ', 'W', ' '},
{' ', 'W', ' ', 'W', ' ', 'W', ' ', 'W'},
{'W', ' ', 'W', ' ', 'W', ' ', 'W', ' '}};
void printBoard()
{
int i , j , k ;
printf("\n ");
for(i=0;i<8;i++)
printf(" %d", i+1 );
printf(" \n");
for(k=0;k<8;k++)
{
printf(" ");
for(i=0;i<42;i++)
{
printf("-");
}
printf(" \n");
printf(" %d ", k+1);
for(j=0;j<8;j++)
{
printf("|| %c ", board[k][j]);
}
printf("|| \n");
}
printf(" ");
for(i=0;i<42;i++)
{
printf("-");
}
printf(" \n");
}
void validateMoveChecker(int x1, int y1, int af, int bf, int v)
{
int a, b;
for(a=1, b=1; board[x1+ af * a][y1+ bf * b] == '*'; a++, b++)
{
if((x1+af*a) == -1 || (y1+bf*b)==v)
return;
printf("%d%d , ", x1+af*a , y1+bf*b);
}
}
int validateMove(int x1 , int y1)
{
printf( "Available coordinates to send the piece are: \n" );
validateMoveChecker(x1, y1, -1, 1, 8);
validateMoveChecker(x1, y1, 1, -1, -1);
validateMoveChecker(x1, y1, 1, 1, 8);
validateMoveChecker(x1, y1, -1, -1, -1);
}
int getChange(int x1 ,int y1 ,int x2 ,int y2 )
{
char temp;
temp = board[x1][y1];
board[x1][y1] = board[x2][y2];
board[x2][y2] = temp;
}
int check(int x, int y)
{
switch(board[x][y])
{
case 'B':
return 1;
break;
default:
return 0;
}
}
int main(){
int x1, y1, x2, y2, pos1, pos2, x, y;
char board[8][8];
printBoard();
do
{
printf("\nEnter the position of the piece [X,Y]: ");
scanf("%d", &pos1);
y1 = pos1%10;
x1 = pos1/10;
switch(board[x1][y1])
{
case 'B': validateMove(x1, y1);
break;
default: printf("Invalid Position. Please enter again!");
}
}while(x1!=0 && y1!=0);
printf("\nEnter the position on where to send the piece [X,Y]: ");
scanf("%d", &pos2);
y2 = pos2%10;
x2 = pos2/10;
getChange(x1 ,y1 ,x2 ,y2);
if((x2-x1==y2-y1)!=0)
{
getChange(x1 ,y1 ,x2 ,y2);
check(x,y);
}
}
1条答案
按热度按时间j7dteeu81#
我修改了printBoard(),使其显示从0开始的索引(1也可以,但之后需要调整索引):
然后在
main()
中进行了以下更改:1.删除局部变量
board
;您的代码依赖于一个同名的全局变量。但是,将board
传递给需要它的函数比使用全局变量更好。1.将两个
scanf()
改为直接读取坐标。1.在
getChange()
之后添加了printBoard()
以验证移动是否有效。1.(未修复)变量
x
和y
未初始化。和示例会话: