Tem uma forma melhor de voltar ao inicio do jogo, sem usar o “volta” e " goto" ?
// incluindo as bibliotecas
#include <stdio.h>
#include <locale.h> // biblioteca para definição de configurações locais
#include <stdlib.h>
#include <time.h>
// definindo as constantes
#define NUMERO_DE_TENTATIVAS 3
#define FACIL 20
#define MEDIO 15
#define DIFICIL 6
#define PONTOS_INICIAL 1000
int main() {
volta:
setlocale(LC_ALL, "Portuguese"); // Definição para uso de configurações em português; Usei por causa da acentuação no compilador
//imprimi cabeçalho bonito do jogo
printf("\n\n");
printf(" P /_\\ P \n");
printf(" /_\\_|_|_/_\\ \n");
printf(" n_n | ||. .|| | n_n Bem vindo ao \n");
printf(" |_|_|nnnn nnnn|_|_| Jogo de Adivinhação! \n");
printf(" |\" \" | |_| |\" \" | \n");
printf(" |_____| ' _ ' |_____| \n");
printf(" \\__|_|__/ \n");
printf("\n\n");
// declarando variaveis que serão usadas mais a frente
int chute;
int acertou;
int nivel;
int totaldetentativas;
int limite;
int voltar;
// difinindo a quantidade de pontos inicial
double pontos = 1000;
//gerando um número secreto aleatório
printf("Escolha o limite: ");
scanf("%d", &limite);
srand(time(0));
int numerosecreto = rand() % limite;
// escolhendo o nivel de dificuldade
printf("Qual o nível de dificuldade?\n");
printf("(1) Fácil (2) Médio (3) Difícil\n\n");
printf("Escolha: ");
scanf("%d", &nivel);
switch(nivel) {
case 1:
totaldetentativas = 20;
break;
case 2:
totaldetentativas = 15;
break;
default:
totaldetentativas = 6;
break;
}
// loop principal do jogo
for(int i = 1; i <= totaldetentativas; i++) {
printf("-> Tentativa %d de %d\n", i, totaldetentativas);
printf("Chute um número: ");
scanf("%d", &chute);
// tratando chute de número negativo
if(chute < 0) {
printf("Você não pode chutar números negativos\n");
i--;
continue;
}
// verifica se acertou, foi maior ou menor
acertou = chute == numerosecreto;
if(acertou) {
break;
} else if(chute > numerosecreto){
printf("\nSeu chute foi maior do que o número secreto!\n\n");
} else {
printf("\nSeu chute foi menor do que o número secreto!\n\n");
}
// calcula a quantidade de pontos
double pontosperdidos = abs(chute - numerosecreto) / 2.0;
pontos = pontos - pontosperdidos;
}
// imprrimindo mensagem de vitória ou derrota
printf("\n");
if(acertou) {
printf(" OOOOOOOOOOO \n");
printf(" OOOOOOOOOOOOOOOOOOO \n");
printf(" OOOOOO OOOOOOOOO OOOOOO \n");
printf(" OOOOOO OOOOO OOOOOO \n");
printf(" OOOOOOOO # OOOOO # OOOOOOOO \n");
printf(" OOOOOOOOOO OOOOOOO OOOOOOOOOO \n");
printf("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO \n");
printf("OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO \n");
printf("OOOO OOOOOOOOOOOOOOOOOOOOOOOOO OOOO \n");
printf(" OOOO OOOOOOOOOOOOOOOOOOOOOOO OOOO \n");
printf(" OOOO OOOOOOOOOOOOOOOOOOOO OOOO \n");
printf(" OOOOO OOOOOOOOOOOOOOO OOOO \n");
printf(" OOOOOO OOOOOOOOO OOOOOO \n");
printf(" OOOOOO OOOOOO \n");
printf(" OOOOOOOOOOOO \n");
printf("\nParabéns! Você acertou!\n");
printf("Você fez %.2f pontos. Até a próxima!\n\n", pontos);
} else {
printf(" \\|/ ____ \\|/ \n");
printf(" @~/ ,. \\~@ \n");
printf(" /_( \\__/ )_\\ \n");
printf(" \\__U_/ \n");
printf("\nVocê perdeu! Tente novamente!\n\n");
}
while(voltar = 1) {
printf("Digite 1 para voltar.\n");
printf("Você quer jogar novamente? ");
scanf("%d", &voltar);
goto volta;
}
}