Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
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);
}

 

Editado por devair1010
  • 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?

Editado por Junior Melo Portela
  • 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;
}

 

Editado por devair1010

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!

~~/~~

 

Editado por AnsiC
Correção
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

To falando serio :P

 

Editado por AnsiC
  • 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

@Junior Melo Portela    por que você está dividindo os arquivos ?    esse arquivo .cpp é do c++   e .c e do c pode ser isso o motivo do erro  .

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






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

×