diff --git a/index.html b/index.html
index 302e8e5..ac831d5 100644
--- a/index.html
+++ b/index.html
@@ -10,16 +10,16 @@
-
+
-
+
diff --git a/javascript/canvas.js b/javascript/canvas.js
index ad78760..e70e603 100644
--- a/javascript/canvas.js
+++ b/javascript/canvas.js
@@ -2,33 +2,133 @@ class HangmanCanvas {
constructor(secretWord) {
this.context = document.getElementById('hangman').getContext('2d');
// ... your code goes here
+ this.secretWord=secretWord;
}
createBoard() {
// ... your code goes here
+ this.context.clearRect(0,0,1200,800)
+ this.drawLines()
+ }
+ writeHint(hint)
+ {
+ this.context.font='30px sans-serif'
+ this.context.fillText(`HINT : ${hint}`,200,50)
}
drawLines() {
// ... your code goes here
+ let k=180;
+ for(let i=0;i<=this.secretWord.length;i++)
+ {
+ this.context.beginPath();
+ k+=20;
+ this.context.moveTo(k,700);
+ this.context.lineWidth=5;
+ k+=60;
+ this.context.lineTo(k,700);
+ this.context.stroke();
+ }
}
writeCorrectLetter(index) {
// ... your code goes here
+ const letter=this.secretWord[index]
+ this.context.font='40px monospace'
+ const x=220+(20+60)*index;
+ this.context.fillText(letter,x,680)
}
writeWrongLetter(letter, errorsLeft) {
- // ... your code goes here
+ let k=700; //extra space from left side
+ this.context.font='40px monospace'
+ k+=(30*(10-errorsLeft))
+ this.context.fillText(letter.toUpperCase(),k,200)
}
drawHangman(errorsLeft) {
- // ... your code goes here
- }
+ switch (errorsLeft) {
+ case 9:
+ this.context.beginPath();
+ this.context.moveTo(50, 700);
+ this.context.lineTo(150, 700);
+ this.context.stroke();
+ break;
+ case 8:
+ this.context.beginPath();
+ this.context.moveTo(50, 700);
+ this.context.lineTo(100, 630);
+ this.context.stroke();
+ break;
+ case 7:
+ this.context.beginPath();
+ this.context.moveTo(150, 700);
+ this.context.lineTo(100, 630);
+ this.context.stroke();
+ break;
+ case 6:
+ this.context.beginPath();
+ this.context.moveTo(100, 630);
+ this.context.lineTo(100, 100);
+ this.context.stroke();
+ break;
+ case 5:
+ this.context.beginPath();
+ this.context.moveTo(100, 100);
+ this.context.lineTo(400, 100);
+ this.context.stroke();
+ break;
+ case 4:
+ this.context.beginPath();
+ this.context.moveTo(400, 100);
+ this.context.lineTo(400, 160);
+ this.context.stroke();
+ break;
+ case 3:
+ this.context.beginPath();
+ this.context.arc(400, 210, 50, 0, Math.PI * 2);
+ this.context.stroke();
+ break;
+ case 2:
+ this.context.beginPath();
+ this.context.moveTo(400, 260);
+ this.context.lineTo(400, 300);
+ this.context.stroke();
+ break;
+ case 1:
+ this.context.beginPath();
+ this.context.moveTo(400, 260);
+ this.context.lineTo(400, 400);
+ this.context.stroke();
+ break;
+ case 0:
+ this.context.beginPath();
+ this.context.moveTo(400, 400);
+ this.context.lineTo(340, 500);
+ this.context.stroke();
+ break;
+ default:
+ this.context.beginPath();
+ this.context.moveTo(400, 400);
+ this.context.lineTo(460, 500);
+ this.context.stroke();
+ }
+}
+
gameOver() {
- // ... your code goes here
+ const over = new Image();
+ over.src = "images/gameover.png";
+ over.onload = () => {
+ this.context.drawImage(over, 500,250);
+};
}
winner() {
// ... your code goes here
+ const awesome=new Image();
+ awesome.src='images/awesome.png'
+ awesome.onload=()=>{
+ this.context.drawImage(awesome,300,60);
}
-}
+}}
diff --git a/javascript/hangman.js b/javascript/hangman.js
index ee01d18..fdda9e3 100644
--- a/javascript/hangman.js
+++ b/javascript/hangman.js
@@ -1,55 +1,100 @@
class Hangman {
constructor(words) {
this.words = words;
- // ... your code goes here
+ this.secretWord = '';
+ this.letters = [];
+ this.guessedLetters = '';
+ this.errorsLeft = 10;
}
pickWord() {
- // ... your code goes here
+ return this.words[Math.floor(Math.random() * this.words.length)];
}
checkIfLetter(keyCode) {
- // ... your code goes here
+ return /^[A-Z]$/.test(keyCode);
}
checkClickedLetters(letter) {
- // ... your code goes here
+ return this.letters.includes(letter);
}
addCorrectLetter(letter) {
- // ... your code goes here
+ this.guessedLetters += letter;
}
addWrongLetter(letter) {
- // ... your code goes here
+ this.errorsLeft -= 1;
+ if (!this.letters.includes(letter)) {
+ this.letters.push(letter);
+ }
}
checkGameOver() {
- // ... your code goes here
+ return this.errorsLeft < 0;
}
checkWinner() {
- // ... your code goes here
+ if(this.guessedLetters.length==this.secretWord.length)
+ {
+ return true
+ }
+ return false
+ }
}
-}
+
+let words = ['Tailwind', 'node', 'java', 'django', 'html', 'react'];
+let hint = [
+ 'A CSS framework',
+ 'A JavaScript runtime',
+ 'A programming language launched in 1995 by Sun Microsystems',
+ 'A Python framework for the backend',
+ 'A markup language for websites',
+ 'A JavaScript framework',
+];
let hangman;
+let hangmanCanvas;
const startGameButton = document.getElementById('start-game-button');
if (startGameButton) {
- startGameButton.addEventListener('click', event => {
+ startGameButton.addEventListener('click', (event) => {
hangman = new Hangman(['node', 'javascript', 'react', 'miami', 'paris', 'amsterdam', 'lisboa']);
-
- // HINT (uncomment when start working on the canvas portion of the lab)
- // hangman.secretWord = hangman.pickWord();
- // hangmanCanvas = new HangmanCanvas(hangman.secretWord);
-
- // ... your code goes here
+ let pickedWord = hangman.pickWord();
+ hangman.secretWord = pickedWord.toUpperCase();
+ const hintString = hint[words.indexOf(pickedWord)];
+ hangmanCanvas = new HangmanCanvas(hangman.secretWord);
+ hangmanCanvas.createBoard();
+ hangmanCanvas.writeHint(hintString);
});
}
-document.addEventListener('keydown', event => {
- // React to user pressing a key
- // ... your code goes here
-});
+document.addEventListener('keydown', (event) => {
+ if (hangman && !hangman.checkGameOver()) {
+ let key = event.key.toUpperCase();
+ if (hangman.checkIfLetter(key) && !hangman.checkClickedLetters(key)) {
+ if (hangman.secretWord.includes(key)) {
+ if (!hangman.guessedLetters.includes(key)) {
+ for (let i = 0; i < hangman.secretWord.length; i++) {
+ let ch = hangman.secretWord[i];
+ if (ch === key) {
+ hangman.addCorrectLetter(key);
+ hangmanCanvas.writeCorrectLetter(i);
+ if (hangman.checkWinner()) hangmanCanvas.winner();
+ }
+ }
+ }
+ } else {
+ hangman.addWrongLetter(key);
+ if (hangmanCanvas) {
+ hangmanCanvas.writeWrongLetter(key, hangman.errorsLeft);
+ hangmanCanvas.drawHangman(hangman.errorsLeft);
+if (hangman.checkGameOver()) {
+ hangmanCanvas.gameOver();
+ }
+ }
+ }
+ }
+ }
+});
\ No newline at end of file
diff --git a/styles/styles.css b/styles/styles.css
index 414e79c..792e4c4 100644
--- a/styles/styles.css
+++ b/styles/styles.css
@@ -1,5 +1,6 @@
.game-logo {
-
+ width: 450px;
+ height: 200px;
}
#start-game-button {
@@ -13,5 +14,7 @@
}
#hangman {
- text-align: center;
+ text-align: left;
+ position: absolute;
+ left: 0;
}