diff --git a/index.html b/index.html
index d3b33e4..aa52d02 100644
--- a/index.html
+++ b/index.html
@@ -343,6 +343,7 @@
//first we draw the spaces
let puzzle = message.puzzle.puzzle;
let puzzleBoard = document.querySelector('.puzzleboard');
+
let resultingPuzzleBoard = [];
//if the first entry of the puzzle is an array and not a string display the puzzle differently
if (Array.isArray(message.puzzle.puzzle[0])) {
@@ -366,6 +367,7 @@
resultingPuzzleBoard.push(Array(12).fill(null));
console.log(resultingPuzzleBoard);
//after we've drawn our data for our board,now its time to visualize it to the user
+ puzzleBoard.innerHTML = ``;
for(let i of resultingPuzzleBoard) {
for (let j in i) {
const letter = i[j];
@@ -438,7 +440,7 @@
document.getElementById("guess-button").onclick = () => {
const letter = document.getElementById("guess-letter").value;
- socket.send(JSON.stringify({ type: "guess_letter", letter }));
+ socket.send(JSON.stringify({ type: "guess_letter", letter}));
document.getElementById("guess-letter").value = ""; // Clear input
};
@@ -521,6 +523,11 @@
if (message.type === "guess_result") {
const outcome = message.correct ? "correct" : "incorrect";
document.getElementById("status").innerText = `Guess '${message.letter}' was ${outcome} (${message.player})`;
+ console.log(message);
+ if (message.puzzle) {
+ drawPuzzle(message);
+ }
+
}
if (message.type === "new_leader") {
diff --git a/server.js b/server.js
index 2ada29c..e03c8ad 100644
--- a/server.js
+++ b/server.js
@@ -11,7 +11,27 @@ const wheel = [
300,600,300,500,800,550,400,300,900,500,'spin again',
900,'Bankrupt',600,400,300
] //represents wheel in wheel of fortune game.
-
+function removeProp(obj, prop) {
+ obj = JSON.parse(JSON.stringify(obj))
+ if(!Array.isArray(prop)){
+ if (!Object.hasOwn(obj,prop)) {
+ console.error(`the property '${prop}' you are trying to remove doesn't exist on this object!`)
+ } else {
+ delete obj[prop]
+ }
+ }
+ else {
+ for (let i = 0; i < prop.length; i++) {
+ const key = prop[i]
+ if (!Object.hasOwn(obj, key)) {
+ console.error(`The property '${key}' you are trying to remove doesn't exist on this object!`)
+ } else {
+ delete obj[key]
+ }
+ }
+ }
+ return obj
+}
//make sure this is run so puzzles are easier to contruct
function checkPuzzleData(puzzles) {
for(let puzzle in puzzles) {
@@ -99,11 +119,10 @@ function loadCurrentPuzzle(gameStateObject) {
formattedPuzzle.push(processPuzzle(letterArray,given))
}
return {
- 'puzzleLevel':gameStateObject.puzzleLevel,
+ 'answer':gameStateObject.puzzles[gameStateObject.puzzleLevel].answer,
'given':gameStateObject.puzzles[gameStateObject.puzzleLevel].given,
'category':gameStateObject.puzzles[gameStateObject.puzzleLevel].category,
'puzzle':formattedPuzzle,
- 'levelsRemaining':(gameStateObject.puzzles.length - 1 - gameStateObject.puzzleLevel)
}
}
else {
@@ -113,11 +132,10 @@ function loadCurrentPuzzle(gameStateObject) {
//console.log(gameStateObject.puzzles[gameStateObject.puzzleLevel].puzzle);
return {
- 'puzzleLevel':gameStateObject.puzzleLevel,
+ 'answer':gameStateObject.puzzles[gameStateObject.puzzleLevel].answer,
'given':gameStateObject.puzzles[gameStateObject.puzzleLevel].given,
'category':gameStateObject.puzzles[gameStateObject.puzzleLevel].category,
'puzzle':gameStateObject.puzzles[gameStateObject.puzzleLevel].puzzle,
- 'levelsRemaining':(gameStateObject.puzzles.length - 1 - gameStateObject.puzzleLevel)
}
}
}
@@ -127,9 +145,33 @@ function checkGuess(letter,gameStateObject) {
const currentPuzzle = gameStateObject.puzzles[gameStateObject.puzzleLevel]
console.log(currentPuzzle)
- if (typeof currentPuzzle.puzzle[0] == string) {
+ if (typeof currentPuzzle.answer == 'string') {
+ //first create an indexed hashMap
+ let charArray = currentPuzzle.answer.split('')
+ let matches = []
+ for(const c in charArray) {
+ const char = charArray[c]
+ if (letter.toUpperCase() == char.toUpperCase()) {
+ matches.push({id:c,letter:char})
+ }
+ }
+ //if there are any matches write them to the gameState Object
+ if (!matches.length) {
+ return false
+ }
+ else {
+ for(const m of matches) {
+ gameStateObject.puzzles[gameStateObject.puzzleLevel].puzzle[m.id] = m.letter
+ }
+ console.log('matches found!!!', gameStateObject.puzzles[gameStateObject.puzzleLevel].puzzle)
+ return [true, matches.length]
+ }
}
+ else if (Array.isArray(currentPuzzle.answer)) {
+ //
+ }
+ else console.error('invalid input to checkGuess() function',currentPuzzle.puzzle[0])
}
@@ -240,11 +282,17 @@ wss.on('connection', (ws) => {
}
if (data.type === 'start_game') {
+
const room = rooms[ws.roomCode]
+ const currentPuzzle = loadCurrentPuzzle(room.gameState)
+ // const clientPuzzle = Object.entries(currentPuzzle).filter(([key])=> key != 'answer')
+
room.gameState.started = true
- room.gameState.turn = ws.name
+
room.gameState.turnState = 'spin'
room.gameState.players = []
+ room.gameState.puzzles[room.gameState.puzzleLevel] = currentPuzzle
+ room.gameState.levelsRemaining = (room.gameState.puzzles.length - 1 - room.gameState.puzzleLevel)
room.clients.forEach((client)=>{
room.gameState.players.push({
id:client.identifierToken,
@@ -252,6 +300,7 @@ wss.on('connection', (ws) => {
points:0
})
})
+ room.gameState.turn = 0
console.log(room.gameState)
console.log('game started for:',room)
@@ -260,7 +309,8 @@ wss.on('connection', (ws) => {
client.send(JSON.stringify({
type: 'game_started',
roomCode: ws.roomCode,
- puzzle:loadCurrentPuzzle(room.gameState),
+ // eslint-disable-next-line no-undef
+ puzzle: removeProp(currentPuzzle,'answer'),
turn:room.gameState.turn,
turnState:room.gameState.turnState
}))
@@ -276,9 +326,18 @@ wss.on('connection', (ws) => {
// Handle spin and guess events
if (data.type === 'spin_wheel') {
// Simulate a wheel spin result and update room state
- const spinResult = getRandomValue(wheel)
+ let spinResult = getRandomValue(wheel)
+ if (spinResult == 'Bankrupt') {
+ spinResult = 0
+ }
+ if (spinResult == 'spin again') {
+ spinResult = 0
+ room.gameState.players = room.gameState.players.map((player) => {
+ return player.id == ws.identifierToken ? {...player, points:player.points + spinResult, condition:'spin again'} : player
+ })
+ }
room.gameState.players = room.gameState.players.map((player) => {
- return player.id == ws.identifierToken ? {...player, points:spinResult} : player
+ return player.id == ws.identifierToken ? {...player, points:player.points + spinResult} : player
})
console.log('players', room.gameState.players)
room.gameState.spinResult = spinResult
@@ -295,13 +354,38 @@ wss.on('connection', (ws) => {
room.gameState.turnState = 'spin'
const { letter } = data
// Handle guess logic (e.g., check if the letter is in the puzzle)
- const correctGuess = Math.random() > 0.5 // Random outcome for simplicity
- checkGuess(letter,room.gameState)
- room.gameState.lastGuess = { letter, correct: correctGuess }
- room.clients.forEach((client) =>
- client.send(JSON.stringify({ type: 'guess_result', letter, correct: correctGuess, player: ws === room.leader ? 'Leader' : 'Player' }))
- )
+ const guessResult = checkGuess(letter,room.gameState)
+
+ if (!guessResult) {
+ //if the player guesses incorrectly, and theres more than one player,
+ //its the next players turn
+ room.clients.forEach((client) => {
+ client.send(JSON.stringify(
+ { type: 'guess_result', letter,
+ correct: guessResult,
+ player: ws === room.leader ? 'Leader' : 'Player' }))
+ })
+
+ if (room.gameState.turn == room.gameState.players.length - 1) {
+ room.gameState.turn = 0
+ }
+ else room.gameState.turn++
+ }
+ else {
+ //the player guessed correctly and its still their turn
+ room.clients.forEach((client) =>
+ client.send(JSON.stringify(
+ { type: 'guess_result', letter,
+ correct: guessResult,
+ player: ws === room.leader ? 'Leader' : 'Player',
+ puzzle: room.gameState.puzzles[room.gameState.puzzleLevel],
+ turn:room.gameState.turn,
+ turnState:room.gameState.turnState
+ }))
+ )
+ }
+
}
} else {
ws.send(JSON.stringify({ type: 'error', message: 'You are not in this room' }))