Ir ao conteúdo

Posts recomendados

Postado
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main() {
 char palavra[30];
 char letra[1];
 char secreta[30];
 int tam,i,chances,acertos;
 bool acerto;

chances = 6;
i = 0;
tam = 0;
acerto = false;
acertos = 0;

cout<<"Digite a palavra secreta :"<<endl;
cin>>palavra;
system ("clear");

while (palavra[i] != '\0'){
 i++;
 tam++;
}

for (i= 0; i<30;i++){
 secreta[i] = '-';
}

while ((chances > 0) && (acertos < tam)){
 cout<<"Jogadas restantes :"<<chances<<endl;
 cout<<"Palavra secreta :"<<endl;
for(i= 0;i<tam;i++){
 cout<<secreta[i];
 }

cout<<endl<<"Digite uma letra :"<<endl;
cin >>letra[0];
for (i= 0; i<tam; i++){
 if (palavra[i]==letra[0]){
  acerto=true;
  secreta[i]=palavra[i];
  acertos++;
 }
}
if(!acerto){
 chances--;
}
 acerto =false;
 system("clear");
}
if (acertos==tam){
 cout<<"Você ganhou!!";
}else{
cout<<"Você perdeu!!";
}
return 0;
}

 

adicionado 1 minuto depois
2 minutos atrás, William Cruuz disse:

#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

int main() {
 char palavra[30];
 char letra[1];
 char secreta[30];
 int tam,i,chances,acertos;
 bool acerto;

chances = 6;
i = 0;
tam = 0;
acerto = false;
acertos = 0;

cout<<"Digite a palavra secreta :"<<endl;
cin>>palavra;
system ("clear");

while (palavra[i] != '\0'){
 i++;
 tam++;
}

for (i= 0; i<30;i++){
 secreta[i] = '-';
}

while ((chances > 0) && (acertos < tam)){
 cout<<"Jogadas restantes :"<<chances<<endl;
 cout<<"Palavra secreta :"<<endl;
for(i= 0;i<tam;i++){
 cout<<secreta[i];
 }

cout<<endl<<"Digite uma letra :"<<endl;
cin >>letra[0];
for (i= 0; i<tam; i++){
 if (palavra[i]==letra[0]){
  acerto=true;
  secreta[i]=palavra[i];
  acertos++;
 }
}
if(!acerto){
 chances--;
}
 acerto =false;
 system("clear");
}
if (acertos==tam){
 cout<<"Você ganhou!!";
}else{
cout<<"Você perdeu!!";
}
return 0;
}

 

SUBSTITUINDO ALGUMAS DESSAS VARIÁVEIS 

  • Curtir 1
Postado

Bom Dia@William Cruuz !

 

Vejo que é um jogo, jogo de palavras que lembra jogos da forca; tipo de jogo de palavras em que seus participantes adivinha por tentativas quais as letras e no final a palavra secreta.

 

Só não entendo "a duvida", contextualmente.

 

Parece-me que deseja substituição das variáveis independentes (palavra , letra , secreta) por um só nome (matriz). Caso não seja assim... por favor; Explique-se.

  • Curtir 1
Postado

Aqui que 

41 minutos atrás, William Cruuz disse:

@Mauro Britivaldo Sim é o jogo da forca , e é só a substituição dessas variáveis (PALAVRA,LETRA,SECRETA) 

por uma MATRIZ de "Strings "

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

Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.

*******************************************************************************/
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

enum {/*0*/palavra, /*1*/letra, /*2*/secreta};

