Ir ao conteúdo

Posts recomendados

Postado

*Não se está faltando algo ou se há alguma informação incorreta, mas no jogo só se perde.

 

 

#include<iostream>
#include<stdlib.h>
using namespace std;

int main()
{
    char palavra[30], letra[1], secreta[10];
    int tam, i, chances, acertos;
    bool acerto;
    
    chances=6;
    tam=0;
    i=0;
    acerto=false;
    acertos=0;
    
    cout << "Fale para o seu amigo tampar ";
    cout << "os olhos e digite a palavra secreta:\n";
    cin >> palavra;
    system("cls");
    
    while(palavra != '\0')
    {
        i++;
        tam++;
    }
    
    for(i=0; i<30; i++)
    {
        secreta='-';
    }
    
    while((chances>0) && (acertos<tam))
    {
        cout << "Chances restantes: " << chances << "\n\n";
        cout << "Palavra secreta: ";
        
        for(i=0; i<tam; i++)
        {
            cout << secreta;
        }
        
        cout << "\n\nDigite uma letra: ";
        cin >> letra[0];
        
        for(i=0; i<tam; i++)
    {
        if(palavra==letra[0])
        {
        acerto=true;
        secreta=palavra;
        acertos++;
        }
    }
    
        if(! acerto)
    {
        chances--;
    }

    acerto=false;
    system("cls");    
    }
    
    if(acertos==tam)
    {
        cout << "voce venceu\n\n";    
    }
    
    else
    {
        cout << "voce perdeu\n\n";
    }
    
    system("pause");
    
    return 0;
}

  • Curtir 1
  • Obrigado 1
Postado

@Eduardo Kazan      para postar seu código é melhor usar o botão   <>   que está desenhado lá na barra de ferramentas da janela de postar 

1043083149_barradeferramentas.JPG.ad9a72cdf57a0926d2e83cf2d88b4e68.JPG

pois senão seu código fica faltando alguns caracteres como os  [ i ]   que sumiram do seu código ,  e parece que está dando sempre o mesmo resultado de que você perdeu , por que ficou faltando colocar em qual  posição das string está se referindo ,  e seu código está bem balanceado , misturando códigos da linguagem  c  e da linguagem c++ , e então seu código com algumas modificações poderia ser assim   :

#include<iostream>
#include<stdlib.h>
using namespace std;
int main(){
    char palavra[30],letra[1],secreta[10];
    int tam,i,chances,acertos;
    bool acerto;
    chances=6;
    acerto=false;
    acertos=0;

    cout<<"Fale para o seu amigo tampar"<<endl;
    cout<<"os olhos e digite a palavra secreta : "<<endl;
    cin >>palavra;
    system("cls");
    tam = strlen(palavra);/* pega o tamanho de uma string */
    for(i=0; i<tam; i++){/* preenche com tracinhos no lugar de todas as letras da palavra */
        secreta[i] = '-';
    }
    secreta[i] = '\0';/* sinaliza o final de uma string */
    while(chances > 0 && acertos < tam){
        cout<<"Chances restantes : "<<chances<<endl;
        cout<<"Palavra secreta : "<<secreta<<endl;
        cout<<"\nDigite uma letra : ";
        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("cls");
    }
    if(acertos==tam){
        cout << "voce venceu\n\n";
    }
    else{
        cout << "voce perdeu\n\n";
    }
    system("pause");
    return 0;
}

 

  • Curtir 2
Postado

@devair1010 Agora eu sei a maneira correta de postar aqui. 

 

Então, é algo positivo misturar as linguagens c e c++?

 

Agora funcionou o joguinho! Porém só faltou incluir a biblioteca <string.h>.

 

Valeu pelas dicas cara. Comecei a aprender a programar tem pouco tempo... Abs!!!

  • Curtir 2
  • Obrigado 1
Postado

Cara se é positivo ou não pode render uma boa discussão hehe

 

Na minha opinião é melhor tentar aprender uma sintaxe de C++ mais moderna pelo menos C++11 e usar mais a biblioteca padrão do C++ ao invés das funções do C.

 

Por exemplo para manipular strings no C++ podemos usar as funções membro da classe string e operadores como +, +=  ao invés de usar funções da biblioteca padrão do C strlen, strcat etc etc.

 

Aqui tem um bom tutorial com comparações e exemplos de como manipular strings no C++.

https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Manipulando_strings

 

Seu programa tentando usar mais a sintaxe do C++

#include <iostream>
#include <string>

using namespace std;

