Olá, não sei se já havia contado para vocês, que estou cursando o segundo semestre de Engenharia de Softwerare, o que está consumindo muito do meu tempo e também do meu cérebro nos últimos meses. E recentemente em uma de nossas atividades foi nós pedidos para elaborar um programa que permita ao usuário jogar o clássico jogo de Forca com palavras pré-definidas, sendo assim foi nos exigido que o Programa deveria ser da seguinte forma, ou seja:
“O programa deve começar exibindo uma mensagem de boas-vindas e as regras do jogo.
O programa deve selecionar aleatoriamente uma palavra a partir de um conjunto pré-definido de palavras secretas.
O programa deve exibir a palavra oculta para o jogador, usando underscore “_” para cada letra não revelada.
O jogador terá um número máximo de tentativas para adivinhar a palavra secreta.
A cada tentativa, o jogador deverá fornecer uma letra como palpite.
O programa deve verificar se a letra está presente na palavra secreta e atualizar a palavra oculta, mostrando as letras corretas reveladas e mantendo os underscores para as letras ainda não reveladas.
O programa deve informar ao jogador se a letra fornecida é válida (ou seja, é uma letra do alfabeto) e se já foi tentada anteriormente.
O jogador pode ser informado quantas tentativas ainda restam.
O jogo deve continuar até que o jogador adivinhe a palavra correta ou exceda o número máximo de tentativas permitidas.
Após o término do jogo, o programa deve exibir uma mensagem informando se o jogador venceu ou perdeu, e também mostrar a palavra secreta correta.
E também não poderíamos nos esquecer de usar a estrutura de repetição “for” ou “while” para controlar as iterações do jogo e, se necessário, criar funções auxiliares para melhor organizar o código”.
Confesso que para mim, não foi nada fácil, por esse motivo decidi compartilhar o resultados aqui com vocês, depois de muito quebrar a cabeça, ou seja, estava jogando o jogo errado, não era quebra cabeça e sim, um jogo de forca….
#include <iostream>
#include <string>
#include <ctime>
#include <cctype>
#include <cstdlib>
usingnamespacestd;
constintquant_palavras=5;
string banco[quant_palavras]={
“abacaxi”,
“computador”,
“cachorro”,
“cabide”,
“vagalume”};
stringpalavra_sort;
stringpalavra_dig;
int sorteia (){
srand (time (NULL));
returnrand()% (quant_palavras);
}
voidimprime_palavra_dig(){
cout<< “\n “<<palavra_dig.size()<<” letras \n \n “;
cout<<palavra_dig<< “\n”;
}
void copia (intind){
stringnewstring = banco[ind];
palavra_sort = newstring;
}
voidlimpa_palavra_dig(){
stringnewstring = palavra_sort;
for (int i=0;i <newstring.size();i++){
newstring[i]= ‘_’;
}
palavra_dig = newstring;
}
voidimprime_forca(intlet_erro){
switch(let_erro){
case 0:
cout<<” ________ “<<endl;
cout<<“| “<<endl;
cout<<“| “<<endl;
cout<<“| “<<endl;
cout<<“| “<<endl;
break;
case 1:
cout<<” ________ “<<endl;
cout<<“| O “<<endl;
cout<<“| “<<endl;
cout<<“| “<<endl;
cout<<“| “<<endl;
break;
case 2:
cout<<” ______ “<<endl;
cout<<“| O “<<endl;
cout<<“| / “<<endl;
cout<<“| “<<endl;
cout<<“| “<<endl;
break;
case 3:
cout<<” ______”<<endl;
cout<<“| O “<<endl;
cout<<“| /| “<<endl;
cout<<“| “<<endl;
cout<<“| “<<endl;
break;
case 4:
cout<<” ________ “<<endl;
cout<<“| O “<<endl;
cout<<“| /| “<<endl;
cout<<“| / “<<endl;
cout<<“| “<<endl;
break;
case 5:
cout<<” __________ “<<endl;
cout<<“| O “<<endl;
cout<<“| /|\\”<<endl;
cout<<“| / “<<endl;
cout<<“| “<<endl;
break;
case 6:
cout<<” ___________ “<<endl;
cout<<“| O “<<endl;
cout<<“| /|\\”<<endl;
cout<<“| / \\”<<endl;
cout<<“| “<<endl;
break;
}
}
boolverifica_letra(char letra, string vetor){
for(int i=0;i<vetor.size();i++){
if(letra==vetor[i]) {
returntrue;
}
}
return false;
}
void substitui(char letra){
for(int i=0;i<palavra_sort.size();i++){
if(palavra_sort[i]==letra){
palavra_dig[i]=letra;
}
}
}
voidimprime_let_dig(char letras[],inttam){
cout<<“\n\n letras digitadas: “;
for(int i=0;i<tam;i++){
cout<<letras[i]<<“, “;
}
cout<<“\n”;
}
voidimprime_regras() {
cout<< “BEM-VINDO AO JOGO DA FORCA \n\n\n”;
cout<< “seja bem-vindo ao jogo da forca.\n\n”;
cout<< “REGRAS\n\n”;
cout<< “1. o computador sorteara uma palavra aleatoria.\n”;
cout<< “2. a cada rodada, digite uma letra de sua preferencia.\n”;
cout<< “3. a cada letra certa, as letras serao reveladas no painel.\n”;
cout<< “4. a cada letra errada, uma parte do corpo aparece na forca.\n”;
cout<< “5. o jogo acaba se o jogador acertar todas as letras ou errar 6 vezes.\n”;
cout<< “\nboa sorte!\n\n”;
system(“pause”);
system(“cls”);
}
voidimprime_fim_de_jogo(bool ganhou, stringpalavra_sort){
system(“cls”);
cout<< “FIM DE JOGO\n\n\n”;
if (ganhou) {
cout<< “PARABENS!!! VOCE GANHOU!!!!\n\n\n”;
} else {
cout<< “que pena, voce perdeu! tente novamente.\n\n\n”;
}
cout<< “a palavra era: ” <<palavra_sort<< “\n\n”;
cout<< “obrigado por jogar. ate a proxima!\n\n”;
}
intmain(){
imprime_regras();
intind_palavra=sorteia();// sortear uma palavra
copia(ind_palavra);
limpa_palavra_dig(); //funçaoresponsavel por limpar o vetor da palavra digitada
intcont_let_dig=0; //contador de letras digitadas
intcont_erros=0;
charletras_digitadas[26];
char letra;
bool ganhou = false;
while(cont_erros<6 && ganhou == false){
system(“cls”);
imprime_forca(cont_erros);
imprime_palavra_dig();
imprime_let_dig(letras_digitadas, cont_let_dig);
cout<<“\n\n Tentativas restantes: “<<6-cont_erros<<“\n\n”;
//cout<<“\n\n letras digitadas:”<<letras_digitadas<<“\n”;
cout<<“\n\n”;
cout<<“digite uma letra:”;
cin>>letra;
letra=tolower(letra);
if (isalpha(letra) == false) {
cout<<“o valor digitado nao e uma letra! Tente Novamente!\n”;
system(“pause”);
}elseif(verifica_letra(letra,letras_digitadas)){
cout<<“letra ja foi digitada! Tente Novamente!\n”;
system(“pause”);
}else{
letras_digitadas[cont_let_dig] =letra;
cont_let_dig++;
if(verifica_letra(letra,palavra_sort)){
substitui(letra);
// verifica se ainda existem _ na letra
// se nao existir, ganhou
if (palavra_dig.find(‘_’) == string::npos) {
// nao achou
ganhou = true;
}
}else{
cout<<“\n letra incorreta!Tente novamente\n\n”;
cont_erros++;
system(“pause”);
}
}
}
imprime_fim_de_jogo(ganhou, palavra_sort);
return 0;
}
Espero que possa ajudar alguém, que esteja assim como eu, em busca de matar sua cede por conhecimento. Bora jogar??