int main()
{
  string base[3];
  
  int tam, i, chances, acertos;
  bool acerto;
  size_t localizou;

  chances = 6;
  tam = 0;
  acerto = false;
  acertos = 0;

  cout << "Digite a palavra secreta :" << endl;
  cin >> base[palavra];
  system("clear");

  tam =  base[palavra].size();
  base[secreta].assign(tam,'-');

  while ((chances > 0) && (acertos < tam)){
    cout << "Jogadas restantes :" << chances << endl;
    cout << "Palavra secreta :" << endl;
    cout << base[secreta];

    cout << endl << "Digite uma letra :" << endl;
    cin >> base[letra];
    
    localizou = base[palavra].find_first_of(base[letra]);
    if (localizou != string::npos){
        acerto = true;
        
        base[secreta][localizou] = base[letra][0];
        acertos++;
    }
    if (!acerto){
      chances--;
    }
    acerto = false;
    system("clear");
  }
  if (acertos == tam){
    cout << "Você ganhou!!";
  } else {
    cout << "Você perdeu!!";
  }
  return 0;
}

 ***

  • Curtir 1
Postado

Defina melhor uma "matriz de strings". Em geral se fala de vetor quando tem uma dimensão apenas, e matriz quando é algo como uma tabela com duas ou mais dimensões. Algo assim

char vetor[20]; // 20 elementos vetor[0] a vetor[19];
char matriz[4][5]; // 20 elementos matrix[0][0] a matriz[3][4]

Em relação ao seu programa e ao jogo de forca

char palavra[30];
char letra[1];
char secreta[30];

Qual a razão de declarar char letra[1] ao invés de apenas char letra?


Em geral para o jogo de forca o que você quer é 

  • um vetor de strings com a tabela de possíveis palavras a serem sorteadas a cada rodada. Você lê isso de um arquivo no início do jogo, ou carrega como está no programa abaixo
  • uma única string e algumas variáveis auxiliares para controlar a evolução da palavra do jogador durante o jogo, ou vários conjuntos se for escrever uma versão multi-jogador.

Talvez ajude ver esse texto

Palavras:
uma
outra
ainda outra

mostrado por esse programa

#include <iostream>
using namespace std;
int main()
{
    string palavras[3] = { "uma", "outra", "ainda outra" };
    std::cout << "Palavras:\n";
    for (auto palavra : palavras) cout << palavra << endl;
    return 0;
};  // main()

É só isso.

 

Mas em C++ provavelmente o mais produtivo seria escrever uma classe Forca que carregasse as palavras no inicio, e com métodos para sorteio das palavras e tal...

 

Vou te mostrar um exemplo mínimo, pra você ver a diferença entre seu programa e um programa comum em C++. Espero que ajude. Em C++ é MUITO mais fácil escrever essas coisas do que em C, graças aos tais objetos.

 

Uma classe Forca

// um exemplo minimo para mostrar a mecanica
class Forca
{
private:
    int     total_de_palavras;
    string  Palavras[_CH_LIMITE_DE_PALAVRAS_];

public:
    int     carrega_palavras(const char*); // carrega do arquivo
    int     escolhe_palavra(); // sorteia palavra
    int     mostra_palavras(); // mostra na tela pra testar

public:
    Forca();
};

Como funciona?

 

Quando você declara algo tipo

Forca    jogo;
Forca    outro_jogo;

São criados dois "jogos" desse tipo Forca.  você pode usar as funções que estão lá declaradas, Então por exemplo

  • jogo.carrega_palavras("arquivo.txt") vai no disco abre o arquivo e carrega as palavras para a tabela, e já salva o número de palavras lidas em jogo.total_de_palavras. Nada mal não?
  • jogo.escolhe_palavra() sorteia uma palavra da tabela e devolve o número dela na tabela

E assim por diante.

 

Exemplo

 

Saida

