Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //JogoDoAdivinha.js
- class JogoDoAdivinha{
- static DEFAULT_MIN = 1
- static DEFAULT_MAX = 999999
- static DEFAULT_NAME = "Anonymous"
- static ESTADO_NAO_COMECOU = 1
- static ESTADO_JOGA_MENOR = 2
- static ESTADO_JOGA_MAIOR = 3
- static ESTADO_TERMINADO_PARABENS = 4
- constructor(
- pOndeDarFeedback,
- pNome=JogoDoAdivinha.DEFAULT_NAME,
- pMin=JogoDoAdivinha.DEFAULT_MIN,
- pMax=JogoDoAdivinha.DEFAULT_MAX
- )
- {
- this.mOndeDarFeedback = pOndeDarFeedback
- this.mNome = pNome
- this.mMin = pMin
- this.mMax = pMax
- this.mJogadas = []
- this.mQuandos = []
- this.mInicio = this.mFim = undefined
- this.mAdivinhaMe = numeroAleatorio(this.mMin, this.mMax)
- this.mEstado = JogoDoAdivinha.ESTADO_NAO_COMECOU
- this.mScore = undefined
- }//constructor
- jogar(pN){
- var bPossoJogar = this.mEstado!=JogoDoAdivinha.ESTADO_TERMINADO_PARABENS
- if(bPossoJogar){
- this.mJogadas.push(pN)
- this.mQuandos.push(new Date())
- var bPrimeiraJogada = this.mEstado==JogoDoAdivinha.ESTADO_NAO_COMECOU && this.mJogadas.length===1
- if (bPrimeiraJogada){
- this.mInicio = this.mQuandos[0]
- }
- if(pN<this.mAdivinhaMe){
- this.mEstado = JogoDoAdivinha.ESTADO_JOGA_MAIOR
- }
- if(pN>this.mAdivinhaMe){
- this.mEstado = JogoDoAdivinha.ESTADO_JOGA_MENOR
- }
- if(pN===this.mAdivinhaMe){
- this.mEstado = JogoDoAdivinha.ESTADO_TERMINADO_PARABENS
- this.mFim = this.mQuandos[this.mQuandos-1]
- }
- }
- this.feedback()
- }//jogar
- feedback(
- pbCheat=true
- ){
- var jogadaMaisRecente = this.mJogadas.length > 0 ?
- this.mJogadas[this.mJogadas.length-1]
- :
- undefined
- //dashboard
- var strFeedback = ""
- strFeedback = this.dashboard()
- strFeedback+="<hr>"
- //informar o utilizador
- var strUser = ""
- switch(this.mEstado){
- case JogoDoAdivinha.ESTADO_NAO_COMECOU:
- strUser = "Jogo por iniciar.<br>"
- strUser += "Faça uma primeira jogada, para começar.<br>"
- break
- case JogoDoAdivinha.ESTADO_JOGA_MENOR:
- strUser = pbCheat ?
- `O teu palpite ${jogadaMaisRecente} é maior do que o meu ${this.mAdivinhaMe}.`
- :
- `O teu palpite ${jogadaMaisRecente} é maior do que o meu.`
- strUser+="<br>Joga <mark>MENOR</mark><br>"
- break
- case JogoDoAdivinha.ESTADO_JOGA_MAIOR:
- strUser = pbCheat ?
- `O teu palpite ${jogadaMaisRecente} é menor do que o meu ${this.mAdivinhaMe}.`
- :
- `O teu palpite ${jogadaMaisRecente} é menor do que o meu.`
- strUser+="<br>Joga <mark>MAIOR</mark><br>"
- break
- case JogoDoAdivinha.ESTADO_TERMINADO_PARABENS:
- strUser = "<mark>Parabéns! Acertaste no meu número</mark><br>"
- //strUser += `<a href='ja1_config.html'>RESTART</a>`
- break
- }//switch
- this.mScore = this.score()
- strFeedback += strUser
- this.mOndeDarFeedback.innerHTML = strFeedback
- }//feedback
- dashboard(){
- var strDashboard = "<ul>"
- for (var prop in this){
- if (prop!="mOndeDarFeedback"){
- strDashboard+=`<li><mark>${prop}:</mark>${this[prop]}</li>`
- }
- }//for
- strDashboard+=`<li><mark>tempo de jogo (décimos de segundo):</mark>${this.tempoDeJogoEmDecimosDeSegundo()}</li>`
- strDashboard+=`<li><mark>score:</mark>${this.score()}</li>`
- strDashboard+="</ul>"
- return strDashboard
- }//dashboard
- score(){
- if (this.mJogadas.length>0){
- //recompensar? punir?
- var iAmp = Math.max(this.mMin, this.mMax) - Math.min(this.mMin, this.mMax)
- var recompensas = iAmp
- var punishments = this.mJogadas.length + this.tempoDeJogoEmDecimosDeSegundo()
- var score = Math.floor(recompensas/punishments)
- return score
- }
- }//score
- /*
- confira às instâncias do tipo JogoDoAdivinha,
- um novo método, chamada "tempoDeJogoEmDecimosDeSegundo"
- que retorna quanto tempo já decorreu entre a jogada +recente
- e a primeira, em décimos de segundo.
- - assinatura
- - computação
- - retorno
- */
- tempoDeJogoEmDecimosDeSegundo(){
- if(this.mQuandos.length>0){
- var maisRecente = this.mQuandos[this.mQuandos.length-1]
- var primeira = this.mQuandos[0]
- var difMs = maisRecente-primeira
- //difMs/1 //permanece em ms
- //difMs/10 //fica em cs (centésimos de segundo)
- return difMs/100 //décimos de segundo
- }
- return 0
- }//tempoDeJogoEmDecimosDeSegundo
- }//JogoDoAdivinha
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement