Total Rewrite
I gave the game mechanics its own class.
This commit is contained in:
parent
9cdba38b3c
commit
22074a14f5
6 changed files with 355 additions and 3 deletions
|
@ -32,7 +32,6 @@ ion.sound({
|
||||||
// words array located in words.js
|
// words array located in words.js
|
||||||
var word;
|
var word;
|
||||||
var incercari;
|
var incercari;
|
||||||
var missArray;
|
|
||||||
var charArray1;
|
var charArray1;
|
||||||
var charArray2;
|
var charArray2;
|
||||||
var missArray;
|
var missArray;
|
110
old/index.html
Normal file
110
old/index.html
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
<!DOCTYPE HTML>
|
||||||
|
<html>
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<title>Spanzuratoarea</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta http-equiv="author" content="Niutenisu">
|
||||||
|
<meta name="description" content="Spanzuratoarea in limba romana!">
|
||||||
|
<meta name="keywords" content="spanzuratoarea, joc, gratuit, romana">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=0.9">
|
||||||
|
<link rel="shortcut icon" href="favicon.ico">
|
||||||
|
<link rel="stylesheet" type="text/css" href="styles/normalize.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="styles/styles.css">
|
||||||
|
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
||||||
|
<script src="sound/ion.sound.min.js"></script>
|
||||||
|
<script src="js/words.js"></script>
|
||||||
|
<script src="game.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="content">
|
||||||
|
<h1>Spanzuratoarea!</h1>
|
||||||
|
<div id="game" class="game" style="display: none;">
|
||||||
|
<div class="mobile">
|
||||||
|
<h3>Incearca sa ghicesti cuvantul: <span class="word"></span></h3>
|
||||||
|
<h4>Introdu aici litera:</h4>
|
||||||
|
<input name="mobile" type="text">
|
||||||
|
<h4 class="litera_msg" style="display: none;">Ai apasat pe "<span class="litera" style="color: red;"></span>
|
||||||
|
<span class="litera_msg2"></span></h4>
|
||||||
|
<h4 class="litere" style="color: red;"></h4>
|
||||||
|
<select name="lista_cuvinte" class="change_words">
|
||||||
|
<option value="animale_eu">Animale din Europa</option>
|
||||||
|
<option value="tari_eu">Tari din Europa</option>
|
||||||
|
<option value="firme">Companii</option>
|
||||||
|
<option value="ldp">Limbaje de programare</option>
|
||||||
|
</select>
|
||||||
|
<button class="">Schimba</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="left">
|
||||||
|
<h2>Incearca sa ghicesti cuvantul: <span class="word"></span></h2>
|
||||||
|
<h3>Apasa pe o litera de pe tastatura!</h3>
|
||||||
|
<br>
|
||||||
|
<h4 class="litera_msg" style="display: none;">Ai apasat pe "<span class="litera red" style="color: red;"></span>"
|
||||||
|
<span class="litera_msg2"></span></h4>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h4>Instructiuni:</h4>
|
||||||
|
<p>Incearca sa ghicesti cuvantul! Ai 6 incercari pana cand vei fi spanzurat</p>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h4 class="litere red"></h4>
|
||||||
|
<br>
|
||||||
|
<br>
|
||||||
|
<h4>Cuvinte:</h4>
|
||||||
|
<select name="lista_cuvinte" class="change_words">
|
||||||
|
<option value="animale_eu">Animale din Europa</option>
|
||||||
|
<option value="tari_eu">Tari din Europa</option>
|
||||||
|
<option value="firme">Companii</option>
|
||||||
|
<option value="ldp">Limbaje de programare</option>
|
||||||
|
</select>
|
||||||
|
<button class="">Schimba</button>
|
||||||
|
</div>
|
||||||
|
<div id="gamewon">
|
||||||
|
<p>Da-i click pe imagine pentru a juca din nou!</p>
|
||||||
|
<img src="./img/win.png" alt="Winner!" title="YOU'RE WINNER!">
|
||||||
|
</div>
|
||||||
|
<div id="gameover">
|
||||||
|
<p>Da-i click pe imagine pentru a juca din nou!</p>
|
||||||
|
<p>Cuvantul era: <span class="red" id="lose_word"></span>
|
||||||
|
</p>
|
||||||
|
<img src="./img/lose.png" alt="Loser!" title="YOU'RE LOSER!">
|
||||||
|
</div>
|
||||||
|
<div id="right">
|
||||||
|
<img id="hang" src="./img/hang.png">
|
||||||
|
<img id="human" src="./img/6.png">
|
||||||
|
<br>
|
||||||
|
<h3 id="incercari_msg">Incercari ramase: <span id="incercari">6</span></h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
<div class="footer-content">
|
||||||
|
<p>
|
||||||
|
<span>Spanzuratoarea</span>
|
||||||
|
<em>created by</em>
|
||||||
|
<span> @<a href="http://www.twitter.com/niutenisu">Niutenisu</a></span>
|
||||||
|
</p>
|
||||||
|
<p class="right">
|
||||||
|
<span><a href="https://github.com/niutenisu/ro-hangman/" alt="Github" title="Github Project Link">Github</a><span>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<script type="text/javascript">
|
||||||
|
if (window.jQuery) {
|
||||||
|
// jQuery is loaded
|
||||||
|
alert("jQuery is loaded");
|
||||||
|
} else {
|
||||||
|
// jQuery is not loaded
|
||||||
|
alert("jQuery is not loaded");
|
||||||
|
</script>
|
||||||
|
}-->
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
|
@ -13,8 +13,9 @@
|
||||||
<link rel="stylesheet" type="text/css" href="styles/styles.css">
|
<link rel="stylesheet" type="text/css" href="styles/styles.css">
|
||||||
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
|
||||||
<script src="sound/ion.sound.min.js"></script>
|
<script src="sound/ion.sound.min.js"></script>
|
||||||
<script src="words.js"></script>
|
<script src="js/words.js"></script>
|
||||||
<script src="game.js"></script>
|
<script src="js/hangman.js"></script>
|
||||||
|
<script src="js/main.js"></script>
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
|
124
src/js/hangman.js
Normal file
124
src/js/hangman.js
Normal file
|
@ -0,0 +1,124 @@
|
||||||
|
var cheats = false;
|
||||||
|
/**
|
||||||
|
* A class for the old game called Hangman.
|
||||||
|
*/
|
||||||
|
function Hangman() {
|
||||||
|
var word;
|
||||||
|
var life;
|
||||||
|
var missedLetters;
|
||||||
|
var charArray1;
|
||||||
|
var charArray2;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to initialize the game.
|
||||||
|
* @param {array} wordList An array of words used to play the game.
|
||||||
|
*/
|
||||||
|
this.newGame = function(wordList) {
|
||||||
|
word = wordList[Math.floor(Math.random() * wordList.length)];
|
||||||
|
life = 6;
|
||||||
|
charArray1 = []; // word with stars
|
||||||
|
charArray2 = []; // plain word
|
||||||
|
missedLetters = [];
|
||||||
|
|
||||||
|
// Fill Arrays
|
||||||
|
for (var i = 0; i < word.length; i++) {
|
||||||
|
charArray1[i] = '*'
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var i = 0; i < word.length; i++) {
|
||||||
|
charArray2[i] = word.charAt(i);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the letter is in the word.
|
||||||
|
* @param {char} guess The letter.
|
||||||
|
*/
|
||||||
|
this.check = function(guess) {
|
||||||
|
guess = guess.toLowerCase();
|
||||||
|
return word.indexOf(guess) > -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the necessary tasks if the letter is guessed.
|
||||||
|
* @param {char} guess Letter.
|
||||||
|
*/
|
||||||
|
this.guessed = function(guess) {
|
||||||
|
guess = guess.toLowerCase();
|
||||||
|
|
||||||
|
for (i = 0; i < charArray1.length; i++) {
|
||||||
|
if (charArray2[i] == guess) {
|
||||||
|
charArray1[i] = guess;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Performs the necessary tasks in the letter is not guessed.
|
||||||
|
* @param {char} guess Letter.
|
||||||
|
*/
|
||||||
|
this.missed = function(guess) {
|
||||||
|
life--;
|
||||||
|
guess = guess.toLowerCase();
|
||||||
|
var len = missedLetters.length;
|
||||||
|
if (!($.inArray(guess, missedLetters) > -1)) {
|
||||||
|
missedLetters[len] = guess;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if the game is finished.
|
||||||
|
* @return {boolean} Returns true if the game is won.
|
||||||
|
*/
|
||||||
|
this.gameIsFinished = function() {
|
||||||
|
var a = charArray1;
|
||||||
|
var b = charArray2;
|
||||||
|
|
||||||
|
if (a === b) return true;
|
||||||
|
if (a == null || b == null) return false;
|
||||||
|
if (a.length != b.length) return false;
|
||||||
|
|
||||||
|
for (var i = 0; i < a.length; ++i) {
|
||||||
|
if (a[i] !== b[i]) return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Checks the life.
|
||||||
|
* @return {int} Returns the tries the player has left.
|
||||||
|
*/
|
||||||
|
this.getLife = function() {
|
||||||
|
return life;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setLife = function(life) {
|
||||||
|
if (cheats) life = life;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to get the for for displaying after the game is over.
|
||||||
|
* @return {string} Returns the word.
|
||||||
|
*/
|
||||||
|
this.getWord = function() {
|
||||||
|
if (life == 0 && !cheats)
|
||||||
|
return word;
|
||||||
|
if (cheats)
|
||||||
|
return word;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Placeholder for word. Eg: ****
|
||||||
|
* @return {array} Returns the word array.
|
||||||
|
*/
|
||||||
|
this.getWordArray = function() {
|
||||||
|
return charArray1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the letters that have been typed but are not the the word.
|
||||||
|
* @return {array} Get the missed letters.
|
||||||
|
*/
|
||||||
|
this.getMissedLetters = function () {
|
||||||
|
return missedLetters;
|
||||||
|
}
|
||||||
|
}
|
118
src/js/main.js
Normal file
118
src/js/main.js
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
(function() {
|
||||||
|
//General
|
||||||
|
var h = new Hangman();
|
||||||
|
var MOBILE_WIDH = 930;
|
||||||
|
var WINDOW_W = $(window).width();
|
||||||
|
var mobileSiteUrl = "/m"; // relative path
|
||||||
|
var soundsFolder = "sound/sounds/";
|
||||||
|
//Redirect to MobileSite
|
||||||
|
if (WINDOW_W <= MOBILE_WIDH) {
|
||||||
|
window.location.replace(mobileSiteUrl);
|
||||||
|
}
|
||||||
|
// Sound initialization
|
||||||
|
ion.sound({
|
||||||
|
sounds: [{
|
||||||
|
name: "button_tiny",
|
||||||
|
volume: 0.8,
|
||||||
|
preload: true
|
||||||
|
}, {
|
||||||
|
name: "ta_da",
|
||||||
|
volume: 0.8,
|
||||||
|
preload: true
|
||||||
|
}, {
|
||||||
|
name: "sad_trombone",
|
||||||
|
volume: 0.8,
|
||||||
|
preload: true
|
||||||
|
}],
|
||||||
|
volume: 0.5,
|
||||||
|
path: soundsFolder,
|
||||||
|
preload: true
|
||||||
|
});
|
||||||
|
$(document).ready(function() {
|
||||||
|
var listaCuvinte = localStorage.getItem("listaCuvinte");
|
||||||
|
if (listaCuvinte != null) {
|
||||||
|
$("select[name=lista_cuvinte]").val(listaCuvinte);
|
||||||
|
h.newGame(eval(listaCuvinte));
|
||||||
|
} else {
|
||||||
|
h.newGame(animale_eu);
|
||||||
|
}
|
||||||
|
// Update page info
|
||||||
|
$('.word').html(h.getWordArray());
|
||||||
|
$("#human").attr('src', "./img/" + h.getLife() + ".png");
|
||||||
|
$('#incercari').html(h.getLife());
|
||||||
|
$('.litera_msg2').html();
|
||||||
|
$("select[name=lista_cuvinte]").on("change", function() {
|
||||||
|
localStorage.setItem("listaCuvinte", $(this).val());
|
||||||
|
}).next().click(function() {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
$('#game').fadeIn("slow");
|
||||||
|
});
|
||||||
|
$(document).on("keypress", function(e) {
|
||||||
|
var k = e.keyCode || e.which;
|
||||||
|
var key = String.fromCharCode(k).toLowerCase();
|
||||||
|
ion.sound.play("button_tiny");
|
||||||
|
$('.litera_msg').fadeIn('slow');
|
||||||
|
$('.litera').html(key);
|
||||||
|
if (h.check(key)) {
|
||||||
|
$('.litera_msg2').html("aceasta litera se afla in cuvant.");
|
||||||
|
h.guessed(key);
|
||||||
|
$('.word').html(h.getWordArray());
|
||||||
|
} else {
|
||||||
|
$('.litera_msg2').html("aceasta litera nu se afla in cuvant.");
|
||||||
|
h.missed(key);
|
||||||
|
if (h.getLife() > -1) {
|
||||||
|
$("#human").attr('src', "./img/" + h.getLife() + ".png");
|
||||||
|
$('#incercari').html(h.getLife());
|
||||||
|
$('.litere').html(h.getMissedLetters() + "");
|
||||||
|
if (h.getLife() == 0)
|
||||||
|
gameOver();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (h.gameIsFinished()) {
|
||||||
|
gameWon();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function gameWon() {
|
||||||
|
if (WINDOW_W <= MOBILE_WIDH) {
|
||||||
|
ion.sound.play("ta_da");
|
||||||
|
alert("Felicita e tenersi per mano")
|
||||||
|
window.location.reload(); // mobile
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//alert("You're winner!");
|
||||||
|
if (WINDOW_W > MOBILE_WIDH) $('#gamewon').fadeIn('slow');
|
||||||
|
$(document).off(); // Detach keypress handler
|
||||||
|
ion.sound.play("ta_da"); // Play victory sound
|
||||||
|
$('#gamewon img').click(function() {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
$(document).on("keypress", function(e) {
|
||||||
|
var key = e.keyCode || e.which;
|
||||||
|
if (key == 13) window.location.reload(); // Reset handlers :-)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function gameOver() {
|
||||||
|
if (WINDOW_W <= MOBILE_WIDH) {
|
||||||
|
ion.sound.play("sad_trombone");
|
||||||
|
alert("Ai pierdut! CUVANT: " + h.getWord());
|
||||||
|
window.location.reload(); // for mobile phones
|
||||||
|
return; // for slower mobile phones
|
||||||
|
}
|
||||||
|
$('#incercari_msg').html("Game Over!");
|
||||||
|
$('#lose_word').html(h.getWord());
|
||||||
|
if (WINDOW_W > MOBILE_WIDH) $('#gameover').fadeIn('slow');
|
||||||
|
$(document).off(); // Detach keypress handler
|
||||||
|
ion.sound.play("sad_trombone");
|
||||||
|
$('#gameover img').click(function() {
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
$(document).on("keypress", function(e) {
|
||||||
|
var key = e.keyCode || e.which;
|
||||||
|
if (key == 13) window.location.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
})();
|
||||||
|
|
Loading…
Reference in a new issue