Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

180
Views
El código JavaScript no funciona con una determinada condición

Estoy construyendo un sitio web con juegos de matemáticas en los que puedes ganar puntos. Las puntuaciones se calculan después de terminar un juego. Así que el puntaje 1 para el juego 1 comienza en 0, pero si lo haces correctamente, obtendrás 10 puntos, lo mismo ocurre con los otros juegos (juego 2 = puntaje 2, juego 3 = puntaje 3, etc.)

Para calcular la puntuación total utilizo:

 var totalscore = parseInt(score1) + parseInt(score2) + parseInt(score3) ... and so on

Tengo una función para comprobar la puntuación total de vez en cuando:

 function totaalscoreshow() { var totaalscore = parseInt(score1) + parseInt(score2) + parseInt(score3) + parseInt(staat.scoreM1) + parseInt(M_score2) + parseInt(M_score3) + parseInt(H_staat.scoreH1) + parseInt(H2_staat.scoreH2) + parseInt(verlies_winst); document.getElementById("totaalscore").innerText = totaalscore; document.getElementById("totaalBet").innerText = totaalscore; } totaalscoreshow(); setInterval(totaalscoreshow, 100);'

La puntuación total también se define como una variable global.

Todo esto funciona bien. Pero estoy tratando de poner la puntuación total en una condición. Lo probé de varias maneras. Dentro de los cuales:

 function CheckInzet() { setInterval(totaalscoreshow, 100) if (totaalscore < parseInt(inzet.value) || totaalscore <= 0) { inzet_leeg.innerText = "Je hebt niet genoeg punten om in te zetten"; return; } else { inzetCorrect = true; } } setInterval(CheckInzet, 11); if (inzetCorrect == true) { ... more code ... } ... more code ...

también de esta manera:

 totaalscoreshow(); if (totaalscore < parseInt(inzet.value) || totaalscore <= 0){ inzet_leeg.innerText = "Je hebt niet genoeg punten om in te zetten"; return; } else if (inzet.value == "0" || inzet.value == 0) { inzet_leeg.innerText = "Je moet punten inzetten." return; } else if (inzet.value == "") { inzet_leeg.innerText = "Zet eerst een aantal punten in."; return; } else if (newClicked == true && inzet.value !== "") { inzet_leeg.innerText = "Start eerst een nieuwe ronde"; return; } else if (clicked == true) { inzet_leeg.innertext = "Maak eerst deze ronde af"; return; } ... more code ...

Intenté jugar con él de más formas, pero los problemas siguen existiendo.

Cuando la puntuación total es menor o igual a 0, o menor que inzet.value , hace lo que debe hacer.

Pero luego, cuando el puntaje total es mayor que 0 o mayor que inzet.value , todavía actúa como si no lo fuera. Todo el resto del código funciona cuando dejo fuera la condición de totaalscore total. Pero lo necesito para trabajar con esta condición.

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

No entendí completamente tu problema, pero hay algunas cosas que puedes mejorar en tu código:

en lugar de hacer

 var totalscore = parseInt(score1) + parseInt(score2) + parseInt(score3) ...

debe intentar almacenar estas variables como int para que no tenga que convertirlas cada vez, también considere almacenarlas juntas (en una matriz, por ejemplo) para que pueda agregarlas más rápido usando:

 scores=[100,0,31,28] // array of score1, score2, etc... var totaalscore=scores.reduce((a, b) => a + b);

Si no puede almacenar sus puntajes como int, puede probar esto antes de agregarlos:

 var totaalscore=scores.map((a)=>parseInt(a))

Tenga en cuenta también que en JS cualquier número diferente de 0 se considera verdadero.

 true==1 //true true==5 //true true== -1 // true true== 0 //false if (inzetCorrect == true) {} //is the same as if (inzetCorrect){} var condition=(5>1) //value "true" is stored in "condition" if(condition){ //it will do something }

Su última pieza de código podría optimizarse más si usa la declaración de cambio, funciona más rápido: https://www.w3schools.com/js/js_switch.asp

Me alegro de que ya hayas resuelto tu problema :) Te recomiendo que dibujes un esquema de tu programa para que no te confundas la próxima vez

about 4 years ago · Juan Pablo Isaza Report

0

Creo que necesitas optimizar la lógica de tu juego, por ejemplo, el OPP de js puede ayudarte a hacerlo dinámicamente.

Esta es una clase js simple que puede ayudarlo a hacer que su código sea más limpio

Por ejemplo, puede eliminar el intervalo de calcolting total administrando el evento de cambio

 class ScoreManager { plyers = { 'player_1':{ scores:{ game_one:10 }, totalScore:0 } } _onScoreChange = ()=>{} constructor() { } onScoreChange(cb){ this._onScoreChange = cb } addPlayer(plyerName){ if(this.plyers[plyerName]) throw new Error("Player already exists!") this.plyers[plyerName] = { scores:{} } } addScoreForPlyer(plyerName,gameName,score){ if(!this.plyers[plyerName]) throw new Error("Player dosn't exists!"); this.plyers[plyerName].scores[gameName] = score this.calcolateScore(plyerName) } removeScoreForPlyer(plyerName,gameName){ if(!this.plyers[plyerName]) throw new Error("Player dosn't exists!"); delete this.plyers[plyerName].scores[gameName] this.calcolateScore(plyerName) } removePlyer(plyerName){ delete this.plyers[plyerName] } calcolateScore(plyerName){ let totalScore = 0 Object.keys(this.plyers[plyerName].scores).forEach(r=>{ totalScore+=this.plyers[plyerName].scores[r] }) this.plyers[plyerName].totalScore = totalScore this._onScoreChange(plyerName,totalScore,this.plyers) return totalScore } } //Home to use it const scoreManger = new ScoreManager() scoreManger.onScoreChange((plyerName,totalScore,plyers)=>{ console.log(`The plyer ${plyerName} has score ${totalScore}`) console.log(`totalPlyerObject`,plyers) }) scoreManger.addPlayer("max"); scoreManger.addScoreForPlyer("max",'step_one',10)

about 4 years ago · Juan Pablo Isaza Report

0

Resultó que, de hecho, había algo mal con el recuento de la puntuación total en esta función específica. Pero el puntaje total se estaba actualizando como el texto interno de un elemento p. Lo arreglé simplemente leyendo el número en el texto interno y verificando ese valor en la condición en lugar del puntaje total. En lugar de solucionar el problema, encontré otra solución. Sé que como codificador deberías arreglarlo, pero me estoy quedando sin tiempo para mi tarea y ahora esto funciona, así que estoy feliz :D

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!