The concept for this week’s assignment, I wanted to make a hangman word game. The code consists of helper functions such as keyPressed, startNewGame, checkGuess etc. Firstly, it creates a number of empty dashes based on the number of letters in the chosen word. As a letter is pressed, dashes are changed to a letter if the letter is in the word, and the body of the hangman is drawn if it is not. At the end of the game, it checks if the user guessed the word correctly, and shows corresponding texts.
Further on, I would like to add randomized word generation or read from csv or text file large pool of words.
code:
let word;
let guessedWord;
let maxAttempts = 6
let attemptsLeft = maxAttempts;
let guessedLetters = [];
function setup() {
createCanvas(400, 400);
textAlign(CENTER, CENTER);
startNewGame();
}
function draw() {
background(220);
// Display hangman
drawHangman();
// Display guessed word
textSize(32);
text(guessedWord.join(' '), width / 2, height / 2 - 20);
// Display attempts left
textSize(16);
text(`Attempts left: ${attemptsLeft}`, width / 2, height - 20);
// Display guessed letters
text(`Guessed letters: ${guessedLetters.join(', ')}`, width / 2, height - 40);
// Check for game over
if (attemptsLeft === 0 || guessedWord.indexOf('_') === -1) {
gameOver();
}
}
function keyPressed() {
if (keyCode === ENTER) {
startNewGame();
} else if (key >= 'a' && key <= 'z' && !guessedLetters.includes(key)) {
checkGuess(key);
}
}
function startNewGame() {
// List of possible words
let words = ["apple", "banana", "simulation", "problems", "reaction"];
// Choose a random word
word = random(words).split('');
// Initialize guessedWord with underscores
guessedWord = Array(word.length).fill('_');
// Reset attempts
attemptsLeft = maxAttempts;
// Reset guessed letters
guessedLetters = [];
}
function checkGuess(letter) {
// Add guessed letter to the list
guessedLetters.push(letter);
// Check if the letter is in the word
let correctGuess = false;
for (let i = 0; i < word.length; i++) {
if (word[i] === letter) {
guessedWord[i] = letter;
correctGuess = true;
}
}
// Decrease attempts if the guess is incorrect
if (!correctGuess) {
attemptsLeft--;
}
}
function drawHangman() {
stroke(0);
line(width / 2 - 100, height /2 - 80 ,width /2 - 50, height /2 -80)
line(width / 2 - 75, height / 2 -80, width / 2 -75, height /2 - 180)
line(width / 2 -75, height / 2 - 180, width / 2, height / 2 - 180)
line(width / 2, height / 2 - 180, width / 2, height / 2- 160)
// Head
if (attemptsLeft < maxAttempts) {
ellipse(width / 2, height / 4 - 50, 20, 20)
}
// Body
if (attemptsLeft < maxAttempts - 1) {
line(width / 2, height / 4 - 40, width / 2, height / 2 - 80);
}
// Left arm
if (attemptsLeft < maxAttempts - 2) {
line(width / 2, height / 4 -30, width / 2 - 20, height / 4-10 );
}
// Right arm
if (attemptsLeft < maxAttempts - 3) {
line(width / 2, height / 4 -30, width / 2 + 20, height / 4 -10);
}
// Left leg
if (attemptsLeft < maxAttempts - 4) {
line(width / 2, height / 2 - 80, width / 2 - 20, height / 2 -60);
}
// Right leg
if (attemptsLeft < maxAttempts - 5) {
line(width / 2, height / 2 -80, width / 2 + 20, height / 2 -60);
}
}
function gameOver() {
// Display game over message
textSize(16);
if (guessedWord.indexOf('_') === -1) {
text("You guessed the word!", width / 2, height / 2 + 60);
} else {
text("Game over! The word was " + word.join(''), width / 2, height / 2 + 60);
}
// Display new game prompt
textSize(16);
text("Press ENTER for a new game", width / 2, height/ 2 + 100);
}
the game: