Ir ao conteúdo
  • Cadastre-se
Junior Melo Portela

C++ xadrez matriz c++ movimentação das peças

Recommended Posts

Olá pessoal, estou inciando uma disciplina em C++ e estou montando um jogo de xadrez, eu já consegui montar um tabuleiro com as peças, alguém poderia me dizer como eu faço para movimentar as peças, usando 3 arquivos, main.c para a função main, onde ira chamar as funções, xadrez.h header que contenha as assinaturas que vai ser adicionado ao arquivo main,  xadrez.c contendo a implementação das funções. segue a parte que eu já fiz:  

 

#include <stdio.h>

#define TAM_TABULEIRO 8

int main(){
    char tabuleiro[TAM_TABULEIRO][TAM_TABULEIRO];
    for (int i=0;i<TAM_TABULEIRO;i++){
        for (int j=0;j<TAM_TABULEIRO;j++){
            tabuleiro[j]='.';
        }
    }
    
    for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[1]='p';
    }
        for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][0]='t';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][1]='c';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][2]='b';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][3]='d';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][4]='r';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][5]='b';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][6]='c';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][7]='t';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[6]='P';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][0]='T';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][1]='C';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][2]='B';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][3]='D';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][4]='R';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][5]='B';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][6]='C';
    }
            for(int i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][7]='T';
    }
        for (int i=0;i<TAM_TABULEIRO;i++){
        printf("\n");
        for (int j=0;j<TAM_TABULEIRO;j++){
            printf(" %c",tabuleiro[j]);
        }
    }
}

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Junior Melo Portela    para postar seu código é melhor usar o botão   <>   que está lá na barra de ferramentas da janela de responder, pois sem ele seu código ficou faltando os  [ i ]  , e  seu código está bom, mas   não entendi  o que você disse sobre usar 3 arquivos main ,  então  modifiquei o código e ele ficou assim  :

#include <iostream>
#include <stdio.h>
#include <windows.h>
#define TAM_TABULEIRO 8
using namespace std;
char tabuleiro[TAM_TABULEIRO][TAM_TABULEIRO]={
             {'T','C','B','D','R','B','C','T'},
             {'P','P','P','P','P','P','P','P'},
             {'.','.','.','.','.','.','.','.'},
             {'.','.','.','.','.','.','.','.'},
             {'.','.','.','.','.','.','.','.'},
             {'.','.','.','.','.','.','.','.'},
             {'p','p','p','p','p','p','p','p'},
             {'t','c','b','d','r','b','c','t'},
    },a;
typedef enum{BLACK,BLUE,GREEN,CYAN,RED,MAGENTA,BROWN,LIGHTGRAY,DARKGRAY,
LIGHTBLUE,LIGHTGREEN,LIGHTCYAN,LIGHTRED,LIGHTMAGENTA,YELLOW,WHITE} COLORS;

static int __BACKGROUND = BLACK;
static int __FOREGROUND = LIGHTGRAY;

void textcolor (int color){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = color;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    color + (__BACKGROUND << 4));
}
void gotoxy(int x, int y){
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int som(int f){
    Beep(f,150);/* primeiro a frquência depois o tempo de duração do som */
    return 0;
}
int main(){
    for (int i=0;i<TAM_TABULEIRO;i++){
        printf("\n");
        som(2500);/* frequencia */
        for (int j=0;j<TAM_TABULEIRO;j++){
            if((int)tabuleiro[i][j]==46)
                    textcolor(7);/* cor cinza claro */
            else
                if((int)tabuleiro[i][j]<95)
                    textcolor(14);/* cor amarelo */
                else
                    textcolor(10);/* cor verde claro */
            printf(" %c",tabuleiro[i][j]);
        }
    }
    gotoxy(50,2);/* coluna  depois linha */
    cout<<"JOGO  DE"<<endl;
    gotoxy(51,3);
    cout<<"XADREZ"<<endl;
    cout<<"\n\n\n\n\n"<<endl;
    textcolor(7);/* cor cinza claro */
    for(int i=3000;i>500;i-=500)
        som(i);
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <stdio.h>

#define TAM_TABULEIRO 8

int main(){
	char tabuleiro[TAM_TABULEIRO][TAM_TABULEIRO];
	for (int i=0;i<TAM_TABULEIRO;i++){
		for (int j=0;j<TAM_TABULEIRO;j++){
			tabuleiro[i][j]='.';
		}
	}
	
	for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[1][i]='p';
	}
		for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][0]='t';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][1]='c';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][2]='b';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][3]='d';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][4]='r';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][5]='b';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][6]='c';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[0][7]='t';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[6][i]='P';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][0]='T';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][1]='C';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][2]='B';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][3]='D';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][4]='R';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][5]='B';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][6]='C';
	}
			for(int i=0;i<TAM_TABULEIRO;i++){
		tabuleiro[7][7]='T';
	}
		for (int i=0;i<TAM_TABULEIRO;i++){
		printf("\n");
		for (int j=0;j<TAM_TABULEIRO;j++){
			printf(" %c",tabuleiro[i][j]);
		}
	}
}
  
  
  

