This commit is contained in:
		
							parent
							
								
									af1c5ace72
								
							
						
					
					
						commit
						947ed37974
					
				|  | @ -75,13 +75,15 @@ export default class extends Controller { | ||||||
|     let guessedWord = Array.from(rowElem.querySelectorAll("span")).map((x) => x.innerText).join(""); |     let guessedWord = Array.from(rowElem.querySelectorAll("span")).map((x) => x.innerText).join(""); | ||||||
|     console.log("The guessed word is: " + guessedWord); |     console.log("The guessed word is: " + guessedWord); | ||||||
| 
 | 
 | ||||||
|     let results = this._gameController.checkGuess(guessedWord); |     let results = this._gameController.submitGuess(guessedWord); | ||||||
| 
 | 
 | ||||||
|     switch (results.guessResult) { |     switch (results.guessResult) { | ||||||
|     case GUESS_RESULT.FOUL: |     case GUESS_RESULT.FOUL: | ||||||
|       this.overlayOutlet.showMessage("Not in dictionary"); |       this.overlayOutlet.showMessage("Not in dictionary"); | ||||||
| 
 | 
 | ||||||
|       rowElem.replaceWith(this._buildPlayfieldRow(this._gameController.wordLength())); |       let newRow = this._buildPlayfieldRow(this._gameController.wordLength()); | ||||||
|  |       this._showHints(newRow); | ||||||
|  |       rowElem.replaceWith(newRow); | ||||||
|       this._activeLetter = 0; |       this._activeLetter = 0; | ||||||
| 
 | 
 | ||||||
|       window.dispatchEvent(new CustomEvent("guessResults", { |       window.dispatchEvent(new CustomEvent("guessResults", { | ||||||
|  | @ -93,8 +95,7 @@ export default class extends Controller { | ||||||
| 
 | 
 | ||||||
|       this._activeRowIndex += 1; |       this._activeRowIndex += 1; | ||||||
|       if (this._activeRowIndex >= this._gameController.guesses()) { |       if (this._activeRowIndex >= this._gameController.guesses()) { | ||||||
|         this.topMessageTarget.innerText = this._gameController.currentWord().toUpperCase(); |         this._revealAnswer(); | ||||||
|         this.nextPuzzleButtonsTarget.classList.remove("hide"); |  | ||||||
|       } else { |       } else { | ||||||
|         this._activeLetter = 0; |         this._activeLetter = 0; | ||||||
|         this._showHints(this.rowTargets[this._activeRowIndex], results.markers); |         this._showHints(this.rowTargets[this._activeRowIndex], results.markers); | ||||||
|  | @ -103,9 +104,7 @@ export default class extends Controller { | ||||||
|       break; |       break; | ||||||
|     case GUESS_RESULT.WIN: |     case GUESS_RESULT.WIN: | ||||||
|       this._colorizeRow(rowElem, results); |       this._colorizeRow(rowElem, results); | ||||||
| 
 |       this._showWin(); | ||||||
|       this.topMessageTarget.innerText = "Hooray! You did it."; |  | ||||||
|       this.nextPuzzleButtonsTarget.classList.remove("hide"); |  | ||||||
|       break; |       break; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  | @ -119,36 +118,76 @@ export default class extends Controller { | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  _showWin() { | ||||||
|  |    this.topMessageTarget.innerText = "Hooray! You did it."; | ||||||
|  |    this.nextPuzzleButtonsTarget.classList.remove("hide"); | ||||||
|  |  } | ||||||
|  | 
 | ||||||
|  |   _revealAnswer() { | ||||||
|  |     this.topMessageTarget.innerText = this._gameController.currentWord().toUpperCase(); | ||||||
|  |     this.nextPuzzleButtonsTarget.classList.remove("hide"); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   _buildPlayfield() { |   _buildPlayfield() { | ||||||
|     let rows = this._gameController.guesses(); |     let rows = this._gameController.guesses(); | ||||||
|     let wordLength = this._gameController.wordLength(); |     let wordLength = this._gameController.wordLength(); | ||||||
|  |     let {currentGuesses, wasWin} = this._gameController.currentState(); | ||||||
| 
 | 
 | ||||||
|     this._activeRowIndex = 0; |     this._activeRowIndex = currentGuesses.length; | ||||||
|     this._activeLetter = 0; |     this._activeLetter = 0; | ||||||
| 
 | 
 | ||||||
|  |     window.dispatchEvent(new CustomEvent("resetKeyColors")); | ||||||
|  | 
 | ||||||
|     let newRows = []; |     let newRows = []; | ||||||
|     for (let r = 0; r < rows; r++) { |     for (let r = 0; r < rows; r++) { | ||||||
|       newRows.push(this._buildPlayfieldRow(wordLength)); |       let currentGuess = null; | ||||||
|  |       let currentGuessResults = null; | ||||||
|  | 
 | ||||||
|  |       if (r < currentGuesses.length) { | ||||||
|  |         currentGuess = currentGuesses[r]; | ||||||
|  |         currentGuessResults = this._gameController.checkGuess(currentGuess); | ||||||
|  |       } | ||||||
|  | 
 | ||||||
|  |       newRows.push(this._buildPlayfieldRow(wordLength, currentGuess, currentGuessResults)); | ||||||
|  |       if (currentGuessResults) { | ||||||
|  |         window.dispatchEvent(new CustomEvent("guessResults", { | ||||||
|  |           detail: currentGuessResults | ||||||
|  |         })); | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if (wasWin) { | ||||||
|  |       this._showWin(); | ||||||
|  |     } else if (currentGuesses.length >= rows) { | ||||||
|  |       // User has already used up all their guesses so just show the results;
 | ||||||
|  |       this._revealAnswer(); | ||||||
|  |     } else { | ||||||
|  |       this._showHints(newRows[currentGuesses.length]); | ||||||
|  | 
 | ||||||
|  |       this.topMessageTarget.innerHTML = " " | ||||||
|  |       this.nextPuzzleButtonsTarget.classList.add("hide"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     this._showHints(newRows[0]); |  | ||||||
|     this.playfieldTarget.replaceChildren.apply(this.playfieldTarget, newRows); |     this.playfieldTarget.replaceChildren.apply(this.playfieldTarget, newRows); | ||||||
| 
 |  | ||||||
|     this.topMessageTarget.innerHTML = " " |  | ||||||
|     this.nextPuzzleButtonsTarget.classList.add("hide"); |  | ||||||
| 
 |  | ||||||
|     window.dispatchEvent(new CustomEvent("resetKeyColors")); |  | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   _buildPlayfieldRow(wordLength) { |   _buildPlayfieldRow(wordLength, currentGuess, currentGuessResults) { | ||||||
|     let divElem = document.createElement("div"); |     let divElem = document.createElement("div"); | ||||||
|     divElem.classList.add("row"); |     divElem.classList.add("row"); | ||||||
|     divElem.setAttribute("data-playfield-target", "row"); |     divElem.setAttribute("data-playfield-target", "row"); | ||||||
| 
 | 
 | ||||||
|     for (let c = 0; c < wordLength; c++) { |     for (let c = 0; c < wordLength; c++) { | ||||||
|       let letterSpan = document.createElement("span"); |       let letterSpan = document.createElement("span"); | ||||||
|  |       if (currentGuess) { | ||||||
|  |         letterSpan.innerText = currentGuess[c].toUpperCase(); | ||||||
|  |       } | ||||||
|       divElem.appendChild(letterSpan); |       divElem.appendChild(letterSpan); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     if (currentGuess) { | ||||||
|  |       this._colorizeRow(divElem, currentGuessResults); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     return divElem; |     return divElem; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -68,12 +68,15 @@ export class GameController { | ||||||
|     return this._guesses; |     return this._guesses; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   currentGuesses() { |   currentState() { | ||||||
|     let prog = this._progressionState.getProgression(); |     let prog = this._progressionState.getProgression(); | ||||||
|     if (!prog || !prog.currentGuesses) { |     if (!prog || !prog.currentGuesses) { | ||||||
|       return []; |       return []; | ||||||
|     } |     } | ||||||
|     return prog.currentGuesses; |     return { | ||||||
|  |       wasWin: prog.wasWin, | ||||||
|  |       currentGuesses: prog.currentGuesses | ||||||
|  |     }; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   currentWord() { |   currentWord() { | ||||||
|  | @ -87,7 +90,7 @@ export class GameController { | ||||||
|     prog.wordIndex[prog.wordLength + ""] += 1; |     prog.wordIndex[prog.wordLength + ""] += 1; | ||||||
|     prog.wordLength = (((Math.random() * 23) | 0) / 10 | 0) + 4; |     prog.wordLength = (((Math.random() * 23) | 0) / 10 | 0) + 4; | ||||||
|     prog.currentGuesses = []; |     prog.currentGuesses = []; | ||||||
| 
 |     prog.wasWin = false; | ||||||
|     this._progressionState.saveProgression(prog); |     this._progressionState.saveProgression(prog); | ||||||
| 
 | 
 | ||||||
|     this._currentWord = await this._wordSource.getCurrentWord(prog); |     this._currentWord = await this._wordSource.getCurrentWord(prog); | ||||||
|  | @ -110,7 +113,23 @@ export class GameController { | ||||||
| 
 | 
 | ||||||
|     return hints; |     return hints; | ||||||
|   } |   } | ||||||
|    | 
 | ||||||
|  |   submitGuess(guess) { | ||||||
|  |     guess = guess.toLowerCase(); | ||||||
|  | 
 | ||||||
|  |     let results = this.checkGuess(guess); | ||||||
|  | 
 | ||||||
|  |     // Add this guess to the progression state
 | ||||||
|  |     if (results.guessResult !== GUESS_RESULT.FOUL) { | ||||||
|  |       let prog = this._progressionState.getProgression(); | ||||||
|  |       prog.currentGuesses.push(guess); | ||||||
|  |       prog.wasWin = results.guessResult === GUESS_RESULT.WIN; | ||||||
|  |       this._progressionState.saveProgression(prog); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     return results; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   checkGuess(guess) { |   checkGuess(guess) { | ||||||
|     this._checkHasStarted(); |     this._checkHasStarted(); | ||||||
| 
 | 
 | ||||||
|  | @ -182,11 +201,6 @@ export class GameController { | ||||||
|       guessResult = GUESS_RESULT.MISS; |       guessResult = GUESS_RESULT.MISS; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Add this guess to the progression state
 |  | ||||||
|     let prog = this._progressionState.getProgression(); |  | ||||||
|     prog.currentGuesses.push(guess); |  | ||||||
|     this._progressionState.saveProgression(prog); |  | ||||||
|      |  | ||||||
|     return { |     return { | ||||||
|       guessResult: guessResult, |       guessResult: guessResult, | ||||||
|       hits: hits, |       hits: hits, | ||||||
|  |  | ||||||
|  | @ -36,7 +36,7 @@ export class WordSource { | ||||||
| 
 | 
 | ||||||
|     async needToResetProgression(prog) { |     async needToResetProgression(prog) { | ||||||
|         await this._fetchAllWordsIfNecessary(); |         await this._fetchAllWordsIfNecessary(); | ||||||
|         return (!prog.shuffleId) || this._pattern.id !== prog.shuffleId; |         return !prog || !prog.shuffleId || this._pattern.id !== prog.shuffleId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     async getPattenShuffleID() { |     async getPattenShuffleID() { | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue