15dice.js

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/**
 * 5 dice vs. 10 dice
 * by Kazuki Maeda
 * Last-Modified: Mar. 9, 2021
 */

let mode = ''
let numgame = 0;
let thread;
let playerwin = 0;
let kingwin = 0;
let draw = 0;

window.onload = function(){
    document.getElementById('game').addEventListener('click', game, true);
    document.getElementById('endless').addEventListener('click', endless, true);
    document.getElementById('reset').addEventListener('click', reset, true);
}

function dice(d){
    if(d == 1){
        return '<span style="color: red;">⚀</span>';
    }
    if(d == 2){
        return '⚁';
    }
    if(d == 3){
        return '⚂';
    }
    if(d == 4){
        return '⚃';
    }
    if(d == 5){
        return '⚄';
    }
    if(d == 6){
        return '⚅';
    }
}

function game(){
    ++numgame;
    let player = [];
    let playersum = 0;
    let gametext = '    あなた:';
    for(let i = 0; i < 5; ++i){
        player.push(Math.floor(Math.random()*6)+1);
        playersum += player[i];
        gametext += dice(player[i]);
    }
    gametext += ':' + playersum + '<br>';

    let king = [];
    let kingsum = 0;
    gametext += 'キングボンビー:';
    for(let i = 0; i < 10; ++i){
        king.push(Math.floor(Math.random()*6)+1);
        kingsum += king[i];
        gametext += dice(king[i]);
    }
    gametext += ':' + kingsum + '<br>';
    if(kingsum > playersum){
        ++kingwin;
        gametext += 'キングボンビーの勝ち!';
    } else if(kingsum < playersum){
        ++playerwin;
        gametext += '<strong>あなたの勝ち!</strong>';
    } else {
        ++draw;
        gametext += '<em>引き分け!</em>';
    }

    gametext += '<br>あなたは' + playerwin + '勝' + kingwin + '敗' + draw + '引き分け<strong>(勝率:' + (playerwin/numgame*100).toFixed(6) + '%)</strong>'


    document.getElementById('result').innerHTML = gametext;
}

function endless(){
    if(mode != 'endless'){
        mode = 'endless';
        thread = setInterval("endlessupdate();", 1000/60);
        document.getElementById('game').disabled = true;
        document.getElementById('reset').disabled = true;
        document.getElementById('endless').value = 'もう飽きた';
    } else {
        mode = 'inendless';
        document.getElementById('game').disabled = false;
        document.getElementById('reset').disabled = false;
        document.getElementById('endless').value = '飽きるまで勝負し続ける';
        clearInterval(thread);
    }
}

function endlessupdate(){
    let speed = Math.floor(document.getElementById('speed').value);
    speed = speed <= 0 ? 1 : speed;
    for(let k = 0; k < speed-1; ++k){
        ++numgame;
        let playersum = 0;
        for(let i = 0; i < 5; ++i)
            playersum += Math.floor(Math.random()*6)+1;
        let kingsum = 0;
        for(let i = 0; i < 10; ++i)
            kingsum += Math.floor(Math.random()*6)+1;
        if(kingsum > playersum){
            ++kingwin;
        } else if(kingsum < playersum){
            ++playerwin;
        } else {
            ++draw;
        }
    }
    game();
}

function reset(){
    document.getElementById('result').innerHTML = '勝負!!';
    numgame=0;
    playerwin=0;
    kingwin=0;
    draw=0;
}