Ir ao conteúdo

C Problemas ao executar jogo de Damas em C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Boa tarde rapaziada.

Estou com um jogo de damas em C rodando, só que quando a peça muda de casa, independente do jogador, ela fica com um simbolo "?".

 

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>





struct{
char jog1[20], jog2[20], ganhador[20];
int cont1, cont2, pont_max;
}dama;

FILE *historico;


void jogador1(char matriz[8][8],char jogador, int oposto)
{
system("color 79");
int i,j,l,c,li,co,opcao=0;
do
{
system("cls");
if(jogador==1)
printf("\n\n---------------- A VEZ E A DO JOGADOR PECA @ ----------\n\n\n\n");
if(jogador==2)
printf("\n\n---------------- A VEZ E A DO JOGADOR PECA # ------------\n\n\n\n");
printf("\t \t\t 0 1 2 3 4 5 6 7 \n");
for(i=0;i<8;i++)
{
printf("\n\t\t\t%d ",i);
for(j=0;j<8;j++)
printf("%c ",matriz[j]);
}
printf("\n\n\t*************** CORDENADA DA PECA **********************");
printf("\n\tLINHA: ");
scanf("%d",&l);
printf("\n\tCOLUNA: ");
scanf("%d",&c);
printf("\n\n\t****COORDENADA DA POSICAO QUE A PECA VAI OCULPAR****");
printf("\n\tLINHA: ");
scanf("%d",&li);
printf("\n\tCOLUNA: ");
scanf("%d",&co);
if((li+co)%2==0)
{
if((jogador==1&&l<li)||(jogador==2&&l>li))
{
printf("linha\n");

if(c-1==co||c+1==co)
{
if(co==c-1)
{
matriz[li][co] = jogador;
matriz[l][c] = 0;
opcao++;
}
if(co==c+1)
{
matriz[li][co] = jogador;
matriz[l][c] = 0;
opcao++;
}
}

if(matriz[l+1][c+1]==oposto)
{
if(c+2==co)
{
matriz[li][co] = jogador;
matriz[l][c] = 0;
opcao++;
matriz[l+1][c+1]=0;
}
}

if(matriz[l+1][c-1]==oposto)
{
if(c-2==co)
{
matriz[li][co] = jogador;
matriz[l][c] = 0;
matriz[l+1][c-1]=0;
opcao++;
}
}
if(matriz[l-1][c+1]==oposto)
{
if(c+2==co)
{
matriz[li][co] = jogador;
matriz[l][c] = 0;
opcao++;
matriz[l-1][c+1]=0;
}
}

if(matriz[l-1][c-1]==oposto)
{
if(c-2==co)
{
matriz[li][co] = jogador;
matriz[l][c] = 0;
matriz[l-1][c-1]=0;
opcao++;
}
}
}
else printf("\n\n\t\t__________MOVIMENTO INVALIDO!!_________\n\t\t_________TENTE NOVAMENTE________\n");
}
system("pause");
}while(opcao!=1);
}



void ganhador(char matriz[8][8])
{
int i,j;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
{
if(matriz[j]==2)
dama.cont1++;
if(matriz[j]==1)
dama.cont2++;
}
if(dama.cont1>dama.cont2)
{
printf("\n\tVENCEDOR........-> %s TOTAL DE PECAS: %d\n\n",dama.jog1,dama.cont1);
strcpy(dama.ganhador, dama.jog1);
dama.pont_max=dama.cont1;
}
else
{
if(dama.cont1<dama.cont2)
{
printf("\n\tVENCEDOR........-> %s TOTAL DE PECAS: %d\n\n",dama.jog2,dama.cont2);
strcpy(dama.ganhador, dama.jog2);
dama.pont_max=dama.cont2;
}
else{
printf("\n\tEmpate!\n\t%s: %d\n\t%s: %d\n\n\n",dama.jog1,dama.cont1,dama.jog2,dama.cont2);
strcpy(dama.ganhador,"jogo empatado");
dama.pont_max=dama.cont2;
}
}
}
void registro(void){
fwrite(&dama, sizeof(dama), 1, historico);
}
void escreve(void){
rewind(historico);
while(fread(&dama, sizeof(dama), 1, historico)==1)//LER A INFORMACAO ATE A ULTIMA.
printf("\nJogador peca preta: %s\nJogador peca branca: %s\nVencedor: %s Total de pecas: %d\n\n",dama.jog1, dama.jog2, dama.ganhador, dama.pont_max);
}

int main(int argc, char *argv[])
{


char opcao2;
char matriz[8][8];
int i,j, jogador=2,oposto=1,opcao=0;
dama.cont1=dama.cont2=0;
historico=fopen("Historico_dama.bin", "ab+");


matriz[0][0]= '@'; matriz[0][1]= 178; matriz[0][2]= '@'; matriz[0][3] = 178; matriz[0][4] = '@'; matriz[0][5]= 178; matriz[0][6]= '@'; matriz[0][7]= 178;
matriz[1][0]= 178; matriz[1][1]= '@'; matriz[1][2]= 178; matriz[1][3] = '@'; matriz[1][4] = 178;matriz[1][5]= '@'; matriz[1][6]= 178; matriz[1][7]= '@';
matriz[2][0]= '@'; matriz[2][1]= 178; matriz[2][2]= '@'; matriz[2][3] = 178; matriz[2][4] = '@'; matriz[2][5]= 178; matriz[2][6]= '@'; matriz[2][7]= 178;
matriz[3][0]= (178); matriz[3][1] = 0; matriz[3][2]= 178; matriz[3][3] = 0; matriz[3][4] = 178;matriz[3][5]= 0; matriz[3][6]= 178; matriz[3][7]= 0;
matriz[4][0]=0; matriz[4][1]= 178; matriz[4][2]= 0; matriz[4][3] = 178; matriz[4][4] = 0; matriz[4][5]= 178; matriz[4][6]= 0; matriz[4][7]= 178;
matriz[5][0]= 178; matriz[5][1]= '#'; matriz[5][2]= 178; matriz[5][3] = '#'; matriz[5][4] = 178;matriz[5][5]= '#'; matriz[5][6]= 178; matriz[5][7]= '#';
matriz[6][0]= '#'; matriz[6][1]= 178; matriz[6][2]= '#'; matriz[6][3] = 178; matriz[6][4] = '#'; matriz[6][5]= 178; matriz[6][6]= '#'; matriz[6][7]= 178;
matriz[7][0]= 178; matriz[7][1]= '#'; matriz[7][2]= 178; matriz[7][3] = '#'; matriz[7][4] = 178;matriz[7][5]= '#'; matriz[7][6]= 178; matriz[7][7]= '#';
do{
system("color 79");

printf("\tEscolha uma das op%c%ces abaixo:\n\n",135,228);
printf("\t%c A Jogar.\n\t%c B Sair.\n\n");
printf("\tOp%c%co: ",135,198);
scanf("%s",&opcao2);
system("cls");
switch(opcao2){
case 'A' :
case 'a':
system("color 79");

printf("\n\n\t\t\tPersistindo o empate o jogo pode terminar por tempo.....");
printf("\n\n\n");
printf("\n\n\n\t\t Bom Jogo");
printf("\n\n\n");
system("pause");
system("cls");
system("color 79");
printf("\n\n\t\tINFORME O NOME DO JOGADOR PECA #:\n\n\t\t\t\t");//NOME DOS JOGADORES..
scanf("%s",dama.jog1);
printf("\n\n\t\tINFORME O NOME DO JOGADOR PECA @:\n\n\t\t\t\t ");//NOME DOS JOGADORES..
scanf("%s",dama.jog2);



int tempo = clock();
while(clock()-tempo<500000000)
{

jogador=1;oposto=2;
jogador1(matriz,jogador,oposto);
jogador=2;oposto=1;
jogador1(matriz,jogador,oposto);
}
system("cls");
system("color 79");

printf("\n\t\t..........O Tempo Acabou...........\n\n\n");
ganhador(matriz);
registro();
system("pause");
system("cls");
break;


case 'B':
case'b':
system("color 79");

printf("\n\n\n\n\t\t\t FIM DO JOGO\n\n\n\n\n");exit(0);
break;
default:
system("cls");
printf("Digite A para jogar ou B para sair\n\n\n\n\n");

}
}while (opcao2= 'A');


system("PAUSE");

return 0;

}

 

 

Já tentei de tudo e não achei a solução. Agradeço a quem possa ajudar.

  • Obrigado 1
Postado

@RVINI88    ele não está rodando , tem um erro na Linha 238 que ficou faltando a dimensão das linhas da matriz ,  e colocando isso ele compila e funciona , mas o tabuleiro está bem confuso  não dá para saber o que são pedras e nem espaço vago , nem onde é preto ou branco , então consegui mover nenhuma peça do Lugar , e a identação do código seria  bom , para identificar erros , , , 

  • Curtir 1
Postado
Em 12/12/2020 às 07:35, devair1010 disse:

@RVINI88    ele não está rodando , tem um erro na Linha 238 que ficou faltando a dimensão das linhas da matriz ,  e colocando isso ele compila e funciona , mas o tabuleiro está bem confuso  não dá para saber o que são pedras e nem espaço vago , nem onde é preto ou branco , então consegui mover nenhuma peça do Lugar , e a identação do código seria  bom , para identificar erros , , , 

