Jogo da Forca

1. Jogo da Forca

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/01/2018 - 20:52h

Olá, criei um Jogo da Forca e gostaria de saber a opinião e receber sugestões para melhoria de código de programadores mais experientes.

Segue o código:

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

std::string palavfr_secreta;
std::string dica;
std::string esconde;

short chances;
short acertos;
short erros;

void jogo(){

std::string letra_digitada;
std::string letra_secreta;
std::string letra_esconde;

short contador=0;

std::cout << "================== " << std::endl;
std::cout << "Dica-------------> " << dica << std::endl;
std::cout << "Palavra secreta--> " << esconde << std::endl;
std::cout << "Chances----------> " << chances << std::endl;
std::cout << "================== " << std::endl << std::endl;
std::cout << "Digite uma letra-> ";
std::cin >> letra_digitada;

std::cin.ignore();

if(letra_digitada.size()>1){

system("cls");

std::cout << "DIGITE SOMENTE UMA LETRA!" << std::endl;

jogo();

}else{

for(unsigned i=0; i<palavfr_secreta.size(); i++){

letra_secreta=palavfr_secreta.at(i);
letra_esconde=esconde.at(i);

if(letra_digitada.compare(letra_esconde)==0){

system("cls");

std::cout << "Você não pode digitar a mesma letra mais de uma vez" << std::endl;

chances--;

break;

}else if(letra_digitada.compare(letra_secreta)==0){

system("cls");

esconde.at(i)=letra_digitada.at(0);

contador++;
acertos++;

}else if(i==palavfr_secreta.size()-1 && contador==0){

system("cls");

std::cout << "Letra não correspondente" << std::endl;

chances--;
erros++;
}
}
}

if(chances==0){

system("cls");

std::cout << "======================================================================" << std::endl;
std::cout << "Você perdeu! A frase ou palavra secreta era " << "'" << palavfr_secreta << "'" << std::endl;
std::cout << "Total de acertos -> " << acertos << std::endl;
std::cout << "Total de erros -> " << erros << std::endl;
std::cout << "======================================================================" << std::endl;

}else if(esconde.compare(palavfr_secreta)==0){

system("cls");

std::cout << "=======================================================================" << std::endl;
std::cout << "Você acertou! A frase ou palavra secreta era " << "'" << palavfr_secreta << "'" << std::endl;
std::cout << "Total de acertos -> " << acertos << std::endl;
std::cout << "Total de erros -> " << erros << std::endl;
std::cout << "=======================================================================" << std::endl;

}else{

jogo();
}
}

int main(){

std::cout << "===============Jogo da Forca===============" << std::endl;
std::cout << "Digite uma palavra ou frase secreta-> ";
getline(std::cin, palavfr_secreta);

system("cls");

std::cout << "Escreva uma dica-> ";
getline(std::cin, dica);

system("cls");

std::cout << "Defina o número de Chances-> ";
std::cin >> chances;

for(unsigned i=0; i<palavfr_secreta.size(); i++){

if(palavfr_secreta.at(i)==' '){
esconde+=" ";
}else{
esconde+="-";
}
}

system("cls");

jogo();

return 0;
}




  


2. Re: Jogo da Forca

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/01/2018 - 20:54h

forca: 5: forca: std::string: not found
forca: 6: forca: std::string: not found
forca: 7: forca: std::string: not found
forca: 9: forca: short: not found
forca: 10: forca: short: not found
forca: 11: forca: short: not found
forca: 13: forca: Syntax error: "(" unexpected

O que eu fiz errado?
______________________________________________________________________

#voltalisteiro
#forauruk

Eu era o edu666edu, porém mudei o nick para condizer com o IRC


3. Re: Jogo da Forca

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/01/2018 - 20:57h

akko escreveu:

forca: 5: forca: std::string: not found
forca: 6: forca: std::string: not found
forca: 7: forca: std::string: not found
forca: 9: forca: short: not found
forca: 10: forca: short: not found
forca: 11: forca: short: not found
forca: 13: forca: Syntax error: "(" unexpected

O que eu fiz errado?


Hum...você simplesmente copiou e colou? Se sim, deve ser por causa da biblioteca windows.h que só funfa no windows e não no linux...

Desculpa por está postando essa pergunta neste fórum, mais eu só uso Linux em VM.
______________________________________________________________________


Eu era o edu666edu, porém mudei o nick para condizer com o IRC


O antigo era melhor....



4. Re: Jogo da Forca

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/01/2018 - 21:00h

GodOfTrolls escreveu:

Hum...você simplesmente copiou e colou? Se sim, deve ser por causa da biblioteca windows.h que só funfa no windows e não no linux...


Fez a coisa errada, então. Ninguém aqui vai poder avaliar porque ninguém usa Windows.

O antigo era melhor....


