72 lines
1.6 KiB
JavaScript
72 lines
1.6 KiB
JavaScript
|
export const MARKERS = {
|
||
|
MISS: 'm',
|
||
|
RIGHT_POS: 'g',
|
||
|
RIGHT_CHAR: 'y'
|
||
|
};
|
||
|
|
||
|
export class GameController {
|
||
|
constructor() {
|
||
|
this._currentWord = "DEERS";
|
||
|
this._guesses = 5;
|
||
|
}
|
||
|
|
||
|
wordLength() {
|
||
|
return this._currentWord.length;
|
||
|
}
|
||
|
|
||
|
guesses() {
|
||
|
return this._guesses;
|
||
|
}
|
||
|
|
||
|
checkGuess(guess) {
|
||
|
if (guess.length != this._currentWord.length) {
|
||
|
throw Error(`Expected length to be ${this._currentWord.length} but was ${guess.length}`);
|
||
|
}
|
||
|
|
||
|
// Check correct placements
|
||
|
let markers = new Array(guess.length);
|
||
|
let misses = {};
|
||
|
let hits = {};
|
||
|
|
||
|
for (let i = 0; i < guess.length; i++) {
|
||
|
if (guess[i] == this._currentWord[i]) {
|
||
|
markers[i] = MARKERS.RIGHT_POS;
|
||
|
hits[guess[i]] = MARKERS.RIGHT_POS;
|
||
|
} else {
|
||
|
if (this._currentWord[i] in misses) {
|
||
|
misses[this._currentWord[i]] += 1;
|
||
|
} else {
|
||
|
misses[this._currentWord[i]] = 1;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Check words that are wrong placement but are in the word
|
||
|
// Distribute based on the words position
|
||
|
for (let i = 0; i < guess.length; i++) {
|
||
|
if (markers[i]) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
if (misses[guess[i]] && misses[guess[i]] > 0) {
|
||
|
misses[guess[i]] -= 1;
|
||
|
markers[i] = MARKERS.RIGHT_CHAR;
|
||
|
|
||
|
if (!hits[guess[i]]) {
|
||
|
hits[guess[i]] = MARKERS.RIGHT_CHAR;
|
||
|
}
|
||
|
} else {
|
||
|
if (!hits[guess[i]]) {
|
||
|
hits[guess[i]] = MARKERS.MISS;
|
||
|
}
|
||
|
markers[i] = MARKERS.MISS;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return {
|
||
|
hits: hits,
|
||
|
markers: markers
|
||
|
};
|
||
|
}
|
||
|
}
|