Obrigado pela resposta, to iniciando nesse mundo.

 

acho que deu ruim no copy cola, eu anexei a imagem do tabuleiro no codigo que eu tenho aqui. eu consigo saber os caracteres de cada jogador mas assim que ocorre a primeira jogada o caracter vira interrogação, ai no decorrer do jogo é difícil saber qual peça é de quem.  Eu precisava que ao mover as peças os caracteres fossem mantidos. Tentei aplicar uma função de cor pra pelo menos saber por cor mas tb sem sucesso.

imagem2.PNG

codigo v4.txt

  • Amei 1
  • Solução
Postado

@RVINI88 @RVINI88     esse interrogação que aparece logo na primeira jogada é porque você colocou assim no seu código , ali na função jogador1 , ao adicionar a variável jogador na posição da matriz para onde a pedra irá se mover , e ali essa variável tem dois valores , ou 1 ou 2 , e no Windows 10 esses dois números não corresponde a nenhum caractere da tabela ASCII , e assim ele adiciona uma interrogação para esse valor ,  e se você especificar que cada jogador corresponda a um desses caracteres que você está usando , @   ou   #  ,  ele continuará  com esses mesmos caracteres ,

1741962796_damasdorvivi88.thumb.jpg.c0da8933136793f8d7d8ad5d0a92e31e.jpg

e você usou muitas Linhas para inicializar a matriz com os caracteres que você quer usar ,  e um outro modo , que gasta menos Linhas poderia ser assim :

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
struct
{
    char jog1[20], jog2[20], ganhador[20];
    int cont1, cont2, pont_max;
}dama;
FILE *historico;
void jogador1(char matriz[8][8],char jogador, int oposto)
{
    system("color 79");
    int i,j,l,c,li,co,opcao=0,jogador_ASCII;
    do
    {
        system("cls");
        if(jogador==1)
        {
            jogador_ASCII=64;
            printf("\n\n----------------    A VEZ E A DO JOGADOR PECA @  ----------\n\n\n\n");
        }
        if(jogador==2)
        {
            jogador_ASCII=35;
            printf("\n\n----------------    A VEZ E A DO JOGADOR PECA #  ------------\n\n\n\n");
        }
        printf("\t \t\t   0 1 2 3 4 5 6 7 \n");
        for(i=0;i<8;i++)
        {
            printf("\n\t\t\t%d  ",i);
            for(j=0;j<8;j++)
                printf("%c ",matriz[i][j]);
        }
        printf("\n\n\t***************  CORDENADA DA PECA  **********************");
        printf("\n\tLINHA: ");
        scanf("%d",&l);
        printf("\n\tCOLUNA: ");
        scanf("%d",&c);
        printf("\n\n\t****COORDENADA DA POSICAO QUE A PECA VAI OCULPAR****");
        printf("\n\tLINHA: ");
        scanf("%d",&li);
        printf("\n\tCOLUNA: ");
        scanf("%d",&co);
        if((li+co)%2 == 0)
        {
            if((jogador==1&&l<li)||(jogador==2&&l>li))
            {
                printf("linha\n");
                if(c-1==co||c+1==co)
                {
                    if(co==c-1)
                    {
                        matriz[li][co] = jogador_ASCII;
                        matriz[l][c] = 0;
                        opcao++;
                    }
                    if(co==c+1)
                    {
                        matriz[li][co] = jogador_ASCII;
                        matriz[l][c] = 0;
                        opcao++;
                    }
                }
                if(matriz[l+1][c+1]==oposto)
                {
                    if(c+2==co)
                    {
                        matriz[li][co] = jogador_ASCII;
                        matriz[l][c] = 0;
                        opcao++;
                        matriz[l+1][c+1]=0;
                    }
                }
                if(matriz[l+1][c-1]==oposto)
                {
                    if(c-2==co)
                    {
                        matriz[li][co] = jogador_ASCII;
                        matriz[l][c] = 0;
                        matriz[l+1][c-1]=0;
                        opcao++;
                    }
                }
                if(matriz[l-1][c+1]==oposto)
                {
                    if(c+2==co)
                    {
                        matriz[li][co] = jogador_ASCII;
                        matriz[l][c] = 0;
                        opcao++;
                        matriz[l-1][c+1]=0;
                    }
                }
                if(matriz[l-1][c-1]==oposto)
                {
                    if(c-2==co)
                    {
                        matriz[li][co] = jogador_ASCII;
                        matriz[l][c] = 0;
                        matriz[l-1][c-1]=0;
                        opcao++;
                    }
                }
            }
            else
                printf("\n\n\t\t__________MOVIMENTO INVALIDO!!_________\n\t\t_________TENTE NOVAMENTE________\n");
        }
        system("pause");
    }while(opcao!=1);
}
void ganhador(char matriz[8][8])
{
    int i,j;
    for(i=0;i<8;i++)
    {
        for(j=0;j<8;j++)
        {
            if(matriz[i][j]==2)
                dama.cont1++;
            if(matriz[i][j]==1)
                dama.cont2++;
        }
        if(dama.cont1>dama.cont2)
        {
            printf("\n\tVENCEDOR........-> %s TOTAL DE PECAS: %d\n\n",dama.jog1,dama.cont1);
            strcpy(dama.ganhador, dama.jog1);
            dama.pont_max=dama.cont1;
        }
        else
        {
            if(dama.cont1<dama.cont2)
            {
                printf("\n\tVENCEDOR........-> %s TOTAL DE PECAS: %d\n\n",dama.jog2,dama.cont2);
                strcpy(dama.ganhador, dama.jog2);
                dama.pont_max=dama.cont2;
            }
            else
            {
                printf("\n\tEmpate!\n\t%s: %d\n\t%s: %d\n\n\n",dama.jog1,dama.cont1,dama.jog2,dama.cont2);
                strcpy(dama.ganhador,"jogo empatado");
                dama.pont_max=dama.cont2;
            }
        }
    }
}
void registro()
{
    fwrite(&dama, sizeof(dama), 1, historico);
}
void escreve()
{
    rewind(historico);
    while(fread(&dama, sizeof(dama), 1, historico)==1)//LER A INFORMACAO ATE A ULTIMA.
    {
        printf("\nJogador peca preta: %s\n",dama.jog1);
        printf("Jogador peca branca: %s\n", dama.jog2);
        printf("Vencedor: %s\n", dama.ganhador);
        printf("Total de pecas: %d\n\n", dama.pont_max);
    }
}
int main(int argc, char *argv[])
{
    char opcao2;
    char matriz[8][8] = { { '@' , 178 , '@' , 178 , '@' , 178 , '@' , 178 },
                          { 178 , '@' , 178 , '@' , 178 , '@' , 178 , '@' },
                          { '@' , 178 , '@' , 178 , '@' , 178 , '@' , 178 },
                          { 178 ,  0  , 178 ,  0  , 178 ,  0  , 178 ,  0  },
                          {  0  , 178 ,  0  , 178 ,  0  , 178 ,  0  , 178 },
                          { 178 , '#' , 178 , '#' , 178 , '#' , 178 , '#' },
                          { '#' , 178 , '#' , 178 , '#' , 178 , '#' , 178 },
                          { 178 , '#' , 178 , '#' , 178 , '#' , 178 , '#' },
                        };
    int i,j, jogador=2,oposto=1,opcao=0;
    dama.cont1=dama.cont2=0;
    historico=fopen("Historico_dama.bin", "ab+");
    do
    {
        system("color 79");
        printf("\tEscolha uma das op%c%ces abaixo:\n\n",135,228);
        printf("\t%c A Jogar.\n\t%c B Sair.\n\n");
        printf("\tOp%c%co: ",135,198);
        scanf("%s",&opcao2);
        system("cls");
        switch( toupper( opcao2 ) )
        {
        case 'A' :
            system("color 79");
            printf("\n\n\t\t\tPersistindo o empate o jogo pode terminar por tempo.....");
            printf("\n\n\n");
            printf("\n\n\n\t\t                          Bom Jogo");
            printf("\n\n\n");
            system("pause");
            system("cls");
            system("color 79");
            printf("\n\n\t\tINFORME O NOME DO JOGADOR PECA #:\n\n\t\t\t\t");//NOME DOS JOGADORES..
            scanf("%s",dama.jog1);
            printf("\n\n\t\tINFORME O NOME DO JOGADOR PECA @:\n\n\t\t\t\t ");//NOME DOS JOGADORES..
            scanf("%s",dama.jog2);
            int tempo = clock();
            while(clock()-tempo<500000000)
            {
                jogador = 1;
                oposto=2;
                jogador1( matriz,jogador,oposto );
                jogador = 2;
                oposto=1;
                jogador1( matriz,jogador,oposto );
            }
            system("cls");
            system("color 79");
            printf("\n\t\t..........O Tempo Acabou...........\n\n\n");
            ganhador(matriz);
            registro();
            system("pause");
            system("cls");
            break;
        case 'B':
            system("color 79");
            printf("\n\n\n\n\t\t\t  FIM DO JOGO\n\n\n\n\n");
            exit(0);
            break;
        default:
            system("cls");
            printf("Digite A para jogar ou B para sair\n\n\n\n\n");
        }
    }while ( opcao2 == 'A' );
    system("PAUSE");
    return 16;
}

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!