• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Ruben_Barbosa

Xadrez em c urgente

9 mensagens neste tópico

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>

#define	PEAO    0
#define	CAVALO  1
#define	BISPO   2
#define	TORRE   3
#define	RAINHA  4
#define	REI     5
#define	VAZIO   6
#define	BRANCO  0
#define	PRETO   1



int peca[64] = {
    TORRE, CAVALO, BISPO, RAINHA, REI, BISPO, CAVALO, TORRE,
    PEAO, PEAO, PEAO, PEAO, PEAO, PEAO, PEAO, PEAO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    PEAO, PEAO, PEAO, PEAO, PEAO, PEAO, PEAO, PEAO,
    TORRE, CAVALO, BISPO, RAINHA, REI, BISPO, CAVALO, TORRE
};

int cor[64] = {
    PRETO, PRETO, PRETO, PRETO, PRETO, PRETO, PRETO, PRETO,
    PRETO, PRETO, PRETO, PRETO, PRETO, PRETO, PRETO, PRETO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO, VAZIO,
    BRANCO, BRANCO, BRANCO, BRANCO, BRANCO, BRANCO, BRANCO, BRANCO,
    BRANCO, BRANCO, BRANCO, BRANCO, BRANCO, BRANCO, BRANCO, BRANCO
};

void move();


int main()
{
    setlocale(LC_ALL,"");
    tabuleiro();
}

/* tabuleiro */

tabuleiro()
{
    char nomePecas[] = "PCBTDRpcbtdr";//defnir as peças
    int i,s=1;
    for (i = 0; i < 64; i++) {

    if ((i & 7) == 0) {
    printf("   +---+---+---+---+---+---+---+---+\n");
    if (i <= 64) {
    printf(" %d |",s++); //imprimir coluna de 1 a 8
}
}
    if (peca[i] == VAZIO)
    printf("   |");
    else {
    printf(" %c |", nomePecas[peca[i] + (cor[i] == BRANCO ? 0 : 6)]); // Diferenças entre peças brancas e Pretas
}
    if ((i & 7) == 7)
    printf("\n");
}
    printf("   +---+---+---+---+---+---+---+---+\n     a   b   c   d   e   f   g   h\n");

}



//Movimentos
void move()
{
    int i;
    for (i = 0; i < 64; i++)	/* corre todo o vector tabuleiro*/
///       if (cor[i] == lado)

        switch (peca[i])
        {

            case PEAO:

            /**movimento do peao branco*/

            // Movimento para a frente
            if (peca[i+8]==VAZIO){
                peca[i+8]==PEAO;}
            return 0;

            // 2 Movimento para a frente
           if(peca[i+8]==VAZIO)            // Movimento para a frente
            peca[i+8]==PEAO;
            else
                if(peca[i+16]==VAZIO)            // 2 Movimento para a frente
                peca[i+16]==PEAO;
                else
                    if(peca[i]==BRANCO && peca[i+7]==PRETO)// Movimento para capturar a peça esquerda
                    peca[i+7]==PEAO;
                    else
                        if(peca[i]==BRANCO && peca[i+9]==PRETO)  // Movimento para capturar a peça direita
                        peca[i+9]==PEAO;
                        else printf("Movimento inválido!!!\a\n\n");

            return 0;


            /**movimento do peao preto*/


            if(peca[i-8]==VAZIO)            // Movimento para a frente
            peca[i-8]==PEAO;
            else
                if(peca[i-16]==VAZIO)            // 2 Movimento para a frente
                peca[i-16]==PEAO;
                else
                    if((peca[i]==BRANCO) && (peca[i-7]==PRETO))// Movimento para capturar a peça esquerda
                    peca[i-7]==PEAO;
                    else
                        if((peca[i]==BRANCO) && (peca[i-9]==PRETO))  // Movimento para capturar a peça direita
                        peca[i-9]==PEAO;
                        else printf("Movimento inválido!!!\n\n");

            return 0;




                /**movimento do bispo*/

            case BISPO:

            for(i=i+9; i<64 && i+9==VAZIO; i+=9)// diagonal esquerda superior
            peca[i+9]==BISPO;
            break;

            for(i=i-9; i>=0 && i-9==VAZIO; i-=9)// diagonal direita inferior
            peca[i-9]==BISPO;
            break;

            for(i=i+7; i<64 && i+7==VAZIO; i+=7)// diagonal direita superior
            peca[i+7]==BISPO;
            break;

            for(i=i-7; i>=0 && i-7==VAZIO; i-=7)// diagonal esquerda inferior
            peca[i-7]==BISPO;
            break;



            /**movimento da torre*/

            case TORRE:

            for(i=i+8; i<64 && i+8==VAZIO; i+=8)// frente superior
            peca[i+8]==TORRE;
            break;

            for(i=i-8; i>=0 && i-8==VAZIO; i-=8)// diagonal direita inferior
            peca[i-8]==TORRE;
            break;

            for(i=i+1; i<64 && i+1==VAZIO; i+=1)// diagonal direita superior
            peca[i+1]==TORRE;
            break;

            for(i=i-1; i>=0 && i-1==VAZIO; i-=1)// diagonal esquerda inferior
            peca[i-1]==TORRE;
            break;

        /**movimento da rainha*/

            case RAINHA:

            for(i=i+9; i<64 && i+9==VAZIO; i+=9)// diagonal esquerda superior
            peca[i+9]==RAINHA;
            break;

            for(i=i-9; i>=0 && i-9==VAZIO; i-=9)// diagonal direita inferior
            peca[i-9]==RAINHA;
            break;

            for(i=i+7; i<64 && i+7==VAZIO; i+=7)// diagonal direita superior
            peca[i+7]==RAINHA;
            break;

            for(i=i-7; i>=0 && i-7==VAZIO; i-=7)// diagonal esquerda inferior
            peca[i-7]==RAINHA;
            break;

            for(i=i+8; i<64 && i+8==VAZIO; i+=8)// frente superior
            peca[i+8]==RAINHA;
            break;

            for(i=i-8; i>=0 && i-8==VAZIO; i-=8)// diagonal direita inferior
            peca[i-8]==RAINHA;
            break;

            for(i=i+1; i<64 && i+1==VAZIO; i+=1)// diagonal direita superior
            peca[i+1]==RAINHA;
            break;

            for(i=i-1; i>=0 && i-1==VAZIO; i-=1)// diagonal esquerda inferior
            peca[i-1]==RAINHA;
            break;

        //fazer movimentos para comer peças

            case REI:

            if((i+9=VAZIO) && (i<64))// diagonal esquerda superior
            peca[i+9]==REI;
                else
                if((i>=0) && (i-9==VAZIO))// diagonal direita inferior
                peca[i-9]==REI;
                else
                    if((i<64) && (i+7==VAZIO))// diagonal direita superior
                    peca[i+7]==REI;
                    else
                        if((i>=0) && (i-7==VAZIO))// diagonal esquerda inferior
                        peca[i-7]==REI;
                        else
                            if((i<64) && (i+8==VAZIO))// frente superior
                            peca[i+8]==REI;
                            else
                                if((i>=0) && (i-8==VAZIO))// diagonal direita inferior
                                peca[i-8]==REI;
                                else
                                    if((i<64) && (i+1==VAZIO))// diagonal direita superior
                                    peca[i+1]==REI;
                                    else
                                        if((i>=0) && (i-1==VAZIO))// diagonal esquerda inferior
                                        peca[i-1]==REI;
            return 0;
        }
}

        /**avaliação*/

Precisava que isso compila-se :S puxa alguem pdoe dar uma maozinha :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ou seja ,

o tabuleiro já ta impecavel mas o que eu queria era so simplesmente que fizessem-me uma moviemnto de uma peça mover.

Ou seja imprimir o tabuleiro e mexer uma peca B)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Tens de ver qual é a peça que estás a tentar mover e se o movimento para a posição de destino é válido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não acredito que tenhas chegado a esse código todo e não tenhas sequer tentado fazer o movimento das peças.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nao porque eu pesquisei no google e alterei a unica coisa que consigo e imprimir so o tabuleiro meu agora fazer com que uma peca mexa nao :S.

Mas prontos :S , esse codigo do movimentos vi no google XD

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Já reparaste que na função move estás a fazer comparações com o sinal '==' quando devias estar a fazer atribuições com o sinal '=' ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o que me falta mesmo e tipo eu meter as coordenadas 1a e dps 3a para a peca mover :S

se alguem me orientar agradecia B)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora