premier jet
This commit is contained in:
146
script.js
Normal file
146
script.js
Normal file
@@ -0,0 +1,146 @@
|
||||
const periode = 500 //ms
|
||||
|
||||
var substition = {
|
||||
"é": "e",
|
||||
"è": "e",
|
||||
"ê": "e",
|
||||
"ë": "e",
|
||||
"â": "a",
|
||||
"à": "a",
|
||||
"î": "i",
|
||||
"ô": "o",
|
||||
"œ": "oe",
|
||||
"û": "u",
|
||||
"ù": "u",
|
||||
"ü": "u",
|
||||
"ç": "c"
|
||||
}
|
||||
|
||||
var motATrouver
|
||||
var lettresTrouvees
|
||||
var nbLettres
|
||||
function nouvellePartie() {
|
||||
motATrouver = mots[Math.floor(mots.length * Math.random())]
|
||||
motATrouver = Array.from(motATrouver).map((lettre) => substition[lettre] || lettre)
|
||||
nbLettres = motATrouver.length
|
||||
|
||||
lettresTrouvees = [motATrouver[0]]
|
||||
|
||||
grille.innerHTML = ""
|
||||
|
||||
nouvelEssai()
|
||||
}
|
||||
|
||||
var form
|
||||
var lettresATrouver
|
||||
var nbLettresBienPlacees
|
||||
function nouvelEssai() {
|
||||
form = document.createElement("form")
|
||||
form.action = "#"
|
||||
form.onsubmit = onsubmit
|
||||
|
||||
lettresATrouver = Array.from(motATrouver)
|
||||
nbLettresBienPlacees = 0
|
||||
|
||||
motATrouver.forEach((lettre, indice) => {
|
||||
var input = document.createElement("input")
|
||||
input.type = "text"
|
||||
input.required = true
|
||||
input.minLength = 1
|
||||
input.maxLength = 1
|
||||
input.size = 1
|
||||
input.pattern = "[a-z]"
|
||||
input.onfocus = onfocus
|
||||
input.onkeydown = onkeydown
|
||||
input.oninput = oninput
|
||||
input.onkeyup = onkeyup
|
||||
input.tabIndex = indice + 1
|
||||
if (lettresTrouvees[indice]) input.value = lettresTrouvees[indice]
|
||||
form.appendChild(input)
|
||||
})
|
||||
|
||||
grille.appendChild(form)
|
||||
|
||||
form.children[0].focus()
|
||||
}
|
||||
|
||||
function onfocus() {
|
||||
this.select()
|
||||
}
|
||||
|
||||
function oninput() {
|
||||
var lettre = this.value.toLowerCase()
|
||||
if (substition[lettre]) lettre = substition[lettre]
|
||||
this.value = lettre
|
||||
if (this.checkValidity()) {
|
||||
this.nextSibling?.focus()
|
||||
} else {
|
||||
this.value = ""
|
||||
}
|
||||
}
|
||||
|
||||
function onkeydown(event) {
|
||||
if (event.key == "Backspace" && this.value == "") {
|
||||
this.previousSibling?.focus()
|
||||
}
|
||||
}
|
||||
|
||||
function onkeyup(event) {
|
||||
switch(event.key) {
|
||||
case "Enter": form.onsubmit(); break
|
||||
case "ArrowLeft": this.previousSibling?.focus(); break
|
||||
case "ArrowRight": this.nextSibling?.focus(); break
|
||||
}
|
||||
}
|
||||
|
||||
function onsubmit(event) {
|
||||
if (this.checkValidity()) {
|
||||
if (mots.includes(Array.from(form.children).map((input) => input.value).join(""))) {
|
||||
var inputsNonValides = Array.from(form.children)
|
||||
motATrouver.forEach((lettre, indice) => {
|
||||
var input = this.children[indice]
|
||||
if (input.value == lettre) {
|
||||
if (!lettresTrouvees[indice]) lettresTrouvees[indice] = lettre
|
||||
delete(lettresATrouver[indice])
|
||||
delete(inputsNonValides[indice])
|
||||
nbLettresBienPlacees++
|
||||
setTimeout(() => {
|
||||
input.className = "lettre-bien-placee"
|
||||
sonLettreBienPlacee.play()
|
||||
}, periode * indice)
|
||||
}
|
||||
input.readOnly = true
|
||||
})
|
||||
|
||||
inputsNonValides.forEach((input, indice) => {
|
||||
var index = lettresATrouver.indexOf(input.value)
|
||||
if (index >= 0) {
|
||||
delete(lettresATrouver[index])
|
||||
setTimeout(() => {
|
||||
input.className = "lettre-mal-placee"
|
||||
sonLettreMalPlacee.play()
|
||||
}, periode * indice)
|
||||
} else {
|
||||
setTimeout(() => sonLettreNonTrouvee.play(), periode * indice)
|
||||
}
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
if (nbLettresBienPlacees == nbLettres) {
|
||||
alert("Bien joué gros !\nUne nouvelle partie ?")
|
||||
nouvellePartie()
|
||||
} else nouvelEssai()
|
||||
}, motATrouver.length * periode)
|
||||
|
||||
} else {
|
||||
for(input of form.children) input.readOnly = true
|
||||
sonLettreMalPlacee.play()
|
||||
nouvelEssai()
|
||||
}
|
||||
|
||||
} else {
|
||||
this.reportValidity()
|
||||
}
|
||||
}
|
||||
|
||||
nouvellePartie()
|
||||
Reference in New Issue
Block a user