:- use_module(library(arithmetic)).

sorteio(S):-
        random(X), 
        Y is X*100, 
        round(Y,S).

lerNumeroUsuario(N):-
    write('Qual é o seu chute? '),
    read(N).

iniciarContagem:-
  retractall(contagemAtual(_)),
  assert(contagemAtual(0)).

terminarContagem:-
    retractall(contagemAtual(_)).

atualizarContagem :-
        contagemAtual(X),
        retractall(contagemAtual(_)),
        Y is X +1,
        assert(contagemAtual(Y)).

compararNumero(N, N) :-
        write('acertou!\n').
    
compararNumero(N, S) :-
        N < S,
        atualizarContagem,
        write('errou! O número sorteado é maior\n').

compararNumero(N, S) :-
        N > S, 
        atualizarContagem,
        write('errou! O número sorteado é menor\n').

manterHistorico(Nome, C) :-
    assert(jogo(Nome, C)).

listaHistorico(Lista) :- 
    findall(Nome/C, jogo(Nome, C), Lista).

adivinhar(Nome, C) :-
  iniciarContagem,
  sorteio(S),
  repeat,
  lerNumeroUsuario(N),
  compararNumero(N,S),
  S==N, !,
  contagemAtual(C), 
  manterHistorico(Nome, C),
  terminarContagem.



