-1
Hello, I was solving a college issue about a "game" in which you should think about a number and the machine should try to hit your number. I was able to do this work by creating a "formula" for him to find the value that the user thinks, but I would like the program to be a little more random, without the need for formulas. So the question is, is there a possibility of changing the Rand interval in the middle of the code? For each time he "kicks" a value, the interval decrease and he increases his chances of hitting the number.
#include<stdio.h>
#include<locale.h>
#include<string.h>
#include<stdlib.h>
#include <time.h>
int main(void){
setlocale(LC_ALL,"");
int t, in=0, f=100, cont=1, c;
char a[10];
printf("------------------------------Bem vindo(a) ao jogo de adivinhar um número!!!-----------------------\n\n");
printf("Funciona assim: você deve pensar em um número de 1 a 100 e eu vou tentar adivinhar seu número.\n");
printf("Eu vou dizer meu palpite e você responde se ele é maior ou menor que o número que você está pensando.\n");
printf("Você deve me dizer se eu acertei o número ou se o número que eu disse é maior ou menor que o número que você pensou.\n");
printf("Para vencer, eu devo acertar exatamente o número que você pensou.\n");
printf("Vamos começar? Pense num número para eu adivinhar.\n");
printf("\n\nQuando tiver terminado de pensar, digite 1 para continuar com o jogo: ");
scanf("%i", &c);
if(c==1){
while(1){
srand( (unsigned)time(NULL) );
t = in+ (rand () % f);
if(cont==1){
t=f/2;
}else if(cont>1 && (f/2)>in){
t=f/2;
}printf("Seu número é %i, estou certo?\n", t);
printf("Se acertei, digite (acertou), se não, digite se seu número é (maior) ou (menor) que meu número: ");
fflush(stdin);
gets(a);
if(strcmp(a, "acertou")==0){
printf("\n\n\nSou muito bom, não? Já acertei seu número!!\n\n\n");
break;
}else if(strcmp(a, "maior")==0){
f = f + in;
in = t;
f = f-in;
in++;
printf("\n\nSeu número é maior do que o que eu disse? Ok, vou tentar novamente! \n\n\n");
}else if(strcmp(a, "menor")==0){
f = t - in;
if(f>1){
f--;
}printf("\n\nSeu número é menor do que o que eu disse? Ok, vou tentar novamente! \n\n\n");
}
cont++;
}
}else{
printf("\n\nDígito inválido! Da próxima vez digite 1 para continuar com o jogo!\n\n");
}
return 0;
}
First, define "a little more random, no need for formulas". If you want the interval to be random just have no interval The interval is precisely to tr a limit. If you just want to lower the limit is decreasing the randomness, if you want to increase, just increase the interval and that’s it. At the extreme of the increase is to have no interval. If you want to insist on this, do the
in
and thef
be random too. It’s silly. Other than that ,I just advise organizing the code a little bit, defining better names for things.– Maniero
Thanks for the answer first, and I’m sorry for the messy variables. In this case the "least random" would be to kick a literally random number between 0 and 100. In the formula I made it always starts from 50, if I say that the value is lower it goes following a formula, you know? I would like to know if there are ways to leave this less "robotic" and more at the same chance. Of course, it wouldn’t be purely a chance since I’m narrowing it down, but I think I’ve made my point. Anyway, it’s a question of just curiosity. Is there any way?
– Victor Hugo