Skip welcome & menu and move to editor
Welcome to JS Bin
Load cached copy from
 
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
 Enter Your Dice Information <input placeholder="format(5d2+2)" type="text" name="diceDef" id="diceDef"  />
  <br /> <input type="button" onclick="DiceRoller.driveRolls('diceDef', 'outputArea')" value="Roll">
  <div id="outputArea">
  </div>
</body>
</html>
 
 DiceRoller = {
   regExp: /([\d]+)d([\d]+)(([\-\+])([\d]+))?/gi,
      parseInput:function(strIn)
      {
        var retStr = {error: false, message: ""};
        var str = strIn;
       
       var matches = (this.regExp.exec(str));
       if ( matches === null ||  str != matches[0] )
       {
         retStr.error = true;
         retStr.message = "input doesn't match pattern";
       } else if ( parseInt(matches[1], 10) === 0 || parseInt(matches[2], 10) === 0)
       {
         retStr.error = true;
         retStr.message = "sides of dice and rolls can't be zero";
       } else {
         retStr.numSides = parseInt(matches[2], 10);
         retStr.numDices = parseInt(matches[1], 10);
         if (! matches[3] )
         { 
           retStr.modifier = 0;
         }else{
           retStr.modifier = parseInt(matches[5], 10) *  ( matches[4] == "-" ? -1 : 1) ;
         }
         retStr.rolls = [];
         retStr.total=retStr.modifier;
         for ( var i = 0; i < retStr.numDices; i++)
         {
             retStr.rolls.push(this.performRoll(retStr.numSides));
            retStr.total+=retStr.rolls[retStr.rolls.length-1];
         }
       }
               
        return retStr;
       
      },
   
   performRoll: function(sides)
   {
     return Math.floor(Math.random()*sides+1);
   }, 
   driveRolls: function(input, output)
   {
     var str = document.getElementById(input).value;
      var outElm = document.getElementById(output);
     var res = this.parseInput(str);
     if ( res.error )
     {
      outElm.innerHTML = ("Error has occured:" + res.message);
     } else {
      var outStr =[];
       outStr.push("You have rolled " +      
                   (res.numDices == 1 ? "a " : res.numDices + " ") + res.numSides + " sided " + 
                   (res.numDices==1? "die" : "dice" ));
       for ( var i = 0; i < res.rolls.length; i++)
       {
         outStr.push("Roll #" + (i+1) + ": " + res.rolls[i]);
       }
       if ( res.modifier !== 0)
       {
         outStr.push("You had a " + res.modifier + " modifier.");
       }
       outStr.push("For a Total of: " + res.total);
       outElm.innerHTML = outStr.join("<br />");
     }
   }
    };
    
Output

You can jump to the latest bin by adding /latest to your URL

Dismiss x
public
Bin info
anonymouspro
0viewers