BangleApps/apps/golfscore/app.js

113 lines
2.3 KiB
JavaScript
Raw Normal View History

2021-12-11 18:29:54 +00:00
// @ts-check
// @ts-ignore
2021-12-11 10:13:50 +00:00
const menu = require("graphical_menu");
2021-12-11 18:29:54 +00:00
/**
* @type {{showMenu: (config) => void}}
*/
let E;
/**
* @type {{clear: () => void}}
*/
let g;
2021-12-11 10:13:50 +00:00
let holes_count = 18;
2021-12-11 18:29:54 +00:00
let player_count = 4;
/**
* @type {number[][]}
*/
let course = new Array(holes_count).map(() => new Array(player_count).fill(0));
2021-12-11 10:13:50 +00:00
2021-12-11 18:29:54 +00:00
const main_menu = {
2021-12-11 10:13:50 +00:00
"": {
"title": "-- Golf --"
},
2021-12-11 18:29:54 +00:00
"Setup": function () { E.showMenu(setup_menu); },
"Score Card": function () {
calculate_score();
E.showMenu(score_card);
},
};
function calculate_score() {
let scores = course.reduce((acc, hole) => {
hole.forEach((stroke_count, player) => {
acc[player] = acc[player]+stroke_count;
});
return acc;
}, new Array(player_count).fill(0));
score_card = {
"": {
"title": "score card"
},
"< Back": function () { E.showMenu(main_menu); },
};
for (let player = 0; player < player_count; player++) {
score_card["Player - " + (player + 1)] = {
value: scores[player]
};
}
}
let score_card = {};
const setup_menu = {
"": {
"title": "-- Golf Setup --"
},
2021-12-11 10:13:50 +00:00
"Holes": {
value: holes_count,
min: 1, max: 20, step: 1, wrap: true,
onchange: v => { holes_count = v; add_holes(); }
},
2021-12-11 18:29:54 +00:00
"Players": {
value: player_count,
min: 1, max: 10, step: 1, wrap: true,
onchange: v => { player_count = v; }
2021-12-11 10:13:50 +00:00
},
2021-12-11 18:29:54 +00:00
"< Back": function () { E.showMenu(main_menu); },
2021-12-11 10:13:50 +00:00
};
2021-12-11 18:29:54 +00:00
function inc_hole(i, player) { return function (v) { course[i][player] = v; }; }
2021-12-11 10:13:50 +00:00
function add_holes() {
2021-12-11 18:29:54 +00:00
for (let j = 0; j < 20; j++) {
delete main_menu["Hole - " + (j + 1)];
2021-12-11 10:13:50 +00:00
}
for (let i = 0; i < holes_count; i++) {
2021-12-11 18:29:54 +00:00
course[i] = new Array(player_count).fill(0);
main_menu["Hole - " + (i + 1)] = goto_hole_menu(i);
2021-12-11 10:13:50 +00:00
}
2021-12-11 18:29:54 +00:00
E.showMenu(main_menu);
2021-12-11 10:13:50 +00:00
}
2021-12-11 18:29:54 +00:00
function goto_hole_menu(i) {
2021-12-11 10:13:50 +00:00
return function () {
2021-12-11 18:29:54 +00:00
E.showMenu(hole_menu(i));
2021-12-11 10:13:50 +00:00
};
}
2021-12-11 18:29:54 +00:00
function hole_menu(i) {
let menu = {
2021-12-11 10:13:50 +00:00
"": {
"title": `-- Hole ${i + 1}--`
},
2021-12-11 18:29:54 +00:00
"Next hole": goto_hole_menu(i + 1),
"< Back": function () { E.showMenu(main_menu); },
2021-12-11 10:13:50 +00:00
};
2021-12-11 18:29:54 +00:00
for (let player = 0; player < player_count; player++) {
menu[`player - ${player + 1}`] = {
value: course[i][player],
min: 1, max: 20, step: 1, wrap: true,
onchange: inc_hole(i, player)
};
}
return menu;
2021-12-11 10:13:50 +00:00
}
2021-12-11 18:29:54 +00:00
// @ts-ignore
2021-12-11 10:13:50 +00:00
g.clear();
2021-12-11 18:29:54 +00:00
add_holes();