Double Dice Roll
diceroll.html
<!DOCTYPE html>
<html>
<head>
<title>Dice Roll</title>
<link rel="stylesheet" type="text/css" href="diceroll.css">
</head>
<body>
<table>
<tr>
<td colspan="3">Player 1:</td>
</tr>
<tr>
<td><img src="https://digisoln.com/resources/dice/unknown.bmp" id="p1_first_dice"></td>
<td><img src="https://digisoln.com/resources/dice/unknown.bmp" id="p1_second_dice"></td>
<td><span id="p1_result">??</span></td>
</tr>
<tr>
<td colspan="3">CPU:</td>
</tr>
<tr>
<td><img src="https://digisoln.com/resources/dice/unknown.bmp" id="cpu_first_dice"></td>
<td><img src="https://digisoln.com/resources/dice/unknown.bmp" id="cpu_second_dice"></td>
<td><span id="cpu_result">??</span></td>
</tr>
<tr><td colspan="3">Dashboard:</td></tr>
<tr>
<td><input type="button" value="Roll" onclick="roll()"></td>
<td><input type="button" id="challenge" value="Challenge" onclick="challenge()" style="display: none;"></td>
<td>Points: <span id="points">10</span></td>
</tr>
</table>
<script src="diceroll.js"></script>
</body>
</html>
diceroll.css
body{
background-color: lemonchiffon;
}
table {
border-collapse: collapse;
}
td {
border: 3px solid #778899;
text-align: left;
padding: 5px;
}
diceroll.js
var p1_first_dice, p1_second_dice, p1_result, cpu_first_dice, cpu_second_dice, cpu_result;
var points = 10;
function newDiceValue(){
return Math.floor((Math.random() * 6) + 1);
}
function getImageURL(diceValue){
switch(diceValue){
case 1: return "https://digisoln.com/resources/dice/dice1.bmp";
case 2: return "https://digisoln.com/resources/dice/dice2.bmp";
case 3: return "https://digisoln.com/resources/dice/dice3.bmp";
case 4: return "https://digisoln.com/resources/dice/dice4.bmp";
case 5: return "https://digisoln.com/resources/dice/dice5.bmp";
case 6: return "https://digisoln.com/resources/dice/dice6.bmp";
}
}
function calculateResult(dice1, dice2){
result = 0;
if(Math.max(dice1, dice2) == dice1){
result = parseInt(dice1.toString() + dice2.toString());
} else {
result = parseInt(dice2.toString() + dice1.toString());
}
return result;
}
function updatePoints(){
document.getElementById("points").innerHTML = points;
}
function challenge(){
cpu_first_dice = newDiceValue();
cpu_second_dice = newDiceValue();
cpu_result = calculateResult(cpu_first_dice, cpu_second_dice);
document.getElementById("cpu_first_dice").src = getImageURL(cpu_first_dice);
document.getElementById("cpu_second_dice").src = getImageURL(cpu_second_dice);
document.getElementById("cpu_result").innerHTML = cpu_result;
document.getElementById("challenge").style.display = "none";
if (cpu_result > p1_result) { points = points - 5; }
if (cpu_result < p1_result) { points = points + 5; }
updatePoints();
}
function roll(){
p1_first_dice = newDiceValue();
p1_second_dice = newDiceValue();
p1_result = calculateResult(p1_first_dice, p1_second_dice);
document.getElementById("p1_first_dice").src = getImageURL(p1_first_dice);
document.getElementById("p1_second_dice").src = getImageURL(p1_second_dice);
document.getElementById("p1_result").innerHTML = p1_result;
document.getElementById("challenge").style.display = "inline";
points -= 1;
updatePoints();
}
Improve headings, add rules (HTML) and refine aesthetics (CSS)
You could also improve / modify game mechanics (JS), such as:
- underneath html table dashboard have a "max score" which is the highest score i have reached (as i keep losing points it would be nice to know what my top target reached was)
- points for rolling doubles
- double up option (use a checkbox perhaps) when challenging where stakes are twice the regular (points won and lost)
- a better mechanism to handle draws between cpu and player - roll off? card draw? heads or tails?
- handle end game with location.reload() perhaps (when score less than 1)
- can you extend / refine / mod / adapt this game or game concept to any of the other examples we have studied in class? do you have an idea but don't know how to start? ask your teacher
Algorithm for Double Dice Roll Game
FUNCTION rollTwoDice()
SET dice1 = RANDOM_INT(1,6)
SET dice2 = RANDOM_INT(1,6)
IF dice1 > dice2 THEN
SET jointNumber = JOIN(dice1, dice2)
ELSE
SET jointNumber = JOIN(dice2, dice1)
END IF
RETURN jointNumber
END FUNCTION
SET points = 10
WHILE points > 0:
SET mynumber = CALL rollTwoDice()
SET points = points - 1
INPUT challenge
IF challenge == True THEN
SET cpunumber = CALL rollTwoDice()
IF mynumber > cpunumber THEN
SET points = points + 5
ELSE
IF cpunumber < mynumber THEN
SET points = points - 5
END IF
END IF
END IF
END WHILE