Spaces:
Running
Running
| class MultiHack { | |
| constructor(creatorId, minBet, length) { | |
| this.creatorId = creatorId; | |
| this.minBet = minBet; | |
| this.length = length; | |
| this.players = [creatorId]; | |
| this.status = 'lobby'; // lobby, playing, finished | |
| this.target = this.generatePin(length); | |
| this.turnIndex = 0; | |
| this.history = []; | |
| this.startTime = Date.now(); | |
| this.timer = null; | |
| } | |
| generatePin(length) { | |
| let pin = ""; | |
| const digits = "0123456789"; | |
| for (let i = 0; i < length; i++) { | |
| pin += digits[Math.floor(Math.random() * digits.length)]; | |
| } | |
| return pin; | |
| } | |
| addPlayer(userId) { | |
| if (!this.players.includes(userId)) { | |
| this.players.push(userId); | |
| return true; | |
| } | |
| return false; | |
| } | |
| getCurrentPlayer() { | |
| return this.players[this.turnIndex]; | |
| } | |
| nextTurn() { | |
| this.turnIndex = (this.turnIndex + 1) % this.players.length; | |
| } | |
| checkGuess(guess) { | |
| let bulls = 0; | |
| let cows = 0; | |
| const targetArr = this.target.split(""); | |
| const guessArr = guess.split(""); | |
| for (let i = 0; i < targetArr.length; i++) { | |
| if (targetArr[i] === guessArr[i]) { | |
| bulls++; | |
| targetArr[i] = null; | |
| guessArr[i] = null; | |
| } | |
| } | |
| for (let i = 0; i < guessArr.length; i++) { | |
| if (guessArr[i] !== null) { | |
| const index = targetArr.indexOf(guessArr[i]); | |
| if (index !== -1) { | |
| cows++; | |
| targetArr[index] = null; | |
| } | |
| } | |
| } | |
| return { bulls, cows }; | |
| } | |
| } | |
| module.exports = MultiHack; | |