Ir para conteúdo

POWERED BY:

Arquivado

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

mariana.duarte

Jogo da Forca

Recommended Posts

Olá!

 

Em um projeto que minha professora passou, ela disse que o programa deveria ter uma matriz com pelo menos 10 palavras, sendo uma delas escolhida aleatoriamente pelo programa, quando for iniciada uma jogada, e disse para pesquisarmos sobre a função random.

Como é no DEV C++, devo usar a srand, certo?

Mas gostaria de saber como posso utilizá-la no jogo...

Obrigada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, c você compilou o ultimo codigo, eh bem possivel q seja apenas uma questao de sorte, com apenas 4 palavras eh bem possivel repetir algumas vezes seguidas o mesmo numero. Eu testei os dois codigos aqui, e estao aleatorios. Teste de novo ai, verifica se nao faltou nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu tenho que usar 10 palavras, eu o fiz assim:

 

int main()
{


char palavra[10][15]= {"golfinho", "rinoceronte", "condor", "caqui", "morango", "framboesa", "computador", "holofote", "noruega", "ucrania"};//10 palavras de até 15 letras cada uma delas.	   
int i = rand() % 10;
   printf("%s",palavra[i]);
getch();   
return(0);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao, faltou o srand(time(NULL));

usando o rand() direto você esta pegando sempre a mesma semente de numeros, entao ele eh aleatorio mas eh sempre o mesmo aleatorio ( q coisa sem sentido). Usando o srand ali, você esta pegando uma semente nova dada pelo clock, ou seja, aleatoria de verdade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O jogo em si, sabe fazer?

Estou com uma #@?$%~ dificuldade nele =/

ainda estou no começo, mas dá erro no for, como devo fazer?

 

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

int main()
{
	int cont,y;
	char incluir,nova_palavra,espacos,vida=7,letra;
	srand(time(NULL));
	char palavra[10][15]= {"golfinho", "rinoceronte", "condor", "caqui", "morango", "framboesa", "computador", "holofote", "noruega", "ucrania"};//10 palavras de até 15 letras cada uma delas.	   
	int i = rand() % 10;
	printf("\nA palavra eh: %s",palavra[i]);	 
	getchar();
	system("cls"); 
	for(cont=0;cont<strlen(palavra[10][15];cont++)
	{
	   espacos='_';
	}   
	while(vida>0)
	{
	  y=0;
printf("\n%s",espacos);											   
printf("\nentre com uma letra: ");
gets(letra);
}
getch();   
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, O problema do for eh q você esta mandando pegar o tamanho do conteudo armazenado em palavra[10][15], ou seja, esse valor nem existe, uma vez q iria de [0-9][0-14]. No momento q você sorteia o numero aleatorio para fazer referencia a uma palavra, você deve usar sempre esse numero, entao compare no for com palavra.

Mas a sua atribuicao espacos = '_' nao vai funcionar como o desejado, você esta apenas atribuindo o mesmo caracter varias vezes para a mesma variavel. crie um vetor espacos[15] (15 seria o maximo permitido), e ai sim, atribua '_' para cada posicao.

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

int main()
{
int cont,y;
char incluir,nova_palavra,espacos[15],letra;
int vida = 7;
srand(time(NULL));
char palavra[10][15]= {"golfinho", "rinoceronte", "condor", "caqui", "morango", "framboesa", "computador", "holofote", "noruega", "ucrania"};//10 palavras de até 15 letras cada uma delas. 
int i = rand() % 10;
printf("\nA palavra eh: %s",palavra[i]); 
getchar();
system("cls"); 
for(cont=0;cont<strlen(palavra[i]);cont++)
{
   espacos[cont]= '_';
   espacos[cont+1] = 0; // um zero sem aspas mesmo, indicando fim de string, senao fica sugeira de memoria
} 
while(vida>0)
{
y=0;
printf("\n%s",espacos); 
printf("\nentre com uma letra: ");
letra = getch();
}
getch(); 
return 0;
}

Qualquer duvida nao deixe de perguntar ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

int main()
{
int cont,y,j;
char espacos[15],letra[1];
int vida = 7;
srand(time(NULL));
char palavra[10][15]= {"golfinho", "rinoceronte", "condor", "caqui", "morango", "framboesa", "computador", "holofote", "noruega", "ucrania"};//10 palavras de até 15 letras cada uma delas.
int i = rand() % 10;
printf("\nA palavra eh: %s",palavra[i]);
getchar();
system("cls");
for(cont=0;cont<strlen(palavra[i]);cont++)
{
   espacos[cont]= '_';
   espacos[cont+1] = 0; // um zero sem aspas mesmo, indicando fim de string, senao fica sujeira de memoria
}
while(vida>0)
{
y=0;
printf("\n%s",espacos);
printf("\nentre com uma letra: ");
letra[0] = getch();
for(i=0;i<strlen(palavra[i]);i++)
{
for(j=0;j<strlen(palavra[i]);j++)
{
if(strcmp(letra[0],palavra[i])==0)
{
espacos[cont]=palavra[i];
y++;
}
}
}
}
getch();
return 0;
}

Qual o erro nesse código? =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro eh aqui

if(strcmp(letra[0],palavra[i])==0)

Problema maior aqui acho q eh a tentativa de comparar o vetor letra com a matriz palavra. mas eh desnecessario o uso de strcmp, uma vez q você precisa comparar apenas char com char.

Em vez de declarar letra[1], declare soh letra, um char unico.

e na comparacao, nao precisa de 2 for encadeados, um soh ja resolve.

E se forem iguais, nao atribua na posicao cont, mas sim na posicao j, q eh a posicao correta.

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <string.h>
int main()
{
	int cont,y,j;
	char espacos[15],letra;
	int vida = 7;srand(time(NULL));
	char palavra[10][15]= {"golfinho", "rinoceronte", "condor", "caqui", "morango", "framboesa", "computador", "holofote", "noruega", "ucrania"};
	//10 palavras de até 15 letras cada uma delas.
	int i = rand() % 10;
	printf("\nA palavra eh: %s",palavra[i]);
	getchar();
	system("cls");
	for(cont=0;cont<strlen(palavra[i]);cont++)
	{
	   espacos[cont]= '_';
	   espacos[cont+1] = 0;
		// um zero sem aspas mesmo, indicando fim de string, senao fica sujeira de memoria
	}while(vida>0)
	{
	   y=0;
	   printf("\n%s",espacos);
	   printf("\nentre com uma letra: ");
	   letra = getch();

	   for(j=0;j<strlen(palavra[i]);j++)
	   {
		  if(letra == palavra[i][j])
		  {
			 espacos[j]=palavra[i][j];
			 y++;
		  }
		  
	   }
	}
	getch();
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

void forca()
{
	int cont, flag1, flag2, flag3, j,resp,nova_palavra;
	char espacos[16],letra;
	int vida = 7;
	srand(time(NULL));
	char palavra[10][15]= {"golfinho", "rinoceronte", "condor", "caqui", "morango", "framboesa", "computador", "holofote", "noruega", "ucrania"}; 
	int i = rand() % 10;
	 
	//printf("\nA palavra eh: %s\n",palavra[i]);
	//getchar();	   
	system("cls");

	for(cont=0; palavra[i][cont] != '\';cont++)
	{
	   espacos[cont]= '_';
	}
	espacos[cont] = '\';

	while(vida>0)
	{
		getchar();
		system("cls");
		flag1 = flag2 = flag3 = 0; //é uma variável q indicará se uma condição aconteceu ou não
		printf("\n%s",espacos);
		printf("\nEntre uma letra: ");
		scanf("%c", &letra);
		
		for (j=0;j<strlen(palavra[i]);j++ )
		{
			if ( letra == espacos[j] )
			{
				printf("Caracter ja incluido\n");
				system("pause");
				flag3++;
				break;
			}
		}
		if ( flag3 != 0 )
			continue;

		for(j=0; j < 16;j++)
		{
			if(letra == palavra[i][j])
			{
				espacos[j]=palavra[i][j];
				flag1--;
			}//fecha if
			else
				flag2++;
		}
		if ( (flag1 == 0) && (flag2 != 0) )
		{
			vida--;
			printf("\nvc tem %d de vidas restando\n",vida);
			system("pause");
		}
		if(strcmp(palavra[i],espacos)==0)
		{
			printf("\nAcertou\n");
			printf("A palavra era: %s\n\n", palavra[i]);
			system("pause");
			break;
		}//fecha if
	 
	}//fecha while
}//fecha função
	   
		   
int main()
	
{
	char jog;
	forca();//chamando função
	printf("Deseja jogar novamente?(s/n)");
	scanf("%c",&jog);
		   if((jog=='s')||(jog=='S'));
		   return 0;
}

Consegui o código quase completo, o problema é que não estou conseguindo de maneira alguma acrescentar a ela de maneira correta: perguntar ao usuário se ele deseja continuar, acrescentar a mensagem você foi enforcado após perder todas as vidas, mostrar as letras já digitadas, permitir a inclusão de palavras.

Compartilhar este post


Link para o post
Compartilhar em outros sites

num entendi muito esse for:

for(cont=0; palavra[i][cont] != '\';cont++)
ele nunca vai encontrar o '\' pq você ainda não atribuiw ele na string

 

tem q fazer igual o Myho escreveu:

for(cont=0;cont<strlen(palavra[i]);cont++)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode usar os dois jeitos que funciona.

As strings estão definidas:

 

char palavra[10][15]= {"golfinho", "rinoceronte", "condor", "caqui", "morango", "framboesa", "computador", "holofote", "noruega", "ucrania"};

O barra zero indica o fim da string.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando atribuimos o valor a string como foi feito, o barra zero é automaticamente colocado no índice após o último caracter.

 

As funções de leitura de string fazem a mesma coisa.

 

Há um erro comum de ser visto, quando a string é completada lendo caracter por caracter.

Muitas pessoas esquecem de finalizar a string.

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_biggrin.gif

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.