Total Rewrite

I gave the game mechanics its own class.
This commit is contained in:
Denis 2015-01-08 21:26:00 +02:00
parent 9cdba38b3c
commit 22074a14f5
6 changed files with 355 additions and 3 deletions

View file

@ -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
View 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>

View file

@ -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
View 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
View 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();
});
}
})();