Ir ao conteúdo
  • Cadastre-se

C Jogo de Damas em C (tabuleiro)


Posts recomendados

Pessoal, preciso de uma ajuda nesse código, não estou conseguindo deixar o jogador 1 (A) na parte de ima e o jogador 2 (B) na parte de baixo, um esta sobrescrevendo o outro.

Também não estou conseguindo inicializar a Matriz do tabuleiro como "-1", que são as casas em branco.

Resumindo, montar um tabuleiro "funcional"

 

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define TAB 8
#define casa_vazia 0
#define A 1
#define B 2
#define AD 3
#define BD 4
#define casa_branca -1
  
void campo() {
	system("cls");
	int matriz[TAB][TAB] = { {-1} };
	int i = 0, j = 0, lin = 0, col = 0, l = 0, c = 0;

	printf("\t\t\t 0 1 2 3 4 5 6 7 \n");
	for (i = 0; i < TAB; i++) //peças brancas
	{
		printf("\n\t\t\t%d ", i);
		for (j = 0; j < 8; j++)
		{
			if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1))
			{
				matriz[i][j]= 1;				
			}
		//printf("%d ", matriz[i][j]);
		}
	}
	for (j = 0; j < TAB; j++)//peças pretas
	{
		for (i = 0; i < TAB; i++)
		{
			if ((i % 2 == 0 && j % 2 == 0) || (i % 2 == 1 && j % 2 == 1))
			{
				matriz[i][j] = 2;
			}
				printf("%d ", matriz[i][j]);
		}	
	}


	printf("\n\n\t\t\tLINHA => ");
	scanf_s("\n%d", &l);
}

void main() {
	setlocale(LC_ALL, "portuguese");
	int lin = 0, col = 0, i = 0, j = 0, opcao=0, menu = 0;
	int matriz[TAB][TAB] = { {-1} };

	do
	{
		printf("\n\t Bem vindo ao jogo de Damas!");
		printf("\n\t 1 - Iniciar jogo.");
		printf("\n\t 2 - Informações do jogo.");
		printf("\n\t 3 - Sair do jogo.");
		printf("\n\n\t Selecione uma opção => ");
		scanf_s("%d", &menu);

		switch (menu)
		{
		case 1: //COMEÇAR O JOGO (FUNÇÃO JOGO)
			campo();
			
			break;

		case 2: // INFORMAÇÕES DO JOGO
			break;

		case 3: //SAIR DO JOGO
			system("cls");
			printf("\n\tVOCÊ SAIU DO JOGO!");
			break;

		default:
			system("cls");
			printf("\n\tOPÇÃO INVÁLIDA, TENTE NOVAMENTE!");

			//return 0	
		}
	} while (menu != 3);

}

 

Link para o comentário
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define TAB 8
#define casa_vazia 0
#define A 1
#define B 2
#define AD 3
#define BD 4
#define casa_branca -1
 
int matriz[TAB][TAB];/* = {{-1, -1, -1, -1, -1, -1, -1, -1}, 
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1}};*/
	                        
void campo() {
	system("cls");
	
	int i = 0, j = 0, lin = 0, col = 0, l = 0, c = 0;

	printf("\t0\t1\t2\t3\t4\t5\t6\t7\t\n\n");
	for (i = 0; i < TAB; i++) //peças brancas
	{
		printf("%d\t", i);
		for (j = 0; j < TAB; j++)
		{
			if (((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 == 1) && (j % 2 == 1))) 
			{
				if (i<3) matriz[i][j]= 1; //brancas
				else if (i>4) matriz[i][j] = 2; //pretas
				else matriz[i][j] = 0;//vazio
			}
			printf("%d\t", matriz[i][j]);
		}
		printf("\n");
	}
	

	printf("\n\n\t\t\tLINHA => ");
	scanf("\n%d", &l);
}

int main() {
	setlocale(LC_ALL, "portuguese");
	int lin = 0, col = 0, i = 0, j = 0, opcao=0, menu = 0;
	do
	{
		printf("\n\t Bem vindo ao jogo de Damas!");
		printf("\n\t 1 - Iniciar jogo.");
		printf("\n\t 2 - Informações do jogo.");
		printf("\n\t 3 - Sair do jogo.");
		printf("\n\n\t Selecione uma opção => ");
		scanf("%d", &menu);

		switch (menu)
		{
		case 1: //COMEÇAR O JOGO (FUNÇÃO JOGO)
			campo();
			
			break;

		case 2: // INFORMAÇÕES DO JOGO
			break;

		case 3: //SAIR DO JOGO
			system("cls");
			printf("\n\tVOCÊ SAIU DO JOGO!");
			break;

		default:
			system("cls");
			printf("\n\tOPÇÃO INVÁLIDA, TENTE NOVAMENTE!");

			//return 0	
		}
	} while (menu != 3);
    return 0;
}

Veja se é a solução que procurava.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define TAB 8
#define casa_vazia 0
#define A 1
#define B 2
#define AD 3
#define BD 4
#define casa_branca -1
 
int matriz[TAB][TAB];/* = {{-1, -1, -1, -1, -1, -1, -1, -1}, 
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1}};*/

char pecas[3] = {'#', 'A', 'B'}; //o primeiro é espaço vazio, o segundo represente as brancas e o terceiro as pretas
	                        
void campo() {
	system("cls");
	
	int i = 0, j = 0, lin = 0, col = 0, l = 0, c = 0;

	printf("\033[36;1m\t0\t1\t2\t3\t4\t5\t6\t7\t\n\n"); //\033[36;1m mudar a cor da fonte e deixa bold
	for (i = 0; i < TAB; i++) //peças brancas
	{
		printf("\033[36;1m%d\t", i); //\033[36;1m mudar a cor da fonte e deixa bold
		for (j = 0; j < TAB; j++)
		{
			if (((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 == 1) && (j % 2 == 1))) 
			{
				if (i<3) matriz[i][j]= 1; //brancas
				else if (i>4) matriz[i][j] = 2; //pretas
				else matriz[i][j] = 0;//vazio
			}
			printf("\033[37;0m%c\t", pecas[matriz[i][j]]); 
		}
		printf("\n");
	}
	

	printf("\n\n\t\t\tLINHA => ");
	scanf("\n%d", &l);
}

int main() {
	setlocale(LC_ALL, "portuguese");
	int lin = 0, col = 0, i = 0, j = 0, opcao=0, menu = 0;
	do
	{
		printf("\n\t Bem vindo ao jogo de Damas!");
		printf("\n\t 1 - Iniciar jogo.");
		printf("\n\t 2 - Informações do jogo.");
		printf("\n\t 3 - Sair do jogo.");
		printf("\n\n\t Selecione uma opção => ");
		scanf("%d", &menu);

		switch (menu)
		{
		case 1: //COMEÇAR O JOGO (FUNÇÃO JOGO)
			campo();
			
			break;

		case 2: // INFORMAÇÕES DO JOGO
			break;

		case 3: //SAIR DO JOGO
			system("cls");
			printf("\n\tVOCÊ SAIU DO JOGO!");
			break;

		default:
			system("cls");
			printf("\n\tOPÇÃO INVÁLIDA, TENTE NOVAMENTE!");

			//return 0	
		}
	} while (menu != 3);
    return 0;
}

Veja se entende o que fiz. Coloquei um pouco de cor tb. Se interessar, posso falar mais sobre isso.

adicionado 40 minutos depois

Esta versão fica bem legal visualmente:

/******************************************************************************

                              Online C++ Compiler.
               Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.

*******************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define TAB 8
#define casa_vazia 0
#define A 1
#define B 2
#define AD 3
#define BD 4
#define casa_branca -1
 
int matriz[TAB][TAB];/* = {{-1, -1, -1, -1, -1, -1, -1, -1}, 
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1}};*/

char pecas[3] = {' ', 'A', 'B'};
	                        
