Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

jotaelle

Jogo FORCA

Recommended Posts

Galera, desde que conheci o C++ acompanho o forum com dicas, tuto é show e agora preciso de um help. Estou com um código rodando no DEV C++ mas ainda falta colocar uma condição para quando a pessoa digitar um caracter errado mais de uma vez, não contar como erro e informar o jogador que o caracter é invalido "digite outro" e também logo no início queria que quando a palavra fosse digitada não aprecesse na tela logo no início. Tem tbem um trecho no código (lá no switch) foi um amigo que ajudou no "case 4 : corpo[3] = '\\';" e no case 6 : corpo[5] = '\\'; porque tem que usar 2 barras? Segue

 

//Bibliotecas 
#include <conio.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

//Variáveis Globais
char palavra[65];   
char npalavra[65];  
char erros[30]; 
char corpo[7];   
int nerros /*NUMERO DE ERROS*/ , nacertos /*NUMERO DE ACERTOS*/, tam /*TAMANHO DA PALAVRA*/;
 
//Protótipo das Funções
void titulo();  
void entrada(); 
void tela();	 
void mostrapalavra(); 

#define AZUL 3
#define AMARELO 6
#define BRANCO 7
#define NEGRITO 8
#define VERMELHO 4
#define VERDE 10
#define ESCURO 1
#define PRETO 3


HANDLE  hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); //Função relacionada a cor <windows.h>
 
//Início do Programa
int main()
{
  char opt;		
  do 						
  {
	titulo();				
	entrada();	
	tela();
	printf(" Jogar novamente? (s/n): ");
	opt = toupper(getche());  
  }
  while(opt == 'S');
  titulo();
  printf("\n -------------Pressione qualquer tecla para sair...\n");
  getch();
  return(0);
}
 
void entrada() 
{
  int cont;
  tam = 0;
  printf(" Digite uma palavra (Maximo de 64 caracteres: \n");
  gets (palavra);
   while(palavra[tam] != 0)
	tam++;
  nacertos = 0;
  nerros = 0;
  for(cont = 0; cont < 30; cont++) 
	erros[cont] = '\0'; 
  for(cont = 0; cont < 65; cont++) 
	npalavra[cont] = '_';
  for(cont = 0; cont < 6; cont++) 
	corpo[cont] = ' ';
}
 
void titulo() 
{
	 
  system("color 2");
  system("cls");
  system("cls");
  printf(" ===================JOGO DA FORCA==================\n");
  printf(" ==================================================\n");
  SetConsoleTextAttribute(hConsoleHandle, VERDE);
  printf("\n");
}
 
void tela() //Terceira função - Jogo
{
  int fimjogo = 0, cont, acertou = 0;
  char c;
  while(fimjogo == 0)
  {
	titulo(); 
	mostrapalavra(); 
	printf(" Digite uma letra: ");
	c = getch();
	for(cont = 0; cont < tam; cont++)
	  if(toupper© == toupper(palavra[cont]))
	  {
		if(toupper© != npalavra[cont])
		{
		  npalavra[cont] = toupper©;
		  nacertos++;
		}
		acertou = 1;
	  }
	if(!acertou)
	{
	  erros[nerros] = toupper©;
	  nerros++;
	  switch(nerros)
	  {
		case 6 : corpo[5] = '\\'; 
		case 5 : corpo[4] = '/'; 
		case 4 : corpo[3] = '\\'; 
		case 3 : corpo[2] = '/'; 
		case 2 : corpo[1] = '|'; 
		case 1 : corpo[0] = 'O';
	  }
	}
	if((nacertos == tam) || (nerros == 6))
	  fimjogo = 1;
	  acertou = 0;
  }
  titulo(); 
  mostrapalavra(); 
  cont = 0;
  while(palavra[cont] != 0)
	palavra[cont] = toupper(palavra[cont++]);
  if(nacertos == tam)
	printf(" PARABENS!! VOCE ACERTOU A PALAVRA ", palavra);
  else
	printf(" VOCE PERDEU... A PALAVRA ERA ", palavra);
	SetConsoleTextAttribute(hConsoleHandle, AZUL);  
	printf("%s\n", palavra);
	SetConsoleTextAttribute(hConsoleHandle, AZUL);  
}
 

void mostrapalavra() 
{
  int cont;
SetConsoleTextAttribute(hConsoleHandle, AMARELO);
  printf("  /-----\\	   %s \n", erros);
  printf("  |	 |\n");
  printf("  |	 %c\n", corpo[0]);
  printf("  |	%c%c%c\n", corpo[2], corpo[1], corpo[3]);
  printf("  |	%c %c\n", corpo[4], corpo[5]);
  printf("  |\n");
  printf("  |");
SetConsoleTextAttribute(hConsoleHandle, AZUL);
  for(cont = 0; cont < tam; cont++)
  printf(" %c", npalavra[cont]);
  printf("\n\n");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

tem q usar 2 barras para aparecer 1 soh no printf.. é pq senaum ele pode confundir como uma tecla de escape..

e outra, para ver c o cara digitar uma letra errada denovo, soh usar um vetor contendo as letras tentadas..

no laboratorio de codigos fontes, eu fiz um joguinho da forca, da uma olhada lah..

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Poderia alterar o código para eu testar, fiz uns testes com o vetor e não deu certo ele não vai para o próximo na nerros. E em relação a não mostrar a palavra quando ela é digitada, tem alguma sugestão!!! Desde já obrigado

 

if(!acertou) 
			 {
				erros[nerros] = toupper©;
				letrast[nerros] = toupper©;
				if(letrast[nerros] = erros[nerros])
				printf("Caracter já digitado, digite outro");
				else
				nerros++;
				switch(nerros)
				{
					case 6 : corpo[5] = '\\'; 
					case 5 : corpo[4] = '/'; 
					case 4 : corpo[3] = '\\'; 
					case 3 : corpo[2] = '/'; 
					case 2 : corpo[1] = '|'; 
					case 1 : corpo[0] = 'O';
				}
			
			 }

Compartilhar este post


Link para o post
Compartilhar em outros sites

bom...

a logica dos erros [e a seguinte..

o cara digita uma letra, ai você compara essa letra com um vetor q contera outras letras digitadas, c a letra naum for encontrada joga ela no vetor, c for encontrada conta como erro. 'e simples..

e de mascarar a palavra, como eu disse de uma pesquisada lah no laboratorio de codigos fontes q tem codigo q faz isso..

 

[]s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.