2022-11-02 19:06:17 +00:00
|
|
|
let n = 1;
|
|
|
|
let diceSides = 6;
|
|
|
|
let replacement = false;
|
|
|
|
let min = 1;
|
|
|
|
let max = 10;
|
|
|
|
|
|
|
|
Bangle.loadWidgets();
|
|
|
|
Bangle.drawWidgets();
|
|
|
|
|
|
|
|
function showCoinMenu() {
|
|
|
|
E.showMenu({
|
|
|
|
'': {
|
|
|
|
'title': 'Coin flip',
|
|
|
|
'back': showMainMenu
|
|
|
|
},
|
|
|
|
'# of coins': {
|
|
|
|
value: n,
|
|
|
|
step: 1,
|
|
|
|
min: 1,
|
|
|
|
onchange: value => n = value
|
|
|
|
},
|
|
|
|
'Go': () => {
|
|
|
|
let resultMenu = {
|
|
|
|
'': {
|
|
|
|
'title': 'Result',
|
|
|
|
'back': showCoinMenu
|
|
|
|
}
|
|
|
|
};
|
|
|
|
let heads = 0;
|
|
|
|
for (let i = 0; i < n; i++) {
|
|
|
|
let coin = Math.random() < 0.5;
|
|
|
|
if (coin) heads++;
|
|
|
|
resultMenu[`${i + 1}: ${coin ? 'Heads' : 'Tails'}`] = () => { };
|
|
|
|
}
|
|
|
|
let tails = n - heads;
|
|
|
|
resultMenu[`${heads} heads, ${Math.round(100 * heads / n)}%`] = () => { };
|
|
|
|
resultMenu[`${tails} tails, ${Math.round(100 * tails / n)}%`] = () => { };
|
|
|
|
|
|
|
|
E.showMenu(resultMenu);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function showDiceMenu() {
|
|
|
|
E.showMenu({
|
|
|
|
'': {
|
|
|
|
'title': 'Dice roll',
|
|
|
|
'back': showMainMenu
|
|
|
|
},
|
|
|
|
'# of dice': {
|
|
|
|
value: n,
|
|
|
|
step: 1,
|
|
|
|
min: 1,
|
|
|
|
onchange: value => n = value
|
|
|
|
},
|
|
|
|
'# of sides': {
|
|
|
|
value: diceSides,
|
|
|
|
step: 1,
|
|
|
|
min: 2,
|
|
|
|
onchange: value => diceSides = value
|
|
|
|
},
|
|
|
|
'Go': () => {
|
|
|
|
let resultMenu = {
|
|
|
|
'': {
|
|
|
|
'title': 'Result',
|
|
|
|
'back': showDiceMenu
|
|
|
|
}
|
|
|
|
};
|
|
|
|
let sum = 0;
|
|
|
|
let min = diceSides + 1;
|
|
|
|
let max = 0;
|
|
|
|
for (let i = 0; i < n; i++) {
|
|
|
|
let roll = Math.floor(Math.random() * diceSides + 1);
|
|
|
|
sum += roll;
|
|
|
|
if (roll < min) min = roll;
|
|
|
|
if (roll > max) max = roll;
|
|
|
|
resultMenu[`${i + 1}: ${roll}`] = () => { };
|
|
|
|
}
|
|
|
|
resultMenu[`Sum: ${sum}`] = () => { };
|
|
|
|
resultMenu[`Min: ${min}`] = () => { };
|
|
|
|
resultMenu[`Max: ${max}`] = () => { };
|
|
|
|
resultMenu[`Average: ${sum / n}`] = () => { };
|
|
|
|
|
|
|
|
E.showMenu(resultMenu);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function showCardMenu() {
|
|
|
|
E.showMenu({
|
|
|
|
'': {
|
|
|
|
'title': 'Card draw',
|
|
|
|
'back': showMainMenu
|
|
|
|
},
|
|
|
|
'# of cards': {
|
|
|
|
value: Math.min(52, n),
|
|
|
|
step: 1,
|
|
|
|
min: 1,
|
|
|
|
max: 52,
|
|
|
|
onchange: value => n = value
|
|
|
|
},
|
|
|
|
'Replacement': {
|
|
|
|
value: replacement,
|
|
|
|
onchange: value => {
|
|
|
|
replacement = value;
|
|
|
|
if (replacement && n > 52) n = 52;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
'Go': () => {
|
|
|
|
n = Math.min(n, 52);
|
2024-03-13 10:51:40 +00:00
|
|
|
const SUITS = ['Spades', 'Diamonds', 'Clubs', 'Hearts'];
|
|
|
|
const RANKS = ['Ace', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King'];
|
2022-11-02 19:06:17 +00:00
|
|
|
class Card {
|
|
|
|
constructor(suit, rank) {
|
|
|
|
this.suit = suit;
|
|
|
|
this.rank = rank;
|
|
|
|
}
|
|
|
|
|
|
|
|
//Can't use == to check equality, so using Java-inspired .equals()
|
|
|
|
equals(other) {
|
|
|
|
return this.suit == other.suit && this.rank == other.rank;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let resultMenu = {
|
|
|
|
'': {
|
|
|
|
'title': 'Result',
|
|
|
|
'back': showCardMenu
|
|
|
|
}
|
|
|
|
};
|
|
|
|
let cards = [];
|
|
|
|
for (let i = 0; i < n; i++) {
|
|
|
|
let newCard;
|
|
|
|
while (true) {
|
|
|
|
newCard = new Card(
|
|
|
|
SUITS[Math.floor(Math.random() * SUITS.length)],
|
|
|
|
RANKS[Math.floor(Math.random() * RANKS.length)]);
|
|
|
|
|
|
|
|
if (replacement) break; //If we are doing replacement, skip the check for duplicates and stop looping
|
|
|
|
|
|
|
|
if (!cards.map(card => card.equals(newCard)).includes(true)) break; //If there are no duplicates found, stop looping
|
|
|
|
}
|
|
|
|
|
|
|
|
cards.push(newCard);
|
|
|
|
resultMenu[`${newCard.rank} of ${newCard.suit}`] = () => { };
|
|
|
|
}
|
|
|
|
|
|
|
|
E.showMenu(resultMenu);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function showNumberMenu() {
|
|
|
|
E.showMenu({
|
|
|
|
'': {
|
|
|
|
'title': 'Number choice',
|
|
|
|
'back': showMainMenu
|
|
|
|
},
|
|
|
|
'Minimum': {
|
|
|
|
value: min,
|
|
|
|
step: 1,
|
|
|
|
onchange: value => min = value
|
|
|
|
},
|
|
|
|
'Maximum': {
|
|
|
|
value: max,
|
|
|
|
step: 1,
|
|
|
|
onchange: value => max = value
|
|
|
|
},
|
|
|
|
'# of choices': {
|
|
|
|
value: n,
|
|
|
|
min: 1,
|
|
|
|
step: 1,
|
|
|
|
onchange: value => n = value
|
|
|
|
},
|
|
|
|
'Go': () => {
|
|
|
|
let resultMenu = {
|
|
|
|
'': {
|
|
|
|
'title': 'Result',
|
|
|
|
'back': showNumberMenu
|
|
|
|
}
|
|
|
|
};
|
|
|
|
for (let i = 0; i < n; i++) {
|
|
|
|
let value = Math.floor(min + Math.random() * (max - min + 1));
|
|
|
|
resultMenu[`${i + 1}: ${value}`] = () => { };
|
|
|
|
}
|
|
|
|
E.showMenu(resultMenu);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function showMainMenu() {
|
|
|
|
E.showMenu({
|
|
|
|
'': {
|
|
|
|
'title': 'Random'
|
|
|
|
},
|
|
|
|
'Coin': showCoinMenu,
|
|
|
|
'Dice': showDiceMenu,
|
|
|
|
'Card': showCardMenu,
|
|
|
|
'Number': showNumberMenu
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
showMainMenu();
|