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:  
Entre para seguir isso  
Daniel De Marco Fucci

C Programa jogo de Damas com Matriz em C

Recommended Posts

Salve salve colegas programadores.

Estou montando um jogo de damas em C usando matrizes, o algoritmo está quase acabado (pelo menos a versão mais simples do jogo) mas estou tendo uma dificuldade muito chata. Está tudo funcionando ok, exceto por uma coisa: quando o jogador 1 come uma peça do jogador 2, o local na matriz onde estava a peça que foi comida do jogador 1 deve ter o valor 0 atribuído, porém isso não está acontecendo e eu não consigo encontrar o erro no código. O caso contrário funciona normalmente, quando o jogador 2 come uma peça do jogador 1, o local onde estava a peça comida do jogador 1 recebe o valor 0. Será que alguém bom de olho pode dar uma ajuda? Segue o código: 

#include <stdio.h>
#include <stdlib.h>
#define MAX 8
void imprimir (int tabuleiro[MAX][MAX]);

int main (){
    int tabuleiro[MAX][MAX], retorno = 0, x, y, aux1, aux2, k, z;
    int i, j;
    //zerando tabuleiro
    for (i=0; i<MAX; i++){
        for (j=0; j<MAX; j++){
            tabuleiro[i][j] = 0;
        }
    }
    //adicionando peças às posições iniciais do jogo (peças brancas)
    for (i=0; i<MAX; i++){
        for (j=0; j<3; j++){
            if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1)){
                tabuleiro[i][j] = 1;
            }
        }
    }
    //adicionando peças às posições iniciais do jogo (peças pretas)
    for (i=0; i<MAX; i++){
        for (j=5; j<MAX; j++){
            if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1)){
                tabuleiro[i][j] = 2;
            }
        }
    }
    //iniciando o jogo
    printf ("Jogo iniciado! Jogador 1 com pecas 1, jogador 2 com pecas 2\n");
    imprimir(tabuleiro);
    //laço da continuidade no jogo até que alguém vença e retorno receba "1"
    while (retorno == 0){

        //laço garante que a peça a ser mexida seja válida
        aux1 = 0;
        while (aux1 == 0){
            printf ("Jogador 1, informe a posicao x e y da peca a ser mexida (peca[x][y])\n");
            scanf ("%d %d", &x, &y);
            x--;
            y--;
            //condição para mexer a peça
            if (tabuleiro[x+1][y+1] != 0 && tabuleiro[x+2][y+2] != 0 && tabuleiro[x-1][y+1] != 0 && tabuleiro[x-2][y+2] != 0) {
                printf ("Essa peca nao pode se mover!\n");
            }
            else if (tabuleiro[x][y] != 1){
                printf ("opcao invalida\n");
            }
            else {
                aux1 = 1;
            }
        }

        //laço garante que o destino da peça seja valido
        aux2 = 0;
        while (aux2 == 0){
            printf ("Jogador 1, informe a posicao x e y do destino da peca a ser movida\n");
            scanf ("%d %d", &k, &z);
            k--;
            z--;
            if ((tabuleiro [k][z] != tabuleiro[x+1][y+1]) && (tabuleiro[k][z] != tabuleiro[x-1][y+1]) && (tabuleiro[k][z] != tabuleiro[x+2][y+2]) && (tabuleiro[k][z] != tabuleiro[x-2][y+2])){
                printf ("opcao invalida\n");
            }
            else if (z<y){
                    printf ("opcao invalida\n");
                }
            else if (tabuleiro[k][z] == tabuleiro[x+1][y+1]) {
                if (tabuleiro [k][z] != 0){
                    printf ("opcao invalida\n");
                }
                else {
                    tabuleiro[x][y] = 0;
                    tabuleiro[k][z] = 1;
                    aux2 = 1;
                }
            }
            else if (tabuleiro[k][z] == tabuleiro[x-1][y+1]) {
                if (tabuleiro [k][z] != 0){
                    printf ("opcao invalida\n");
                }
                else {
                    tabuleiro[x][y] = 0;
                    tabuleiro[k][z] = 1;
                    aux2 = 1;
                }
            }
            else if (tabuleiro[k][z] == tabuleiro[x+2][y+2]){
                if (tabuleiro[x+1][y+1] != 2){
                    printf ("opcao invalida\n");
                }
                else {
                    tabuleiro[x][y] = 0;
                    tabuleiro[k][z] = 1;
                    tabuleiro[x+1][y+1] = 0;
                    aux2 = 1;
                }
            }
            else if (tabuleiro[k][z] == tabuleiro[x-2][y+2]){
                if (tabuleiro[x-1][y+1] != 2){
                    printf ("opcao invalida\n");
                }
                else{
                    tabuleiro[x][y] = 0;
                    tabuleiro[k][z] = 1;
                    tabuleiro[x-1][y+1] = 0;
                    aux2 = 1;
                }
            }
        }
        imprimir(tabuleiro);
        //verificando se o jogador 1 ganhou
        for (i=0; i<MAX; i++){
            if (tabuleiro[i][7] == 1){
                retorno = 1;
                printf ("Fim de jogo, jogador 1 venceu.\n");
            }
        }
        //garante que o jogo ainda nao acabou
        if (retorno == 0){
            //laço garante que a peça a ser mexida seja válida
            aux1 = 0;
            while (aux1 == 0){
                printf ("Jogador 2, informe a posicao x e y da peca a ser mexida (peca[x][y])\n");
                scanf ("%d %d", &x, &y);
                x--;
                y--;
                if (tabuleiro[x-1][y-1] != 0 && tabuleiro[x-2][y-2] != 0 && tabuleiro[x+1][y-1] != 0 && tabuleiro[x+2][y-2] != 0){
                    printf ("Essa peca nao pode se mover!\n");
                }
                else if (tabuleiro[x][y] != 2){
                    printf ("opcao invalida\n");
                }
                else {
                    aux1 = 1;
                }
            }

            //laço garante que o destino da peça seja valido
            aux2 = 0;
            while (aux2 == 0){
                printf ("Jogador 2, informe a posicao x e y do destino da peca a ser movida\n");
                scanf ("%d %d", &k, &z);
                k--;
                z--;

                if ((tabuleiro [k][z] != tabuleiro[x-1][y-1]) && (tabuleiro[k][z] != tabuleiro[x+1][y-1]) && (tabuleiro[k][z] != tabuleiro[x-2][y-2]) && (tabuleiro[k][z] != tabuleiro[x+2][y-2])){
                    printf ("opcao invalida\n");
                }
                else if (z>y){
                    printf ("opcao invalida\n");
                }
                else if (tabuleiro[k][z] == tabuleiro[x-1][y-1]) {
                    if (tabuleiro [k][z] != 0){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x+1][y-1]) {
                    if (tabuleiro [k][z] != 0){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x-2][y-2]){
                    if (tabuleiro[x-1][y-1] != 1){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        tabuleiro[x-1][y-1] = 0;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x+2][y-2]){
                    if (tabuleiro[x+1][y-1] != 1){
                        printf ("opcao invalida\n");
                    }
                    else{
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        tabuleiro[x+1][y-1] = 0;
                        aux2 = 1;
                    }
                }
            }
            imprimir(tabuleiro);
            //verificando se o jogador 2 venceu.
            for (i=0; i<MAX; i++){
                if (tabuleiro[i][0] == 2){
                    retorno = 1;
                    printf ("Fim de jogo, jogador 2 venceu.\n");
                }
            }
        }

    }


return 0;




}

void imprimir (int tabuleiro[MAX][MAX]){
    int i, j;
    for (i=0; i<MAX; i++){
        for (j=0; j<MAX; j++){
            printf (" %d ", tabuleiro[i][j]);
        }
        printf ("\n");
    }
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Daniel De Marco Fucci     seu código funciona  e esse erro que você disse é porque precisa de mais algumas linhas para fazer essa função que remove a peça que foi comida , então seria essas linhas aqui :

if(k == x+2)
    tabuleiro[x+1][y+1]=0;
else
    if(k == x-2)
         tabuleiro[x-1][y+1]=0; 

colocadas no último else de cada if que compara a jogada do jogador 1, então seu código ficaria assim :

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define MAX 8
void imprimir (int tabuleiro[MAX][MAX]);

int main (){
    int tabuleiro[MAX][MAX], retorno = 0, x, y, aux1, aux2, k, z;
    int i, j;
    //zerando tabuleiro
    for (i=0; i<MAX; i++){
        for (j=0; j<MAX; j++){
            tabuleiro[i][j] = 0;
        }
    }
    //adicionando peças às posições iniciais do jogo (peças brancas)
    for (i=0; i<MAX; i++){
        for (j=0; j<3; j++){
            if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1)){
                tabuleiro[i][j] = 1;
            }
        }
    }
    //adicionando peças às posições iniciais do jogo (peças pretas)
    for (i=0; i<MAX; i++){
        for (j=5; j<MAX; j++){
            if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1)){
                tabuleiro[i][j] = 2;
            }
        }
    }
    //iniciando o jogo
    printf ("Jogo iniciado! Jogador 1 com pecas 1, jogador 2 com pecas 2\n");
    imprimir(tabuleiro);
    //laço da continuidade no jogo até que alguém vença e retorno receba "1"
    while (retorno == 0){

        //laço garante que a peça a ser mexida seja válida
        aux1 = 0;
        while (aux1 == 0){
            printf ("Jogador 1, informe a posicao x e y da peca a ser mexida (peca[x][y])\n");
            scanf ("%d %d", &x, &y);
            x--;
            y--;
            //condição para mexer a peça
            if (tabuleiro[x+1][y+1] != 0 && tabuleiro[x+2][y+2] != 0 && tabuleiro[x-1][y+1] != 0 && tabuleiro[x-2][y+2] != 0) {
                printf ("Essa peca nao pode se mover!\n");
            }
            else if (tabuleiro[x][y] != 1){
                printf ("opcao invalida\n");
            }
            else {
                aux1 = 1;
            }
        }

        //laço garante que o destino da peça seja valido
        aux2 = 0;
        while (aux2 == 0){
            printf ("Jogador 1, informe a posicao x e y do destino da peca a ser movida\n");
            scanf ("%d %d", &k, &z);
            k--;
            z--;
            if ((tabuleiro [k][z] != tabuleiro[x+1][y+1]) && (tabuleiro[k][z] != tabuleiro[x-1][y+1]) && (tabuleiro[k][z] != tabuleiro[x+2][y+2]) && (tabuleiro[k][z] != tabuleiro[x-2][y+2])){
                printf ("opcao invalida\n");
            }
            else if (z<y){
                    printf ("opcao invalida\n");
                }
            else if (tabuleiro[k][z] == tabuleiro[x+1][y+1]) {
                if (tabuleiro [k][z] != 0){
                    printf ("opcao invalida\n");
                }
                else {
                    tabuleiro[x][y] = 0;
                    tabuleiro[k][z] = 1;
                    aux2 = 1;

                    if(k == x+2)
                        tabuleiro[x+1][y+1]=0;/*aqui coloquei essa linha*/
                    else
                        if(k == x-2)
                            tabuleiro[x-1][y+1]=0; /* aqui coloquei essa linha*/
                }
            }
            else if (tabuleiro[k][z] == tabuleiro[x-1][y+1]) {
                if (tabuleiro [k][z] != 0){
                    printf ("opcao invalida\n");
                }
                else {
                    tabuleiro[x][y] = 0;
                    tabuleiro[k][z] = 1;
                    aux2 = 1;

                    if(k == x+2)
                        tabuleiro[x+1][y+1]=0;/*aqui coloquei essa linha*/
                    else
                        if(k == x-2)
                            tabuleiro[x-1][y+1]=0; /* aqui coloquei essa linha*/
                }
            }
            else
                if (tabuleiro[k][z] == tabuleiro[x+2][y+2]){
                    if (tabuleiro[x+1][y+1] != 2){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 1;
                        tabuleiro[x+1][y+1] = 0;
                        aux2 = 1;

                        if(k == x+2)
                            tabuleiro[x+1][y+1]=0;/*aqui coloquei essa linha*/
                        else
                            if(k == x-2)
                                tabuleiro[x-1][y+1]=0; /* aqui coloquei essa linha*/
                    }
            }
            else if (tabuleiro[k][z] == tabuleiro[x-2][y+2]){
                if (tabuleiro[x-1][y+1] != 2){
                    printf ("opcao invalida\n");
                }
                else{
                    tabuleiro[x][y] = 0;
                    tabuleiro[k][z] = 1;
                    tabuleiro[x-1][y+1] = 0;
                    aux2 = 1;

                    if(k == x+2)
                        tabuleiro[x+1][y+1]=0;/*aqui coloquei essa linha*/
                    else
                        if(k == x-2)
                            tabuleiro[x-1][y+1]=0; /* aqui coloquei essa linha*/
                }
            }
        }
        imprimir(tabuleiro);
        //verificando se o jogador 1 ganhou
        for (i=0; i<MAX; i++){
            if (tabuleiro[i][7] == 1){
                retorno = 1;
                printf ("Fim de jogo, jogador 1 venceu.\n");
            }
        }
        //garante que o jogo ainda nao acabou
        if (retorno == 0){
            //laço garante que a peça a ser mexida seja válida
            aux1 = 0;
            while (aux1 == 0){
                printf ("Jogador 2, informe a posicao x e y da peca a ser mexida (peca[x][y])\n");
                scanf ("%d %d", &x, &y);
                x--;
                y--;
                if (tabuleiro[x-1][y-1] != 0 && tabuleiro[x-2][y-2] != 0 && tabuleiro[x+1][y-1] != 0 && tabuleiro[x+2][y-2] != 0){
                    printf ("Essa peca nao pode se mover!\n");
                }
                else if (tabuleiro[x][y] != 2){
                    printf ("opcao invalida\n");
                }
                else {
                    aux1 = 1;
                }
            }

            //laço garante que o destino da peça seja valido
            aux2 = 0;
            while (aux2 == 0){
                printf ("Jogador 2, informe a posicao x e y do destino da peca a ser movida\n");
                scanf ("%d %d", &k, &z);
                k--;
                z--;

                if ((tabuleiro [k][z] != tabuleiro[x-1][y-1]) && (tabuleiro[k][z] != tabuleiro[x+1][y-1]) && (tabuleiro[k][z] != tabuleiro[x-2][y-2]) && (tabuleiro[k][z] != tabuleiro[x+2][y-2])){
                    printf ("opcao invalida\n");
                }
                else if (z>y){
                    printf ("opcao invalida\n");
                }
                else if (tabuleiro[k][z] == tabuleiro[x-1][y-1]) {
                    if (tabuleiro [k][z] != 0){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x+1][y-1]) {
                    if (tabuleiro [k][z] != 0){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x-2][y-2]){
                    if (tabuleiro[x-1][y-1] != 1){
                        printf ("opcao invalida\n");
                    }
                    else {
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        tabuleiro[x-1][y-1] = 0;
                        aux2 = 1;
                    }
                }
                else if (tabuleiro[k][z] == tabuleiro[x+2][y-2]){
                    if (tabuleiro[x+1][y-1] != 1){
                        printf ("opcao invalida\n");
                    }
                    else{
                        tabuleiro[x][y] = 0;
                        tabuleiro[k][z] = 2;
                        tabuleiro[x+1][y-1] = 0;
                        aux2 = 1;
                    }
                }
            }
            imprimir(tabuleiro);
            //verificando se o jogador 2 venceu.
            for (i=0; i<MAX; i++){
                if (tabuleiro[i][0] == 2){
                    retorno = 1;
                    printf ("Fim de jogo, jogador 2 venceu.\n");
                }
            }
        }

    }


return 0;




}

void imprimir (int tabuleiro[MAX][MAX]){
    int i, j;
    for (i=0; i<MAX; i++){
        for (j=0; j<MAX; j++){
            printf (" %d ", tabuleiro[i][j]);
        }
        printf ("\n");
    }
}

mas ainda apresenta erros pois ele não verifica se a posição de destino, pois ele permite colocar a peça na mesma linha e na coluna seguinte ,  então precisa de mais alguns ajustes .

  • 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

Entre para seguir isso  





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

×