int main()
{
    int chances = 6;
    bool acerto = false;
    string palavra;

    cout << "Fale para o seu amigo tampar" << endl;
    cout << "os olhos e digite a palavra palavra: " << endl;
    cin >> palavra;
    system("CLS");

    int acertos = 0;
    string secreta(palavra.size(), '-');

    while ((acertos < chances) && (secreta != palavra))
    {
        cout << "\n\nChances restantes: " << chances;
        cout << "\n\nPalavra secreta: " << secreta << endl;

        char letra;
        cout << "\nDigite uma letra: ";
        cin >> letra;
        for (unsigned int i = 0; i < palavra.length(); i++)
        {
            if (palavra[i] == letra)
            {
                acerto = true;
                secreta[i] = letra;
                acertos++;
            }
        }
        if(!acerto) {
            chances--;
        }
        acerto = false;
        system("CLS");
    }

    system("CLS");
    if (acertos == chances)
        cout << "\nVoce perdeu!";
    else
        cout << "\nVoce venceu!";

    return 0;
}

 

 

 

 

  • Curtir 4
  • Membro VIP
Postado

Olá a todos.
 

 

Tanto o código do @devair1010, tanto o código do @Benjamin Breeg tem alguns probleminhas.

 

Por exemplo:

- o código do @devair1010 tem:

  • o tamanho das variáveis palavra e secreta estão (continou) com tamanhos distintos. Não faz muito sentido, já que representam algo que serão comparadas entre si. O contexto do algoritmo não justifica a necessidade de diferença de tamanho;

obs.: mais abaixo cito os outros pontos que estão em comum com o outro código.

 

 

 

- já o código do @Benjamin Breeg tem diversos problemas. Exemplo:

  • não existe relação entre "acertos" e "chances", logo, tanto o while, tanto a verificação se acertou ou não ficam prejudicadas (deixo as analises com vocês);

 

Alguns pontos em comum nos códigos:

  1. está contabilizando os acertos de forma imprecisa, ou seja: repetir uma letra certa é considerado como acerto (não deve!);
  2. idem acima para as letras incorretas. (só deveria responder uma letra apenas uma vez);
  3. estão diferenciando maiúscula e minúscula (não deve!). No contexto do jogo, qual seria a diferença entre 'B' = 'b'?;
  4. estão invertendo a nomenclatura das variáveis. A palavra secreta é a primeira pessoa inseriu, não a que digitou. Poderia, inclusive, utilizar nomenclaturas mais sugestivas. Por exemplo "palavraSecreta" e "letrasReveladas"... ou algo do tipo.

Por aí vai.

 

No aguardo.

  • Curtir 1
Postado

Simon Viegas tentei dar uma melhorada seguindo suas recomendações.

 

O jogo agora esta mais intuitivo, mostra as letras que foram digitas, diferencia maiúscula e minúscula, gera avisos caso você digite uma letra que não existe ou tenta usar uma letra que já foi usada, modifiquei a parte que fazia a contagem dos erros e usei uma nomenclatura mais clara para as variáveis. Acho que agora esta funcionando corretamente.

 

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main()
{
    int chances = 6;
    int erros = 0;
    string palavraSecreta = "";
    string letrasDigitadas = "";

    cout << "Fale para o seu amigo tampar" << endl;
    cout << "os olhos e digite a palavra secreta: " << endl;
    cin >> palavraSecreta;
    transform(palavraSecreta.begin(), palavraSecreta.end(), palavraSecreta.begin(), ::toupper);

    string letrasReveladas(palavraSecreta.size(), '-');

    system("cls");

    while ((erros < chances) && (letrasReveladas != palavraSecreta))
    {
        cout << "\n\nChances restantes: " << (chances - erros);
        cout << "\n\nLetras digitadas: " << letrasDigitadas;
        cout << "\n\nPalavra secreta: " << letrasReveladas;

        char letra;
        cout << "\n\nDigite uma letra: ";
        cin >> letra;
        letra = toupper(letra);

        while (letrasDigitadas.find(letra) != string::npos)
        {
            cout << "\nVoce ja digitou a letra: " << letra << endl;
            cout << "\nDigite uma letra: ";
            cin >> letra;
            letra = toupper(letra);
        }

        letrasDigitadas += letra;

        if (palavraSecreta.find(letra) != string::npos)
        {
            for (unsigned int i = 0; i < palavraSecreta.length(); i++)
            {
                if (palavraSecreta[i] == letra)
                {
                    letrasReveladas[i] = letra;
                }
            }
        }
        else
        {
            cout << "\nVoce errou! A letra " << letra << " nao existe na palavra secreta!";
            erros++;
        }
    }

    if (erros == chances)
        cout << "\n\nVoce perdeu! A palavra era " << palavraSecreta << endl;
    else
        cout << "\n\nParabens voce venceu!" << endl;


    return 0;
}

 

  • Curtir 2

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!