Quero usar 'akko' na maioria dos lugares para as pessoas me reconhecerem.


______________________________________________________________________

#voltalisteiro
#forauruk

era o edu666edu, porém mudei o nick para condizer com o IRC


5. Re: Jogo da Forca

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/01/2018 - 21:04h

akko escreveu:

GodOfTrolls escreveu:

Hum...você simplesmente copiou e colou? Se sim, deve ser por causa da biblioteca windows.h que só funfa no windows e não no linux...


Fez a coisa errada, então. Ninguém aqui vai poder avaliar porque ninguém usa Windows.


Depende...programador que é programador não só programa para linux quanto pra windows. E outra, acho que pra funfar no linux basta trocar 'cls' dentro system por 'clear'.



6. Re: Jogo da Forca

Perfil removido
removido

(usa Nenhuma)

Enviado em 23/01/2018 - 21:07h

GodOfTrolls escreveu:

akko escreveu:

GodOfTrolls escreveu:

Hum...você simplesmente copiou e colou? Se sim, deve ser por causa da biblioteca windows.h que só funfa no windows e não no linux...


Fez a coisa errada, então. Ninguém aqui vai poder avaliar porque ninguém usa Windows.


Depende...programador que é programador não só programa para linux quanto pra windows. E outra, acho que pra funfar no linux basta trocar 'cls' dentro system por 'clear'.



Segue o link edu666..não sei das quantas....
cpp.sh/3nx3a

Tá funfando de boa agora :)



7. Re: Jogo da Forca

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/01/2018 - 05:03h

GodOfTrolls escreveu:

Olá, criei um Jogo da Forca e gostaria de saber a opinião e receber sugestões para melhoria de código de programadores mais experientes.


Alguns comentários sobre coisas que vi sem me aprofundar numa análise detalhada:

1) A inclusão do cabeçalho <windows.h> me pareceu desnecessária, pois eu não vi (no exame superficial do código) nenhuma chamada específica desse sistema no programa em C ou C++ (lembrando que o que vai como parâmetro da função system() é executado fora do programa, num processo separado).

2) Por outro lado, você deveria ter incluído <cstdlib> (ou <stdlib.h>) para poder usar a função system().

3) Usar system() é uma prática não muito boa, pois além do problema de portabilidade entre sistemas, também é ruim do ponto de vista de desempenho, consumo de recursos e segurança. Se é para recorrer a coisas não portáveis a partir do programa em C ou C++, tente trazer para dentro do programa a tarefa a ser realizada (a não ser que o custo disso seja proibitivo), ainda que você tenha de recorrer a bibliotecas não-padronizadas. Na postagem nº 12 do tópico https://www.vivaolinux.com.br/topico/C-C++/Preciso-fazer-um-programa-em-C-para-cadastra-alunos-consu..., feita neste fórum do VoL, há a implementação de uma função chamada my_cls(), que usa compilação condicional para que a mesma função possa ser usada no mundo UNIX, no Windows e no MS-DOS.

4) Você usa chamadas recursivas da função jogo() a si mesma como mecanismo de repetição. Isso é ineficiente do ponto de vista de desempenho e consumo de memória na pilha, e ainda o força a usar como variáveis estáticas (que você ainda colocou como globais), em lugar de as fazer automáticas, dentro da função. Em vez de repetição por meio de recursividade, seria melhor que você usasse os comandos de controle de fluxo de que a linguagem dispõe, tais como while ou do...while.

5) Tirando-se a recursividade, usada indevidamente e quiçá eliminada numa próxima versão, a função jogo() só é empregada em um outro ponto do programa, que é dentro de main(). Isso é uma forte sugestão de que o conteúdo dela não precisaria estar numa função separada, mas poderia ser seguramente movido para a função que a chamava.


8. Re: Jogo da Forca

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/01/2018 - 05:06h

akko escreveu:

forca: 5: forca: std::string: not found
forca: 6: forca: std::string: not found
forca: 7: forca: std::string: not found
forca: 9: forca: short: not found
forca: 10: forca: short: not found
forca: 11: forca: short: not found
forca: 13: forca: Syntax error: "(" unexpected

O que eu fiz errado?


Parece que você tentou executar diretamente o programa em C++, como se fosse um script, em lugar de compilá-lo e executar o produto da compilação.


9. Re: Jogo da Forca

Perfil removido
removido

(usa Nenhuma)

Enviado em 24/01/2018 - 10:52h

paulo1205 escreveu:
Parece que você tentou executar diretamente o programa em C++, como se fosse um script, em lugar de compilá-lo e executar o produto da compilação.


E foi exatamente o que eu fiz. Como eu o compilo? Desculpe a ignorancia, nunca sequer toquei em C.

______________________________________________________________________

#voltalisteiro
#forauruk
Eu era o edu666edu, porém mudei o nick para condizer com o IRC






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts