From 1e23787b57534d523881d0f7959d71939b04c67f Mon Sep 17 00:00:00 2001 From: Le~Kat Date: Thu, 9 Feb 2023 19:17:21 -0500 Subject: [PATCH] Added app.js to this repository --- apps/multidice/app.js | 169 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 apps/multidice/app.js diff --git a/apps/multidice/app.js b/apps/multidice/app.js new file mode 100644 index 000000000..d0f62b8e9 --- /dev/null +++ b/apps/multidice/app.js @@ -0,0 +1,169 @@ +var menu = true; +var diceOpts = {amount: 2, selected: 5}; // TODO: grab values from settings +const DICE_ARRAY = [4, 6, 8, 10, 12, 20, 100]; // TODO: place in settings + +function drawMenu() { + + g.clear(); + g.setFont ("6x8", 2); + + g.drawString ("# of dice:", 5, 5); + g.drawString (diceOpts.amount, 137, 5); + + g.drawString ("dice:", 5, 32); + g.drawString (DICE_ARRAY [diceOpts.selected], 137, 32); +} + +function touchHandler (button, xy) { + + if (menu) { + + if (xy.y <= 26) { // selecting number of dice + + if (xy.x <= 87) { // left edge: decrease + + if (diceOpts.amount > 1) + diceOpts.amount--; + } else { // right edge: increase + + if (diceOpts.amount < 6) + diceOpts.amount++; + } + + drawMenu(); + } else if (xy.y <= 53) { // selecting dice type + + if (xy.x <= 87) { // left edge: decrease + + if (diceOpts.selected > 0) + diceOpts.selected--; + } else { // right edge: increase + + if (diceOpts.selected < DICE_ARRAY.length - 1) + diceOpts.selected++; + } + + drawMenu(); + } else { + + rollDice(); + } + } else { // return to menu screen + + menu = true; + drawMenu (); + } +} + +function rollDice() { + + menu = false; + if (diceOpts.amount == 1) { + + let output = random (DICE_ARRAY [diceOpts.selected]); + + g.clear(); + g.setFont ("Vector", 90); + + g.drawString ((" " + output).slice (-3), 10, 0); + } else { + + let output = new Int8Array ([-1, -1, -1, -1, -1, -1]); + for (let i = 0; i < diceOpts.amount; i++) { + + output [i] = random (DICE_ARRAY [diceOpts.selected]); + } + + g.clear(); + g.setFont ("Vector", 40); + + for (let i = 0; i < 3; i++) { // draws all the numbers in two rows + + if (output [i * 2 + 0] == -1) { + + break; + } else if (output [i * 2 + 1] == -1) { + + + g.drawString ((" " + output [i * 2]).slice (-3), 5, 5 + i * 40); + } else { + + g.drawString ((" " + output [i * 2]).slice (-3) + " " + (" " + output [i * 2 + 1]).slice (-3), 5, 5 + i * 40); + } + } + + g.setFont ("Vector", 20); + g.drawString ("H: " + (" " + max (output)).slice (-3), 5, 130); + g.drawString ("L: " + (" " + min (output)).slice (-3), 110, 130); + g.drawString ("T: " + (" " + total (output)).slice (-3), 5, 150); + g.drawString ("A: " + (" " + average (output)).slice (-3), 110, 150); + } +} + +function random (max) { // number is always between 1 and max + + return Math.round (Math.random() * (max - 1) + 1); +} + +function max (array) { + + let max = 0; + for (let i = 0; i < 6; i++) { + + if (array [i] == -1) + break; + + if (array [i] > max) + max = array [i]; + } + + return max; +} + +function min (array) { + + let min = array [0]; + for (let i = 1; i < 6; i++) { + + if (array [i] == -1) + break; + + if (array [i] < min) + min = array [i]; + } + + return min; +} + +function total (array) { + + let total = 0; + for (let i = 0; i < 6; i++) { + + if (array [i] == -1) + break; + + total += array [i]; + } + + return total; +} + +function average (array) { + + let average = 0; + let rounds = 0; + for (let i = 0; i < 6; i++) { + + if (array [i] == -1) + break; + + average += array [i]; + rounds++; + } + + return Math.round (average / rounds); +} + +drawMenu(); +Bangle.on ('touch', touchHandler);