Cleaned and commented code

For readability
This commit is contained in:
RyanNeilson
2018-01-28 15:19:21 -04:00
committed by GitHub
parent 0f76b1aa89
commit bfd9caee20

View File

@@ -18,11 +18,15 @@ var INCOMPLETE_STRAIGHT_MASK2 = (1 << 1) + (1 << 2) + (1 << 3);
var INCOMPLETE_STRAIGHT_MASK3 = (1 << 2) + (1 << 3) + (1 << 4); var INCOMPLETE_STRAIGHT_MASK3 = (1 << 2) + (1 << 3) + (1 << 4);
var INCOMPLETE_STRAIGHT_MASK4 = (1 << 3) + (1 << 4) + (1 << 5); var INCOMPLETE_STRAIGHT_MASK4 = (1 << 3) + (1 << 4) + (1 << 5);
/*
* Create the Yahtzee object
*/
Yahtzee = { Yahtzee = {
launch : 0, launch : 0,
dices : [], dices : [],
combinaisons : [], Combinations : [],
pair : false, pair : false,
doublePair : false, doublePair : false,
three_of_a_kind : false, three_of_a_kind : false,
@@ -35,9 +39,13 @@ Yahtzee = {
scoreUp : 0, scoreUp : 0,
scoreDown: 0, scoreDown: 0,
keptCombinaisons: [], keptCombinations: [],
clear: function(all) { /*
* Reset all values to defaults
*/
clear: function(all)
{
if( all ) if( all )
Yahtzee.launch = 0; Yahtzee.launch = 0;
@@ -52,42 +60,60 @@ Yahtzee = {
Yahtzee.straight = 0; Yahtzee.straight = 0;
if( all ) if( all )
for( var i = 0; i < 5; i++ ) { for( var i = 0; i < 5; i++ )
{
Yahtzee.dices[i] = 0; Yahtzee.dices[i] = 0;
$("#dice" + (i+1)).removeClass().addClass("dice").addClass("empty"); $("#dice" + (i+1)).removeClass().addClass("dice").addClass("empty");
} }
for( var i = 0; i < 6; i++ ) { for( var i = 0; i < 6; i++ )
Yahtzee.combinaisons[i] = 0; {
Yahtzee.Combinations[i] = 0;
} }
$(".possibility").each(function(incr, elt) { $(".possibility").each(function(incr, elt)
{
$(elt).removeClass("possibility"); $(elt).removeClass("possibility");
$(elt).empty(); $(elt).empty();
}); });
$(".keep").each(function(incr, elt) { $(".keep").each(function(incr, elt)
{
$(elt).attr('style', 'visibility:hidden;'); $(elt).attr('style', 'visibility:hidden;');
}) });
$(".trash").each(function(incr, elt) {
$(".trash").each(function(incr, elt)
{
$(elt).attr('style', 'visibility:hidden;'); $(elt).attr('style', 'visibility:hidden;');
}) });
}, },
shuffle: function() { /*
* Provide random dice rolls
*/
shuffle: function()
{
if($("#launchBtn").hasClass("disabled") ) if($("#launchBtn").hasClass("disabled") )
{
return false; return false;
}
if( Yahtzee.launch == 3 ) if( Yahtzee.launch == 3 )
{
Yahtzee.clear(true); Yahtzee.clear(true);
}
else else
{
Yahtzee.clear(false); Yahtzee.clear(false);
}
Yahtzee.launch++; Yahtzee.launch++;
for( var i = 0; i < 5; i++ ) { for( var i = 0; i < 5; i++ )
{
var html = $("#dice" + (i+1)); var html = $("#dice" + (i+1));
if( !html.hasClass("selected") ) { if( !html.hasClass("selected") )
{
var value = Math.round(5 * Math.random()); var value = Math.round(5 * Math.random());
Yahtzee.dices[i] = value; Yahtzee.dices[i] = value;
html.removeClass().addClass("dice").addClass("face" + (value + 1)); html.removeClass().addClass("dice").addClass("face" + (value + 1));
@@ -96,22 +122,37 @@ Yahtzee = {
$("#launch").html(Yahtzee.launch); $("#launch").html(Yahtzee.launch);
if( Yahtzee.launch == 3 ) if( Yahtzee.launch == 3 )
{
$("#launchBtn").addClass("disabled"); $("#launchBtn").addClass("disabled");
}
}, },
findCombinaisons: function() {
for( var i = 0; i < 5; i++) { /*
Yahtzee.combinaisons[Yahtzee.dices[i]]++; * Find valid score combinations in current dice
*/
findCombinations: function()
{
for( var i = 0; i < 5; i++)
{
Yahtzee.Combinations[Yahtzee.dices[i]]++;
Yahtzee.straight = Yahtzee.straight | (1 << Yahtzee.dices[i]); Yahtzee.straight = Yahtzee.straight | (1 << Yahtzee.dices[i]);
} }
for( var i = 0; i < 6; i++ ) { for( var i = 0; i < 6; i++ )
var value = Yahtzee.combinaisons[i]; {
switch( value ) { var value = Yahtzee.Combinations[i];
switch( value )
{
case 2: case 2:
if( Yahtzee.pair ) if( Yahtzee.pair )
Yahtzee.doublePair = true; Yahtzee.doublePair = true;
Yahtzee.pair = true; Yahtzee.pair = true;
break; break;
case 5: case 5:
Yahtzee.yahtzee = true; Yahtzee.yahtzee = true;
@@ -126,57 +167,93 @@ Yahtzee = {
Yahtzee.full = Yahtzee.pair && Yahtzee.three_of_a_kind && !Yahtzee.doublePair; Yahtzee.full = Yahtzee.pair && Yahtzee.three_of_a_kind && !Yahtzee.doublePair;
if( (Yahtzee.straight & LARGE_STRAIGHT_MASK1) == LARGE_STRAIGHT_MASK1 ) { if( (Yahtzee.straight & LARGE_STRAIGHT_MASK1) == LARGE_STRAIGHT_MASK1 )
{
Yahtzee.large_straight = true; Yahtzee.large_straight = true;
Yahtzee.small_straight = true; Yahtzee.small_straight = true;
} else if( (Yahtzee.straight & LARGE_STRAIGHT_MASK2) == LARGE_STRAIGHT_MASK2 ) { } else if( (Yahtzee.straight & LARGE_STRAIGHT_MASK2) == LARGE_STRAIGHT_MASK2 )
{
Yahtzee.large_straight = true; Yahtzee.large_straight = true;
Yahtzee.small_straight = true; Yahtzee.small_straight = true;
} else if( (Yahtzee.straight & SMALL_STRAIGHT_MASK1) == SMALL_STRAIGHT_MASK1 ) { } else if( (Yahtzee.straight & SMALL_STRAIGHT_MASK1) == SMALL_STRAIGHT_MASK1 )
{
Yahtzee.small_straight = true; Yahtzee.small_straight = true;
} else if( (Yahtzee.straight & SMALL_STRAIGHT_MASK2) == SMALL_STRAIGHT_MASK2 ) { } else if( (Yahtzee.straight & SMALL_STRAIGHT_MASK2) == SMALL_STRAIGHT_MASK2 )
{
Yahtzee.small_straight = true; Yahtzee.small_straight = true;
} else if( (Yahtzee.straight & SMALL_STRAIGHT_MASK3) == SMALL_STRAIGHT_MASK3 ) { } else if( (Yahtzee.straight & SMALL_STRAIGHT_MASK3) == SMALL_STRAIGHT_MASK3 )
{
Yahtzee.small_straight = true; Yahtzee.small_straight = true;
} }
if( Yahtzee.three_of_a_kind && Yahtzee.keptCombinaisons.indexOf("threeOfAKind") == -1 ) if( Yahtzee.three_of_a_kind && Yahtzee.keptCombinations.indexOf("threeOfAKind") == -1 )
{
$("#threeOfAKindKeep").attr('style', 'visibility:visible;'); $("#threeOfAKindKeep").attr('style', 'visibility:visible;');
if( Yahtzee.four_of_a_kind && Yahtzee.keptCombinaisons.indexOf("fourOfAKind") == -1 ) }
if( Yahtzee.four_of_a_kind && Yahtzee.keptCombinations.indexOf("fourOfAKind") == -1 )
{
$("#fourOfAKindKeep").attr('style', 'visibility:visible;'); $("#fourOfAKindKeep").attr('style', 'visibility:visible;');
if( Yahtzee.full && Yahtzee.keptCombinaisons.indexOf("full") == -1 ) }
if( Yahtzee.full && Yahtzee.keptCombinations.indexOf("full") == -1 )
{
$("#fullKeep").attr('style', 'visibility:visible;'); $("#fullKeep").attr('style', 'visibility:visible;');
if( Yahtzee.yahtzee && Yahtzee.keptCombinaisons.indexOf("yahtzee") == -1 ) }
if( Yahtzee.yahtzee && Yahtzee.keptCombinations.indexOf("yahtzee") == -1 )
{
$("#yahtzeeKeep").attr('style', 'visibility:visible;'); $("#yahtzeeKeep").attr('style', 'visibility:visible;');
if( Yahtzee.small_straight && Yahtzee.keptCombinaisons.indexOf("smallStraight") == -1 ) }
if( Yahtzee.small_straight && Yahtzee.keptCombinations.indexOf("smallStraight") == -1 )
{
$("#smallStraightKeep").attr('style', 'visibility:visible;'); $("#smallStraightKeep").attr('style', 'visibility:visible;');
if( Yahtzee.large_straight && Yahtzee.keptCombinaisons.indexOf("largeStraight") == -1 ) }
if( Yahtzee.large_straight && Yahtzee.keptCombinations.indexOf("largeStraight") == -1 )
{
$("#largeStraightKeep").attr('style', 'visibility:visible;'); $("#largeStraightKeep").attr('style', 'visibility:visible;');
}
if( Yahtzee.combinaisons[0] > 0 && Yahtzee.keptCombinaisons.indexOf("one") == -1 ) if( Yahtzee.Combinations[0] > 0 && Yahtzee.keptCombinations.indexOf("one") == -1 )
{
$("#oneKeep").attr('style', 'visibility:visible;'); $("#oneKeep").attr('style', 'visibility:visible;');
if( Yahtzee.combinaisons[1] > 0 && Yahtzee.keptCombinaisons.indexOf("two") == -1 ) }
if( Yahtzee.Combinations[1] > 0 && Yahtzee.keptCombinations.indexOf("two") == -1 )
{
$("#twoKeep").attr('style', 'visibility:visible;'); $("#twoKeep").attr('style', 'visibility:visible;');
if( Yahtzee.combinaisons[2] > 0 && Yahtzee.keptCombinaisons.indexOf("three") == -1 ) }
if( Yahtzee.Combinations[2] > 0 && Yahtzee.keptCombinations.indexOf("three") == -1 )
{
$("#threeKeep").attr('style', 'visibility:visible;'); $("#threeKeep").attr('style', 'visibility:visible;');
if( Yahtzee.combinaisons[3] > 0 && Yahtzee.keptCombinaisons.indexOf("four") == -1 ) }
if( Yahtzee.Combinations[3] > 0 && Yahtzee.keptCombinations.indexOf("four") == -1 )
{
$("#fourKeep").attr('style', 'visibility:visible;'); $("#fourKeep").attr('style', 'visibility:visible;');
if( Yahtzee.combinaisons[4] > 0 && Yahtzee.keptCombinaisons.indexOf("five") == -1 ) }
if( Yahtzee.Combinations[4] > 0 && Yahtzee.keptCombinations.indexOf("five") == -1 )
{
$("#fiveKeep").attr('style', 'visibility:visible;'); $("#fiveKeep").attr('style', 'visibility:visible;');
if( Yahtzee.combinaisons[5] > 0 && Yahtzee.keptCombinaisons.indexOf("six") == -1 ) }
if( Yahtzee.Combinations[5] > 0 && Yahtzee.keptCombinations.indexOf("six") == -1 )
{
$("#sixKeep").attr('style', 'visibility:visible;'); $("#sixKeep").attr('style', 'visibility:visible;');
}
if( Yahtzee.keptCombinaisons.indexOf("luck") == -1 ) if( Yahtzee.keptCombinations.indexOf("luck") == -1 )
{
$("#luckKeep").attr('style', 'visibility:visible;'); $("#luckKeep").attr('style', 'visibility:visible;');
}
$(".trash").each(function(incr, elt){ $(".trash").each(function(incr, elt)
var html = $(elt) {
if( Yahtzee.keptCombinaisons.indexOf(html.attr('data-id')) == -1 ) var html = $(elt);
if( Yahtzee.keptCombinations.indexOf(html.attr('data-id')) == -1 )
html.attr('style', 'visibility:visible;'); html.attr('style', 'visibility:visible;');
}); });
}, },
findPossibilities: function() { /*
* Calculate probability of rolling a particular dice combination
*/
findPossibilities: function()
{
var possibilities = { var possibilities = {
"threeOfAKind" : 0, "threeOfAKind" : 0,
"fourOfAKind" : 0, "fourOfAKind" : 0,
@@ -186,12 +263,15 @@ Yahtzee = {
"largeStraight" : 0 "largeStraight" : 0
}; };
if( Yahtzee.three_of_a_kind && !Yahtzee.full) { if( Yahtzee.three_of_a_kind && !Yahtzee.full)
{
possibilities["full"] = Math.max( possibilities["full"], 17 ); possibilities["full"] = Math.max( possibilities["full"], 17 );
possibilities["fourOfAKind"] = Math.max( possibilities["fourOfAKind"], 31); possibilities["fourOfAKind"] = Math.max( possibilities["fourOfAKind"], 31);
possibilities["yahtzee"] = Math.max( possibilities["yahtzee"], 3); possibilities["yahtzee"] = Math.max( possibilities["yahtzee"], 3);
} }
if( Yahtzee.pair ) {
if( Yahtzee.pair )
{
if( !Yahtzee.three_of_a_kind ) if( !Yahtzee.three_of_a_kind )
possibilities["threeOfAKind"] = Math.max( possibilities["threeOfAKind"], 42); possibilities["threeOfAKind"] = Math.max( possibilities["threeOfAKind"], 42);
possibilities["fourOfAKind"] = Math.max( possibilities["fourOfAKind"], 7); possibilities["fourOfAKind"] = Math.max( possibilities["fourOfAKind"], 7);
@@ -199,60 +279,72 @@ Yahtzee = {
possibilities["full"] = Math.max( possibilities["full"], 10); possibilities["full"] = Math.max( possibilities["full"], 10);
possibilities["yahtzee"] = Math.max( possibilities["yahtzee"], 7); possibilities["yahtzee"] = Math.max( possibilities["yahtzee"], 7);
} }
if( Yahtzee.four_of_a_kind ) {
if( Yahtzee.four_of_a_kind )
{
possibilities["yahtzee"] = Math.max( possibilities["yahtzee"], 17); possibilities["yahtzee"] = Math.max( possibilities["yahtzee"], 17);
} }
if( Yahtzee.doublePair ) {
if( Yahtzee.doublePair )
{
possibilities["full"] = Math.max( possibilities["full"], 33); possibilities["full"] = Math.max( possibilities["full"], 33);
} }
if( !Yahtzee.large_straight && if( !Yahtzee.large_straight &&
((Yahtzee.straight & SMALL_STRAIGHT_MASK1) == SMALL_STRAIGHT_MASK1 || (Yahtzee.straight & SMALL_STRAIGHT_MASK3) == SMALL_STRAIGHT_MASK3) ) { ((Yahtzee.straight & SMALL_STRAIGHT_MASK1) == SMALL_STRAIGHT_MASK1 || (Yahtzee.straight & SMALL_STRAIGHT_MASK3) == SMALL_STRAIGHT_MASK3) )
{
possibilities["largeStraight"] = Math.max( possibilities["largeStraight"], 17); possibilities["largeStraight"] = Math.max( possibilities["largeStraight"], 17);
} else if( !Yahtzee.large_straight && (Yahtzee.straight & SMALL_STRAIGHT_MASK2) == SMALL_STRAIGHT_MASK2 ) { } else if( !Yahtzee.large_straight && (Yahtzee.straight & SMALL_STRAIGHT_MASK2) == SMALL_STRAIGHT_MASK2 )
{
possibilities["largeStraight"] = Math.max( possibilities["largeStraight"], 33); possibilities["largeStraight"] = Math.max( possibilities["largeStraight"], 33);
} }
$.each(possibilities, function(key, value) { $.each(possibilities, function(key, value)
{
var html = $("#" + key + "Probability"); var html = $("#" + key + "Probability");
html.empty().addClass("possibility"); html.empty().addClass("possibility");
if( value > 0 && Yahtzee.keptCombinaisons.indexOf(key) == -1 ) { if( value > 0 && Yahtzee.keptCombinations.indexOf(key) == -1 )
{
html.append(value + "%"); html.append(value + "%");
} else } else
html.append("&nbsp;"); html.append("&nbsp;");
}); });
}, },
keep: function(id) { /*
* Process user decision to keep a score value
*/
keep: function(id)
{
var score = 0; var score = 0;
switch(id) { switch(id) {
case "one" : case "one" :
score = Yahtzee.combinaisons[0] * 1; score = Yahtzee.Combinations[0] * 1;
Yahtzee.scoreUp += score; Yahtzee.scoreUp += score;
break; break;
case "two" : case "two" :
score = Yahtzee.combinaisons[1] * 2; score = Yahtzee.Combinations[1] * 2;
Yahtzee.scoreUp += score; Yahtzee.scoreUp += score;
break; break;
case "three" : case "three" :
score = Yahtzee.combinaisons[2] * 3; score = Yahtzee.Combinations[2] * 3;
Yahtzee.scoreUp += score; Yahtzee.scoreUp += score;
break; break;
case "four" : case "four" :
score = Yahtzee.combinaisons[3] * 4; score = Yahtzee.Combinations[3] * 4;
Yahtzee.scoreUp += score; Yahtzee.scoreUp += score;
break; break;
case "five" : case "five" :
score = Yahtzee.combinaisons[4] * 5; score = Yahtzee.Combinations[4] * 5;
Yahtzee.scoreUp += score; Yahtzee.scoreUp += score;
break; break;
case "six" : case "six" :
score = Yahtzee.combinaisons[5] * 6; score = Yahtzee.Combinations[5] * 6;
Yahtzee.scoreUp += score; Yahtzee.scoreUp += score;
break; break;
case "threeOfAKind" : case "threeOfAKind" :
case "fourOfAKind" : case "fourOfAKind" :
case "luck" : case "luck" :
$.each(Yahtzee.dices, function(index, elt){score += (elt + 1)}); $.each(Yahtzee.dices, function(index, elt){score += (elt + 1);});
Yahtzee.scoreDown += score; Yahtzee.scoreDown += score;
break; break;
case "full" : case "full" :
@@ -274,37 +366,60 @@ Yahtzee = {
} }
$("#" + id + "Score").html(score); $("#" + id + "Score").html(score);
$("#topScore").html(Yahtzee.scoreUp);
Yahtzee.keptCombinaisons.push(id); $("#bottomScore").html(Yahtzee.scoreDown);
Yahtzee.keptCombinations.push(id);
Yahtzee.clear(true); Yahtzee.clear(true);
if( Yahtzee.keptCombinaisons.length < 13 ) if( Yahtzee.keptCombinations.length < 13 )
$("#launchBtn").removeClass("disabled"); $("#launchBtn").removeClass("disabled");
else else
Yahtzee.show_game_over(); Yahtzee.show_game_over();
}, },
trash : function(id) { /*
* Add a zero to the score value of the selected table row
*/
trash: function(id)
{
$("#" + id + "Score").html(0).addClass('trashed'); $("#" + id + "Score").html(0).addClass('trashed');
$("#" + id + "Label").attr('style', 'text-decoration:line-through;'); $("#" + id + "Label").attr('style', 'text-decoration:line-through;');
Yahtzee.keptCombinaisons.push(id); Yahtzee.keptCombinations.push(id);
Yahtzee.clear(true); Yahtzee.clear(true);
if( Yahtzee.keptCombinaisons.length < 13 ) if( Yahtzee.keptCombinations.length < 13 )
{
$("#launchBtn").removeClass("disabled"); $("#launchBtn").removeClass("disabled");
}
else else
{
Yahtzee.show_game_over(); Yahtzee.show_game_over();
}
}, },
show_game_over: function() { /*
* Calculate and display the final user score
*/
show_game_over: function()
{
$("#upperScore").append(Yahtzee.scoreUp); $("#upperScore").append(Yahtzee.scoreUp);
if( Yahtzee.scoreUp > 63 ) { if( Yahtzee.scoreUp > 63 )
{
$("#bonus").append(35); $("#bonus").append(35);
Yahtzee.scoreUp += 35; Yahtzee.scoreUp += 35;
} else $("#lowerScore").append(Yahtzee.scoreDown);
$("#totalScore").append(Yahtzee.scoreDown + Yahtzee.scoreUp);
$("#scorePanel").show();
}
else
{
$("#bonus").append(0); $("#bonus").append(0);
$("#lowerScore").append(Yahtzee.scoreDown); $("#lowerScore").append(Yahtzee.scoreDown);
$("#totalScore").append(Yahtzee.scoreDown + Yahtzee.upperScore); $("#totalScore").append(Yahtzee.scoreDown + Yahtzee.scoreUp);
$("#scorePanel").show(); $("#scorePanel").show();
} }
} }
};