Criando um jogo
Mostrando 0 palavras
Leu 3 palavras de palavras.txt
Mostrando 3 palavras
0 [palavra]
1 [outra]
2 [aindaoutra]
Sorteio: palavra nova: aindaoutra (#2)
Nova palavra: 2
Leu 5 palavras de outro.txt
Mostrando 5 palavras
0 [agora]
1 [tem]
2 [mais]
3 [palavras]
4 [afinal]
Sorteio: palavra nova: palavras (#3)
Nova palavra: #3
Sorteio: palavra nova: afinal (#4)
Nova palavra: #4
Sorteio: palavra nova: tem (#1)
Nova palavra: #1

O programa

#define		_CH_LIMITE_DE_PALAVRAS_  20

#include <iostream>
#include <fstream>
#include "stdio.h"
#include "stdlib.h"
#include <string>
using namespace std;

// um exemplo minimo para mostrar a mecanica
class Forca
{
private:
    int		total_de_palavras;
    string  Palavras[_CH_LIMITE_DE_PALAVRAS_];

public:
    int		carrega_palavras(const char*); // carrega do arquivo
    int     escolhe_palavra(); // sorteia palavra
    int		mostra_palavras(); // mostra na tela pra testar

public:
    Forca();
};


using namespace std;
int main()
{
    const char* nome1 = "palavras.txt";
    const char* nome2 = "outro.txt";
	int			n, qual;
    Forca   um_jogo;

    um_jogo.mostra_palavras();

    n = um_jogo.carrega_palavras(nome1);
    cout << "Leu " << n << " palavras de " << nome1 << endl;
    um_jogo.mostra_palavras();
	qual = um_jogo.escolhe_palavra();
	cout << "Nova palavra: " << qual << endl;

    n = um_jogo.carrega_palavras(nome2);
    cout << "Leu " << n << " palavras de " << nome2 << endl;
    um_jogo.mostra_palavras();
	qual = um_jogo.escolhe_palavra();
	cout << "Nova palavra: #" << qual << endl;
	qual = um_jogo.escolhe_palavra();
	cout << "Nova palavra: #" << qual << endl;
	qual = um_jogo.escolhe_palavra();
	cout << "Nova palavra: #" << qual << endl;

    return 0;
};  // main()


// carrega novas palavras a partir do arquivo
int Forca::carrega_palavras(const char* nome_do_arquivo)
{
	ifstream	arquivo(nome_do_arquivo);
	if (!arquivo.is_open()) return -1;
	string		palavra;
	total_de_palavras = 0; // comeca a contar
	while (getline(arquivo, palavra))
	{
		Palavras[total_de_palavras] = palavra;
		if (total_de_palavras == _CH_LIMITE_DE_PALAVRAS_)
		{	// chegou no limite
			arquivo.close();
			return total_de_palavras;
		}
		total_de_palavras += 1; // conta a palavra
	}
	return total_de_palavras;
}


// mostra na tela todas as palavras
int Forca::mostra_palavras()
{
	cout << "Mostrando " << total_de_palavras << " palavras" << endl;
	for (int i = 0; i < total_de_palavras; i++)
		cout << i << " [" << Palavras[i] << "]" << endl;
	return 0;
};	// mostra_palavras()


// sorteio de uma palavra para o jogo
int Forca::escolhe_palavra()
{
	int n = rand() % total_de_palavras;
	cout << 
		"Sorteio: palavra nova: " << 
		Palavras[n] << " (#" 
		<< n << ")" << endl;
	return n;
};	// sorteio()


// cria um jogo: so zera o n. de palavras
Forca::Forca()
{
	cout << "Criando um jogo" << endl;
	total_de_palavras = 0;
	srand(200229); // apenas para iniciar o mecanismo de sorteio

};	// Forca()

 

Estou postando isso porque é difícil ver em um forum de C E C++ a diferença de como começar a escrever um programa assim, e

  • em C naturalmente funciona
  • um aluno raramente volta a um programa que funciona

Então leva meses até o cara começar a entender porque esse lance de objetos (classes) é tão comemorado afinal

 

adicionado 2 minutos depois

Note que declarando Forca como struct  assim também funciona

 

// um exemplo minimo para mostrar a mecanica
struct Forca
{
    int		total_de_palavras;
    string  Palavras[_CH_LIMITE_DE_PALAVRAS_];

    int		carrega_palavras(const char*); // carrega do arquivo
    int     escolhe_palavra(); // sorteia palavra
    int		mostra_palavras(); // mostra na tela pra testar

    Forca();
};

 

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