Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/102.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言国际象棋游戏-某些棋子不动_C_Chess - Fatal编程技术网

C语言国际象棋游戏-某些棋子不动

C语言国际象棋游戏-某些棋子不动,c,chess,C,Chess,我正在用C做一个国际象棋游戏。它需要严格的C。但我的棋子并没有像它们应该的那样对运动做出反应。工件的运动由坐标定义 我认为问题应该出在这个功能上: // função mover peça com problema encontrar int moverPeca(int linOri, int linDes, int colOri, int colDes) { int mover = 0; char peca; //deslocamento vertical e desl

我正在用C做一个国际象棋游戏。它需要严格的C。但我的棋子并没有像它们应该的那样对运动做出反应。工件的运动由坐标定义

我认为问题应该出在这个功能上:

// função mover peça com problema encontrar
int moverPeca(int linOri, int linDes, int colOri, int colDes) {
    int mover = 0;
    char peca;
    //deslocamento vertical e deslocamento horizontal (nº linhas que avança)
    int dV = abs(linDes - linOri);
    int dH = abs(colDes - colOri);

    if ((linOri >= 0 && linOri < 8 && colOri >= 0 && colOri < 8) &&
        (linDes >= 0 && linDes < 8 && colDes >= 0 && colDes < 8)) {
        peca = xadrez[linOri][colOri];

        // definição do movimento apropriado da peça Torre - mexe na vertical e na horizontal quantas casas quiseres
        if ((peca == 'T' || peca == 't') && (dV == 0 || dH == 0)) {

            mover = 1;
        }

        // definição do movimento apropriado da peça Bispo - só mexe na diagonal quantas casas quiseres
        if ((peca == 'B' || peca == 'b') && (dV == dH)) {

            mover = 1;
        }

        // definição do movimento apropriado da peça Cavalo mexe em L 2/3 ou 3/2
        if ( (peca == 'C' || peca == 'c') && 
            ( (dV == 1 && dH == 2) || (dV == 2 && dH == 1) ) ) {

            mover = 1;
        }

        // definição do movimento apropriado da peça Q Rainha anda de todas as formas H e V
        if ( (peca == 'Q' || peca == 'q') && 
            ( (dV == dH) || (dV == 0) || (dH == 0) ) ) {

            mover = 1;
        }

        // definição do movimento apropriado da peça K REi só anda 1 casa na V ou H ou Diagonal
        if ( (peca == 'K' || peca == 'k') && 
            ( (dV >= 0 && dV <= 1) && (dH >= 0 && dH <= 1 ) ) ) {

            mover = 1;
        }

        // definição do movimento apropriado da peça p peão pode andar 2 casas a 1 vez e depois anda sempre só uma e come na diagonal
        if ((peca == 'p') && ( (linOri - linDes) == 1) && (dH == 0) ) {

            mover = 1;
        }

        // definição do movimento apropriado da peça p peão pode andar 2 casas a 1 vez e depois anda sempre só uma e come na diagonal

        if ((peca == 'P') && ( (linDes - linOri) == 1) && (dH == 0) ) {

            mover = 1;
        }


        if (mover) {
            xadrez[linDes][colDes] = xadrez[linOri][colOri];
            xadrez[linOri][colOri] = ' ';
        }
        return 1;
    }
    else {
        return 0;
    }
}
//função mover peça com问题
int moverPeca(int linOri、int linDes、int colOri、int colDes){
int=0;
山核桃;
//垂直方向和水平方向(nºlinhas que avança)
int dV=abs(林德斯-林诺里);
int dH=绝对值(冷色-彩色);
如果((linOri>=0&&linOri<8&&colOri>=0&&colOri<8)&&
(林德斯>=0&&林德斯<8&&colDes>=0&&colDes<8)){
peca=xadrez[linOri][colOri];
//确定托雷的适当行动——垂直方向和水平方向
如果((peca='T'| | peca='T')&&(dV==0 | | dH==0)){
mover=1;
}
//比斯波和平运动的定义——对角线量
如果((五氯苯乙酸=‘B’| |五氯苯乙酸=‘B’&&(dV==dH)){
mover=1;
}
//第2/3 ou 3/2号决议
如果((五氯苯乙酸=‘C’| |五氯苯乙酸=‘C’)&&
((dV==1&&dH==2)| |(dV==2&&dH==1))){
mover=1;
}
//将正式行动定义为正式行动
如果((peca='Q'| | peca=='Q')&&
((dV==dH)| |(dV==0)| |(dH==0))){
mover=1;
}
//定义一个对角线方向的运动
如果((peca='K'| | peca='K')&&
((dV>=0&&dV=0&&dH=0&&linOri<8&&colOri>=0&&colOri<8)&&
(林德斯>=0&&林德斯<8&&colDes>=0&&colDes<8)){
peca=xadrez[linOri][colOri];
//确定托雷的适当行动——垂直方向和水平方向
如果((peca='T'| | peca='T')&&(dV==0 | | dH==0)){
mover=1;
}
//比斯波和平运动的定义——对角线量
如果((五氯苯乙酸=‘B’| |五氯苯乙酸=‘B’&&(dV==dH)){
mover=1;
}
//第2/3 ou 3/2号决议
如果((五氯苯乙酸=‘C’| |五氯苯乙酸=‘C’)&&
((dV==1&&dH==2)| |(dV==2&&dH==1))){
mover=1;
}
//将正式行动定义为正式行动
如果((peca='Q'| | peca=='Q')&&
((dV==dH)| |(dV==0)| |(dH==0))){
mover=1;
}
//定义一个对角线方向的运动
如果((peca='K'| | peca='K')&&

((dV>=0&&dV=0&&dH您的
moverPeca
函数需要以下顺序的参数:

int moverPeca(int linOri, int linDes, int colOri, int colDes)
即按该顺序排列的行原点、行目标、列原点和列目标

但您是通过以下方式调用它:

int resultado = moverPeca(linOri, colOri, linDes, colDes);
结果是
colOri
linDes
在函数调用中被交换。因此,代码没有尝试将棋子从[6,4]移动到[5,4],而是尝试将棋子从[6,4]移动到[4,4]

简单的修复方法是像这样声明moverPeca:

int moverPeca(int linOri, int colOri, int linDes, int colDes)

发布的代码包含几个不可移植的语句。例如,
system(“CLS”);
getch()
结果是代码将不会在windowsOT以外的OSs上运行(甚至编译):关于以下语句:
scanf(“%d%d”),&linOri,&colOri);
始终检查返回值(而不是参数值)为确保操作成功,请注意:
情况1:break;
由于正在进行的操作,值(在代码中的这一点)的可能性为0:
if(resultado!=1)
此外,应始终具有一个
默认值:
大小写,以处理意外值。因此:为了便于阅读和理解:遵循公理:每行仅一条语句,并且(最多)每个语句声明一个变量。您是当时正式提名的代码英雄!非常感谢!我不知道参数的顺序会如此之高important@DianaMoura-我很乐意提供帮助。但我需要诚实地说-来stackoverflow招募其他人来调试您的程序并不能使您的应用程序增长参数排序是几乎所有编程语言的基本概念。不匹配的参数排序是即使是经验丰富的工程师也会犯的常见错误。但您应该能够自己诊断此错误。只需添加额外的“printf”在代码中显示变量值和程序流的语句将为您解决此问题。感谢@selbie的提示,我会记住它们。这也是我第一次学习编程语言(第一门课程,第一年)所以我还不习惯调试。我一定会学会的。不过我也把它寄给了我的老师。
int moverPeca(int linOri, int colOri, int linDes, int colDes)