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(""); | ||||
|     console.log("The guessed word is: " + guessedWord); | ||||
| 
 | ||||
|     let results = this._gameController.checkGuess(guessedWord); | ||||
|     let results = this._gameController.submitGuess(guessedWord); | ||||
| 
 | ||||
|     switch (results.guessResult) { | ||||
|     case GUESS_RESULT.FOUL: | ||||
|       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; | ||||
| 
 | ||||
|       window.dispatchEvent(new CustomEvent("guessResults", { | ||||
|  | @ -93,8 +95,7 @@ export default class extends Controller { | |||
| 
 | ||||
|       this._activeRowIndex += 1; | ||||
|       if (this._activeRowIndex >= this._gameController.guesses()) { | ||||
|         this.topMessageTarget.innerText = this._gameController.currentWord().toUpperCase(); | ||||
|         this.nextPuzzleButtonsTarget.classList.remove("hide"); | ||||
|         this._revealAnswer(); | ||||
|       } else { | ||||
|         this._activeLetter = 0; | ||||
|         this._showHints(this.rowTargets[this._activeRowIndex], results.markers); | ||||
|  | @ -103,9 +104,7 @@ export default class extends Controller { | |||
|       break; | ||||
|     case GUESS_RESULT.WIN: | ||||
|       this._colorizeRow(rowElem, results); | ||||
| 
 | ||||
|       this.topMessageTarget.innerText = "Hooray! You did it."; | ||||
|       this.nextPuzzleButtonsTarget.classList.remove("hide"); | ||||
|       this._showWin(); | ||||
|       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() { | ||||
|     let rows = this._gameController.guesses(); | ||||
|     let wordLength = this._gameController.wordLength(); | ||||
|     let {currentGuesses, wasWin} = this._gameController.currentState(); | ||||
| 
 | ||||
|     this._activeRowIndex = 0; | ||||
|     this._activeRowIndex = currentGuesses.length; | ||||
|     this._activeLetter = 0; | ||||
| 
 | ||||
|     window.dispatchEvent(new CustomEvent("resetKeyColors")); | ||||
| 
 | ||||
|     let newRows = []; | ||||
|     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.topMessageTarget.innerHTML = " " | ||||
|     this.nextPuzzleButtonsTarget.classList.add("hide"); | ||||
| 
 | ||||
|     window.dispatchEvent(new CustomEvent("resetKeyColors")); | ||||
|   } | ||||
| 
 | ||||
|   _buildPlayfieldRow(wordLength) { | ||||
|   _buildPlayfieldRow(wordLength, currentGuess, currentGuessResults) { | ||||
|     let divElem = document.createElement("div"); | ||||
|     divElem.classList.add("row"); | ||||
|     divElem.setAttribute("data-playfield-target", "row"); | ||||
| 
 | ||||
|     for (let c = 0; c < wordLength; c++) { | ||||
|       let letterSpan = document.createElement("span"); | ||||
|       if (currentGuess) { | ||||
|         letterSpan.innerText = currentGuess[c].toUpperCase(); | ||||
|       } | ||||
|       divElem.appendChild(letterSpan); | ||||
|     } | ||||
| 
 | ||||
|     if (currentGuess) { | ||||
|       this._colorizeRow(divElem, currentGuessResults); | ||||
|     } | ||||
| 
 | ||||
|     return divElem; | ||||
|   } | ||||
| 
 | ||||
|  |  | |||
|  | @ -68,12 +68,15 @@ export class GameController { | |||
|     return this._guesses; | ||||
|   } | ||||
| 
 | ||||
|   currentGuesses() { | ||||
|   currentState() { | ||||
|     let prog = this._progressionState.getProgression(); | ||||
|     if (!prog || !prog.currentGuesses) { | ||||
|       return []; | ||||
|     } | ||||
|     return prog.currentGuesses; | ||||
|     return { | ||||
|       wasWin: prog.wasWin, | ||||
|       currentGuesses: prog.currentGuesses | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|   currentWord() { | ||||
|  | @ -87,7 +90,7 @@ export class GameController { | |||
|     prog.wordIndex[prog.wordLength + ""] += 1; | ||||
|     prog.wordLength = (((Math.random() * 23) | 0) / 10 | 0) + 4; | ||||
|     prog.currentGuesses = []; | ||||
| 
 | ||||
|     prog.wasWin = false; | ||||
|     this._progressionState.saveProgression(prog); | ||||
| 
 | ||||
|     this._currentWord = await this._wordSource.getCurrentWord(prog); | ||||
|  | @ -110,7 +113,23 @@ export class GameController { | |||
| 
 | ||||
|     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) { | ||||
|     this._checkHasStarted(); | ||||
| 
 | ||||
|  | @ -182,11 +201,6 @@ export class GameController { | |||
|       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 { | ||||
|       guessResult: guessResult, | ||||
|       hits: hits, | ||||
|  |  | |||
|  | @ -36,7 +36,7 @@ export class WordSource { | |||
| 
 | ||||
|     async needToResetProgression(prog) { | ||||
|         await this._fetchAllWordsIfNecessary(); | ||||
|         return (!prog.shuffleId) || this._pattern.id !== prog.shuffleId; | ||||
|         return !prog || !prog.shuffleId || this._pattern.id !== prog.shuffleId; | ||||
|     } | ||||
| 
 | ||||
|     async getPattenShuffleID() { | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue