Difference between revisions of "Team:Lethbridge/randomize js"
(Created page with "/* A 16-bit random number generator. This outputs an non-negative integer on the interval [0, n). This enjoys the property that it will never produce the same number twice in...") |
|||
Line 34: | Line 34: | ||
twist2 = twist1 ^ (twist2 & ((twist0 >> 8) + (twist0 << 8))); | twist2 = twist1 ^ (twist2 & ((twist0 >> 8) + (twist0 << 8))); | ||
− | // This is a | + | // This is a random number on the interval [0, n - 1] |
var random_number = Math.abs((twist0 * twist1) ^ twist2) % n; | var random_number = Math.abs((twist0 * twist1) ^ twist2) % n; | ||
if (random_number != nonRedundantRandom.last) { | if (random_number != nonRedundantRandom.last) { |
Latest revision as of 00:49, 18 September 2015
/* A 16-bit random number generator. This outputs an non-negative integer on the interval [0, n). This enjoys the property that it will never produce the same number twice in a row.
- /
function nonRedundantRandom(n) {
// Give this function a member that stores the last computed random // number. This number will not be be generated this time. If it is // generated, the function will recurse until it generates a different // number. if (typeof nonRedundantRandom.last === 'undefined') { nonRedundantRandom.last = -1; }
// Handle the case where n is less than 2. If n is 1, then the function // will perform infinte recursions, and if it is negative the behaviour // will be undefined. Return 0 and forgeet about these silly inputs :) if (n < 2) { return 0; }
// Generate some random 16-bit numbers based of of the largest unsigned // 16-bit prime var large_prime = 65521; var twist0 = Math.floor(Math.random() * 65521); var twist1 = Math.floor(Math.random() * 65521); var twist2 = Math.floor(Math.random() * 65521);
// Do a series of bit shifts, swaps, flips, and other goofy things twist0 = (twist1 >> (twist0 << Math.floor(Math.random() * 16))); twist0 = ((twist0 >> Math.floor(Math.random() * 16)) ^ twist2); twist1 = twist0 & twist2; twist2 = twist1 ^ (twist2 & ((twist0 >> 8) + (twist0 << 8)));
// This is a random number on the interval [0, n - 1] var random_number = Math.abs((twist0 * twist1) ^ twist2) % n; if (random_number != nonRedundantRandom.last) { nonRedundantRandom.last = random_number; return random_number; } else { return nonRedundantRandom(n); }
}
/* Returns a random color from its set
- /
function randomColor() {
var colors = [ '#fd6769', // red '#fec66a', // tangerine '#6ce980', // green '#898cd2', // blue '#9e68cc' // purple ]; var index = nonRedundantRandom(colors.length); return colors[index];
}
/* Returns a random texture from its set
- /
function randomTexture() {
var textures = [ 'url(../img/tiled_dots.png)', 'url(../img/tiled_holes.png)', 'url(../img/tiled_dlstripes.png)', 'url(../img/tiled_drstripes.png)', 'url(../img/tiled_hstripes.png)', 'url(../img/tiled_vstripes.png)', 'url(../img/tiled_diamond.png)', 'none' ]; var index = nonRedundantRandom(textures.length); return textures[index];
}