// 設定 var columnNumber = 2; // ダイス変換を行うカラムは何個目か var formNumber = 3; // ダイス変換を行うフォームはソース中の何番目か
function diceInit() { // dice pattern dicePattern = new RegExp(/([\s\S]*)\[(\d+)(d)(\d+)([\d-+]+)?\]([\s\S]*)/i);
columnNumber = columnNumber -1; formNumber = formNumber -1; targetForm = document.forms[formNumber]; targetColumn = document.forms[formNumber].elements[columnNumber];
result = []; sum = 0; }
function pickupDice(diceArr) { preMsg = diceArr[1]; diceNum = diceArr[2]; diceNumber = diceArr[4]; revision = diceArr[5]; if (revision==undefined) { revision = ''; } afterMsg = diceArr[6];
if (diceNum<1) { alert('ダイスを何個振るか、1以上で指定してください'); return false; }
if (diceNumber<2) { alert('d2以下のダイスはありません'); return false; }
return true; }
function diceGenerater(number){ return Math.round(Math.random()*(number-1))+1; }
function diceRoll() { for (var i=0; i<diceNum; i++) { result.push(diceGenerater(diceNumber)); sum += result[i] }
return result; }
function revisionSum() { if (revision) { if (revision.match(/[-+]{2,}/)) { alert('+-が連続しています。'); sum += revision; return false; }
var revs = revision.match(/([-+])(\d+)/g); for (var j=0; j<revs.length; j++) { var op = revs[j].substr(0,1); var rev = revs[j].substr(1); if (op=='+') { sum = eval(sum) + eval(rev); } else if (op=='-') { sum = eval(sum) - eval(rev); } else { alert('式が正しくありません。'); sum += revision; return false; } } }
return sum; }
function outputDiceResult() { return preMsg+'['+diceNum+dice[3]+diceNumber+revision+'] = (' +result.join(',')+') = ' +sum +' '+afterMsg; }
window.onload = function (){ // Init diceInit();
targetForm.onsubmit = function diceConvert() { var comment = targetColumn.value;
if (comment!='' || comment==undefined) { dice = comment.match(dicePattern);
if (dice!=null) { if (pickupDice(dice)==false) { return false; }
// DiceRoll diceRoll(); revisionSum();
// output var convert = outputDiceResult(); this.elements[1].value = convert; }
return true; } else { return false; }
return false; } }