beleza, obrigado pela dica, agora apareceu o que tava cortado, eu preciso movimentar as peças agora, o professor deu uma dica de criar mais outros 2 arquivos, um para implementar funções e outro header com as assinaturas que ira ser adicionado no arquivo principal, essa parte dos seria para movimentar as peças, o teu arquivo ficou muito melhor que o meu ahahah, mas ainda não consigo entender como movimentar as peças?

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Junior Melo Portela    nesse código aí de cima , não está movimentando as peças ainda não, para isso você precisa pedir ao usuário que informe  qual peça quer mover e para qual posição mover,  então veja se a movimentação está certa e caso esteja  coloque a peça lá na matriz na referida posição e remova  da matriz a peça que foi movida ,  e se o jogo for contra o pc, então uma função para que o pc jogue ou se for contra outro jogador então pegar a jogada dele . e colocando isso dentro de um loop que pode ser o do / while para que dê prosseguimento ao jogo .    então seu código  com algumas modificações para fazer a primeira jogada ficaria assim  :

#include <stdio.h>
#include <conio.h>
#define TAM_TABULEIRO 8
#include <windows.h>
/*numero da cor  0     1    2       3           4          5          6        7          8      */
typedef enum{preto, azul,verde,azul_celeste,vermelho,vermelho_rosa,marrom,cinza_claro,cinza_escuro,
azul_claro,verde_claro,azul_clarissimo,vermelho_claro,lilas,amarelo,branco} COLORS;
/*    9     10           11               12           13     14     15*/
static int __BACKGROUND = preto;
static int __FOREGROUND = cinza_claro;

void textcolor (int color){/*para mudar a cor de fundo mude o background*/
    __FOREGROUND = color;
    SetConsoleTextAttribute (GetStdHandle (STD_OUTPUT_HANDLE),
    color + (__BACKGROUND << 4));
}
void gotoxy(int x, int y){
  COORD c;
  c.X = x;
  c.Y = y;
  SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
}
int som(int f){
    Beep(f,150);/* primeiro a frquência depois o tempo de duração do som */
    return 0;
}
int tecla(){
    int t;
    t=getch();
    if(t==27){printf("\n\n");exit(0);}
    printf("%c",t);
    getch();
    return t-=49;
}
int i,j,c,l,c2,l2,fim,jogador,flag;
int main(){
    char tabuleiro[TAM_TABULEIRO][TAM_TABULEIRO];
    for(i=0;i<TAM_TABULEIRO;i++){
        for (j=0;j<TAM_TABULEIRO;j++){
            tabuleiro[i][j]='.';
        }
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[1][i]='p';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][0]='t';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][1]='c';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][2]='b';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][3]='d';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][4]='r';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][5]='b';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][6]='c';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[0][7]='t';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[6][i]='P';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][0]='T';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][1]='C';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][2]='B';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][3]='D';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][4]='R';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][5]='B';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][6]='C';
    }
    for(i=0;i<TAM_TABULEIRO;i++){
        tabuleiro[7][7]='T';
    }
    jogador=1;
    do{
        system("cls");
        textcolor(11);
        printf("%c   1 2 3 4 5 6 7 8\n",127);
        printf("    %c %c %c %c %c %c %c %c\n",31,31,31,31,31,31,31,31);
        gotoxy(0,2);
        for (i=0;i<TAM_TABULEIRO;i++){
            textcolor(11);
            printf("%d -",i+1);
            for (j=0;j<TAM_TABULEIRO;j++){
                if((int)tabuleiro[i][j] < 91)textcolor(14);
                else
                    if((int)tabuleiro[i][j] == 46)textcolor(7);
                    else textcolor(10);
                printf(" %c",tabuleiro[i][j]);
            }
            printf("\n");
        }
        textcolor(14);
        gotoxy(30,3);
        printf("JOGADOR %d",jogador);
        gotoxy(30,1);
        printf("Tecle ESC Para Sair ");
        gotoxy(0,10);
        textcolor(7);
        printf("\n");
        do{/*informa onde esta a peça que vai mover */
            flag=0;
            printf("Informe A Linha Da Posicao Da Peca A Mover ");
            l=tecla();           /* função substitui o scanf */
            printf("\nInforme A Coluna DA Posicao Da Peca A Mover ");
            c=tecla();           /* função substitui o scanf */
            if(tabuleiro[l][c]=='.' || (jogador==1 && tabuleiro[l][c]<91)
                || (tabuleiro[l][c]>91 && jogador==2)){
                    printf("\nJogada Invalida !\n");flag=2;}
        }while(flag==2);
        printf("\n");
        do{                      /* informa onde vai colocar a peça */
            flag=0;
            printf("\nInforme A Linha Para Onde Vai a Peca ");
            l2=tecla();
            printf("\nInforme A Coluna Para Onde Vai a Peca ");
            c2=tecla();
            if(tabuleiro[l2][c2]!='.'){
                printf("\nJogada Invalida !\n\n");flag=2;}
        }while(flag==2);
        tabuleiro[l2][c2]=tabuleiro[l][c];/*move a peça para a nova posição */
        tabuleiro[l][c]='.';              /* remove a peça de onde estava */
        /*if(jogador==1)jogador=2;
        else jogador=1;*/
        if(kbhit())fim=getch();
    }while(fim != 27);
    printf("\n\n");
    return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aproveita-me desse tópico para fazer uma crítica.

