Suponha que você é gestor de uma equipe de desenvolvimento de software e em determinado momento é pedido por um gestor de projetos que seja feita uma atualização de um dos softwares que haviam sido iniciados, mas não concluídos. Este software se trata de um jogo da Forca simples, mas que permite jogar em duas pessoas alternando entre quem vai informar a palavra secreta, e quem vai informar letras até acertar a palavra secreta ou ser enforcado. Basicamente, o funcionamento atual do jogo se baseia da seguinte forma: 1. É informado ao jogador 1 sobre as regras básicas do jogo. 2. O Jogador 1 informa uma palavra secreta com até 20 letras. 3. O jogador 2 é informado das regras básicas do jogo. 4. O jogador 2 informa uma letra palpite. 5. A cada palpite é verificado se o mesmo acertou ou errou, e é informado ao mesmo a quantidade atual de acertos e erros. 6. O jogo termina se ele acertar todas as letras da palavra secreta, ou for enforcado após cometer o sexto palpite equivocado. Suponha que o mesmo não tenha sido concluído e algumas partes do código estejam faltando para que o mesmo funcione e sua equipe foi encarregada da retomada deste código para que o mesmo possa ser finalizado, executado e testado. Isso representa a tarefa referente a questão 1. Paralelamente ao desenvolvimento do restante do código faltante pelos desenvolvedores, foi pedido que você e alguns colaboradores se reunam para discutir melhorias que poderiam ser implementadas no software, sendo este o trabalho a ser desenvolvido na questão 2. Para esta atividade então, são pedidas duas tarefas: Questão 1: Completar as partes faltantes do código em linguagem C indicadas por lacunas e enviar o mesmo completo usando como base o código que vem ao final da atividade. É preciso completar o código com o ajuste do idioma, a condição de parada do laço de repetição principal do jogo e a verificação de vitória ou derrota do jogador 2. Questão 2: Citar ao menos duas melhorias que poderiam ser acrescentadas neste código de forma a tornar o software mais completo, robusto ou com uma interface mais agradável em forma textual apenas, não sendo necessário o envio do código relativo a estas melhorias. Assim, a entrega para esta atividade se baseia em um arquivo TXT de texto simples contendo o código de resposta da Questão 1, e suas considerações escritas para a questão 2 no mesmo arquivo a ser anexado como atividade. Segue o código base para a questão 1 com lacunas indicando trechos de código faltantes. #include #include ______________________________ // ---------- Aqui falta a biblioteca necessária para idioma - 0.1 ponto int main() { char resposta[20]; int erros; int acertos; char letra; int i, j; int max; __________________________ // --------- Aqui falta a definiçao de idioma - 0.1 ponto printf("************ Jogo da Forca ************\n"); printf("************** Jogador 1 **************\n\n"); printf("Utilize apenas letras minúsculas.\n"); printf("Máximo de 20 letras\n\n"); letra = ' '; max = 1; for (i = 1; i <= 20; i++) { resposta[i] = ' '; } erros = 0; acertos = 0; printf("Digite a palavra secreta: "); scanf (" %s", resposta); max = strlen (resposta); system("clear||cls"); printf("************ Jogo da Forca ************\n"); printf("************** Jogador 2 **************\n\n"); printf("Utilize apenas letras minúsculas.\n"); printf("Limite de 6 erros. Palavra de até 20 letras\n\n"); while _________________________________ // Aqui falta a condição de parada do laço - 0,3 ponto { printf("Digite uma letra: "); scanf (" %c", &letra); j = 0; for (i = 0; i <= max; i++) { if (resposta[i] == letra) { acertos++; j++; printf ("\nAcertos: %d - Erros: %d\n",acertos, erros); } } if (j <= 0) erros++; \* ------------------- Aqui falta a parte responável pela verificação de vitoria ou derrota ----------------------*/ \* -------------------------------------- Final da Verificação ----------------------------------------------------------------*/ } return (0); }
Soluções para a tarefa
Resposta:
Código e melhorias.
Explicação:
1)Segue o código base para a questão 1 com lacunas indicando trechos de código faltantes.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char palavra[20];
char forca[20];
char tentativa;
int chances = 5;
int letras, i, j=0, cont;
int start(void)
{
printf("\nDigite uma palavra: ");
fgets(palavra, 20, stdin);
trimEnd(palavra);
strcpy(forca, palavra);
letras = strlen(forca);
for (i=0; i<letras; i++)
{
forca[i]= '_';
}
}
int jogo(void)
{
while(chances > 0)
{
__fpurge(stdin);
printf("\nChances: %d - palavras tem %d letras\n\n", chances, letras);
for (i=0; i<letras; i++)
{
printf("\n%c ", forca[i]);
}
printf("\n\nDigite uma letra: ");
scanf("%c", &tentativa);
cont = 0;
for (i=0; i<letras; i++)
{
if (palavra[i] == tentativa)
{
forca[i] == tentativa;
cont = cont + 1;
j++;
}
}
if (cont <= 0)
{
chances = chances - 1;
}
system("clear");
if (j == letras)
{
break;
}
}
}
int resultado(void)
{
if(chances == 0)
{
__fpurge(stdin);
printf("\nChances: %d - palavra tem %d letras\n\n", chances, letras);
puts(forca);
printf("\nVocê perdeu. \nA palavra era: ");
puts(palavra);
}
else
{
printf("\nParabens, voce acertou a palavra ", chances, letras);
puts(palavra);
}
}
void trimEnd(char *str) { //Tira o \n que o fgets lê junto com a variavel pra ir para a ultima linha
char *end = str + strlen(str) - 1;
while (end > str && isspace(*end)) end--;
end++;
*end = 0;
}
int main()
{
start();
system("clear");
jogo();
resultado();
return(0);
}
Resposta:
CODIGO CORRIGIDO:
#include <stdio.h>
#include <string.h>
#include <locale.h>
#include <stdlib.h>
int main()
{
system ("cls");
setlocale(LC_ALL,"Portuguese");
char resposta[20];
int erros;
int acertos;
char letra;
int i, j;
int max;
printf("************ Jogo da Forca ************\n");
printf("************** Jogador 1 **************\n\n");
printf("Utilize apenas letras minúsculas.\n");
printf("Máximo de 20 letras\n\n");
letra = ' '; max = 1;
for (i = 1; i <= 20; i++) {
resposta[i] = ' ';
}
erros = 0; acertos = 0;
printf("Digite a palavra secreta: ");
scanf (" %s", resposta);
max = strlen (resposta);
system("clear||cls");
printf("************ Jogo da Forca ************\n");
printf("************** Jogador 2 **************\n\n");
printf("Utilize apenas letras minúsculas.\n");
printf("Limite de 6 erros. Palavra de até 20 letras\n\n");
while (acertos<strlen(resposta) && erros<6)
{
printf("Digite uma letra: ");
scanf (" %c", &letra);
j = 0;
for (i = 0; i <= max; i++)
{
if (resposta[i] == letra)
{
acertos++; j++;
printf ("\nAcertos: %d - Erros: %d\n",acertos, erros);
}
}
if (j <= 0)
erros++;
}
if (acertos == strlen(resposta))
{
printf ("\nPARABÉNS!\n");
}
else
printf ("\n VOCÊ PERDEU!!!\n");
return (0);
}
Explicação:
ainda falta a explicação da questão 2
mas creio que seja a utilização do "do wile"