void campo() {
	system("cls");
	
	int i = 0, j = 0, lin = 0, col = 0, l = 0, c = 0;

	printf("\033[36;40;1m     0    1    2    3    4    5    6    7  \n");
	for (i = 0; i < TAB; i++) //peças brancas
	{
		printf("\033[36;40;1m%d  ", i);
		for (j = 0; j < TAB; j++)
		{
			if (((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 == 1) && (j % 2 == 1))) 
			{
				if (i<3) matriz[i][j]= 1; //brancas
				else if (i>4) matriz[i][j] = 2; //pretas
				else matriz[i][j] = 0;//vazio
				
			}
			//if (matriz[i][j] == 0) 
			{
			    if (i % 2 == 0) 
			     if (j % 2 == 0) printf("\033[41m  %c  ", pecas[matriz[i][j]]);
			     else printf("\033[45m  %c  ", pecas[matriz[i][j]]);
			    else
			     if (j % 2 == 0) printf("\033[45m  %c  ", pecas[matriz[i][j]]);
			     else printf("\033[41m  %c  ", pecas[matriz[i][j]]);
			}
			//else printf("\033[0m%c\t", pecas[matriz[i][j]]);
		}
		printf("\n");
	}
	

	printf("\n\n\t\t\tLINHA => ");
	scanf("\n%d", &l);
}

int main() {
	setlocale(LC_ALL, "portuguese");
	int lin = 0, col = 0, i = 0, j = 0, opcao=0, menu = 0;
	do
	{
		printf("\n\t Bem vindo ao jogo de Damas!");
		printf("\n\t 1 - Iniciar jogo.");
		printf("\n\t 2 - Informações do jogo.");
		printf("\n\t 3 - Sair do jogo.");
		printf("\n\n\t Selecione uma opção => ");
		scanf("%d", &menu);

		switch (menu)
		{
		case 1: //COMEÇAR O JOGO (FUNÇÃO JOGO)
			campo();
			
			break;

		case 2: // INFORMAÇÕES DO JOGO
			break;

		case 3: //SAIR DO JOGO
			system("cls");
			printf("\n\tVOCÊ SAIU DO JOGO!");
			break;

		default:
			system("cls");
			printf("\n\tOPÇÃO INVÁLIDA, TENTE NOVAMENTE!");

			//return 0	
		}
	} while (menu != 3);
    return 0;
}

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Em 04/09/2019 às 18:15, Flávio Pedroza disse:

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define TAB 8
#define casa_vazia 0
#define A 1
#define B 2
#define AD 3
#define BD 4
#define casa_branca -1
 
int matriz[TAB][TAB];/* = {{-1, -1, -1, -1, -1, -1, -1, -1}, 
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1},
	                        {-1, -1, -1, -1, -1, -1, -1, -1}};*/
	                        
void campo() {
	system("cls");
	
	int i = 0, j = 0, lin = 0, col = 0, l = 0, c = 0;

	printf("\t0\t1\t2\t3\t4\t5\t6\t7\t\n\n");
	for (i = 0; i < TAB; i++) //peças brancas
	{
		printf("%d\t", i);
		for (j = 0; j < TAB; j++)
		{
			if (((i % 2 == 0) && (j % 2 == 0)) || ((i % 2 == 1) && (j % 2 == 1))) 
			{
				if (i<3) matriz[i][j]= 1; //brancas
				else if (i>4) matriz[i][j] = 2; //pretas
				else matriz[i][j] = 0;//vazio
			}
			printf("%d\t", matriz[i][j]);
		}
		printf("\n");
	}
	

	printf("\n\n\t\t\tLINHA => ");
	scanf("\n%d", &l);
}

int main() {
	setlocale(LC_ALL, "portuguese");
	int lin = 0, col = 0, i = 0, j = 0, opcao=0, menu = 0;
	do
	{
		printf("\n\t Bem vindo ao jogo de Damas!");
		printf("\n\t 1 - Iniciar jogo.");
		printf("\n\t 2 - Informações do jogo.");
		printf("\n\t 3 - Sair do jogo.");
		printf("\n\n\t Selecione uma opção => ");
		scanf("%d", &menu);

		switch (menu)
		{
		case 1: //COMEÇAR O JOGO (FUNÇÃO JOGO)
			campo();
			
			break;

		case 2: // INFORMAÇÕES DO JOGO
			break;

		case 3: //SAIR DO JOGO
			system("cls");
			printf("\n\tVOCÊ SAIU DO JOGO!");
			break;

		default:
			system("cls");
			printf("\n\tOPÇÃO INVÁLIDA, TENTE NOVAMENTE!");

			//return 0	
		}
	} while (menu != 3);
    return 0;
}

Veja se é a solução que procurava.

Eu acho que para um jogo de damas essa não e a melhor a bordagem.

Eu prefiro fazer dessa maneira

/* Damas */
#include <stdio.h>
#include <stdlib.h>


/* Constantes */
#define QUANTIDADE_PECAS 8
#define SEGUNDO_JOGADOR 0
#define PRIMEIRO_JOGADOR 1
/* #define TAMANHO_TABULEIRO */

/* Tipos */
typedef struct
{
  unsigned short x,y;
  unsigned char usada,dama;
}TPeca;

void IniciaPecas(TPeca *p,int jogador);

int main()
{
  /* Reserva a memoria para cada jogador */
  TPeca *jogador1=malloc(sizeof(TPeca)*QUANTIDADE_PECAS),*jogador2=malloc(sizeof(TPeca)*QUANTIDADE_PECAS);
  int d;    /* Variavel generica */
  /* Sai do programa se não houver memoria suficiente */
  if(!(jogador1&&jogador2))
    return(-1);
  
  /* Inicia as peças de cada jogador */
  IniciaPecas(jogador1,PRIMEIRO_JOGADOR);
  jogador1[3].usada=0;
  IniciaPecas(jogador2,SEGUNDO_JOGADOR);
  jogador2[4].dama=1;

  /* Mostra as peças */
  /* Não, que esteja mostrando de uma forma bonita ;) */
  for(d=0; d<QUANTIDADE_PECAS; d++)
    printf("\n%s|\t%s:\t%i,%i",jogador1[d].usada?"Usado":"Não usado",jogador1[d].dama?"E dama":"Não e dama",jogador1[d].x,jogador1[d].y);
  printf("\n\n");
  for(d=0; d<QUANTIDADE_PECAS; d++)
    printf("\n%s|\t%s:\t%i,%i",jogador2[d].usada?"Usado":"Não usado",jogador2[d].dama?"E dama":"Não e dama",jogador2[d].x,jogador2[d].y);
  /* Tira as peças da memoria */
  free(jogador1);
  free(jogador2);
  getchar();
  return(0);
}

void IniciaPecas(TPeca *p,int jogador)
{
  unsigned char i,x=1,y=1;
  if(jogador)
  /* Inicia o primeiro jogador */
    for(i=0; i<QUANTIDADE_PECAS; i++)
    {
      p[i].usada=1;
      p[i].dama=0;
      if(x>8)
      {
        y++;
        x=1;
      }
      p[i].x=x;
      p[i].y=y;
      x+=2;
    }
  else
  /* Inicia o segundo */
    for(i=0; i<QUANTIDADE_PECAS; i++)
    {
      p[i].usada=1;
      p[i].dama=0;
      if(x>8)
      {
        y++;
        x=1;
      }
      p[i].x=x;
      p[i].y=y+4;
      x+=2;
    }
}

Isso e só um esqueleto, mas já da para ver que e bem mais fácil de organizar tudo dessa maneira.

 

Por que dessa maneira você poderia simplesmente passar a coluna e a linha da peça que o usuário quer mover, desse jeito Damas.png.960d47366cf534e367c9c2981b1fa0d7.png

Ficando simples saber se a jogada e valida.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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...