É por mais organização.

 

xadrez.h

xadrez.c

São arquivos de implementação para objetos no C.

Seu professor está confundindo conhaque com leite no café da manhã.

 

Tem controvérsia aí: C++ já é uma linguagem de objetos, ou seja, sua implementação já é oculta pelas classes, métodos, ... A maneira como você quer fazer a programação é típica do C ANSI, mas atípica a linguagem C++ que possuí meios de fazer tais métodos sem usar arquivos de cabeçalho. (Segundo um colega nosso do fórum 99% mais rápido e eficiente).

 

Até o momento vi pouquíssima coisa de C++. De todos os posters com TAG C++ aqui do fórum que tirarmos: cin, cout, o que sobra é muitas linhas de código visível com 0 de polimorfismo: C ANSI purinho. 

 

Mas tal distinção deveria aparecer nas universidades e centros acadêmicos, ao que parece não, lá é tudo dito como sendo C++ :rezando: até os aquivos padrões ANSI C, ISO C, C'11 "são ditos como pertencente ao C++".

 

ANSI C, ISO C e outras são dialetos do C, porém C++ é outra orientação (sempre achei que fosse a mesma coisa, mas fui corrigido). Até para um humilde autodidata, igual a mim, essa diferença tomou proporções absurdas. Maior parte das soluções pode ser resolvidas com C de tão simples que são, sabemos que os compiladores de C++ são capazes de compilar C sem problemas. Contudo, se a linguagem é de Programação Orientada a Objetos, então é POO que se esperaria ver em sua lógica/implementação. Que fique bem claro, não se escreve C++(POO) quando se joga toda solução com código C (ou programação imperativa), quem disse que um arquivo cpp é o bastante está equivocado; programação imperativa é C, POO é C++.

 

Dito isso, se levarmos tanto o problema quando a solução respectivamente de @Junior Melo Portela e  @devair1010, fica evidente a marca do dialeto C'11 e nada de C++ com Orientação a Objetos. Ou seja, mais um poster de TAG C++ equivocado. Para quem está aprendendo C++ é frustrante, no meu caso como sou fã de C é revigorante. A unica coisa de C++ que vejo é os métodos cout; cin que se substituirmos os dois por scanf, e printf temos o C :D lindinho.

 

E possível ver o mesmo "problema" também nesse tópico: alguma forma de fazer o default repetir o switch, e em outras mais onde tanto o problema quanto a solução dos nosso colegas estão no campo do C(ou programação imperativa) e da exploração do compilador GCC.

 

O que se espera ver em um topico de C++? POO(classes, métodos, rotinas e polimorfismo ...) em C++.

Então troque o 5adc6c69c3558_c.PNG.45018d5dafccf91f21bba44702640ef0.PNG para c.PNG.86cab6c71925319a145f9a3d502796c2.PNG e tudo fica coer3nte.

:thumbsup: Ou deixa assim mesmo, se ver que tanto faz C/C++ é tudo igual!

~~/~~

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

↑↑↑↑↑↑↑↑↑↑↑↑↑↑

To falando serio :P

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, entendo o que você esta falando.

 

Porém tenho que fazer o solicitado pelo professor para passar nessa disciplina.

 

  1. Consegui montar o jogo em c. ( e compila certinho).

 

porém quando divido nos 3 arquivos (.cpp,.c,.h) da um erro.

 

criei uma pasta só com os 3 arquivos do projeto, porém não resolveu.

 

sabe o que poderia ser?

 

image.thumb.png.64c15e01b32c36f2774facf538191c26.png

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×