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
|
||||
var word;
|
||||
var incercari;
|
||||
var missArray;
|
||||
var charArray1;
|
||||
var charArray2;
|
||||
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">
|
||||
<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="words.js"></script>
|
||||
<script src="game.js"></script>
|
||||
<script src="js/words.js"></script>
|
||||
<script src="js/hangman.js"></script>
|
||||
<script src="js/main.js"></script>
|
||||
</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