var init_message = true; var acc_data; var die_roll = 1; var selected_die = 0; var roll = 0; const dices = [4, 6, 10, 12, 20]; g.setFontAlign(0,0); Bangle.on('touch', function(button, xy) { // Change die if not rolling if(roll < 1){ if(selected_die <= 3){ selected_die++; }else{ selected_die = 0; } } //Disable initial message init_message = false; }); function rect(){ x1 = g.getWidth()/2 - 35; x2 = g.getWidth()/2 + 35; y1 = g.getHeight()/2 - 35; y2 = g.getHeight()/2 + 35; g.drawRect(x1, y1, x2, y2); } function pentagon(){ x1 = g.getWidth()/2; y1 = g.getHeight()/2 - 50; x2 = g.getWidth()/2 - 50; y2 = g.getHeight()/2 - 10; x3 = g.getWidth()/2 - 30; y3 = g.getHeight()/2 + 30; x4 = g.getWidth()/2 + 30; y4 = g.getHeight()/2 + 30; x5 = g.getWidth()/2 + 50; y5 = g.getHeight()/2 - 10; g.drawPoly([x1, y1, x2, y2, x3, y3, x4, y4, x5, y5], true); } function triangle(){ x1 = g.getWidth()/2; y1 = g.getHeight()/2 - 57; x2 = g.getWidth()/2 - 50; y2 = g.getHeight()/2 + 23; x3 = g.getWidth()/2 + 50; y3 = g.getHeight()/2 + 23; g.drawPoly([x1, y1, x2, y2, x3, y3], true); } function drawDie(variant) { if(variant == 1){ //Rect, 6 rect(); }else if(variant == 3){ //Pentagon, 12 pentagon(); }else{ //Triangle, 4, 10, 20 triangle(); } } function initMessage(){ g.setFont("6x8", 2); g.drawString("Dice-n-Roll", g.getWidth()/2, 20); g.drawString("Shake to roll", g.getWidth()/2, 60); g.drawString("Tap to change", g.getWidth()/2, 80); g.drawString("Tap to start", g.getWidth()/2, 150); } function rollDie(){ acc_data = Bangle.getAccel(); if(acc_data.diff > 0.3){ roll = 3; } //Mange the die "roll" by chaning the number a few times if(roll > 0){ g.drawString("Rolling!", g.getWidth()/2, 150); die_roll = Math.abs(E.hwRand()) % dices[selected_die] + 1; roll--; } //Draw dice graphics drawDie(selected_die); //Draw dice number g.setFontAlign(0,0); g.setFont("Vector", 45); g.drawString(die_roll, g.getWidth()/2, g.getHeight()/2); //Draw selected die in right corner g.setFont("6x8", 2); g.drawString(dices[selected_die], g.getWidth()-15, 15); } function main() { g.clear(); if(init_message){ initMessage(); }else{ rollDie(); } Bangle.setLCDPower(1); } setInterval(main, 300);