javascriptでのモグラたたきアプリ(試作品)

■動作ロジックも入れてとりあえず完成した。
画面例は変わらず下のような感じ。

時間は60秒。Normalでは、1ターン(もぐらが出るロジック1回)を1.2秒に1回にしたので、ざっと50回。ただ、どこに出るかはランダムで決めていて、もし出現している所とかぶったらその回はとばす。ので、期待値的には47回くらいになると思う。予告の動作があって、その後に出現する。

Hardでは、1ターンを0.9秒に1回にしている。また、出てくるパターンをランダムで決めていて、①通常、②フェイント、③黄色もぐら、のどれかになる。②フェイントの場合、出てくる予告の動作の後、出てこない。この時にクリックしても得点にはならない(Normalでは点になる)。時間が40秒を切ったら、出現するもぐらを増やすよう時間で条件分けしている。

点数は、通常のもぐらが20pt、黄色もぐらが50pt。

最終的な結果はコンソール画面に表示している。

イメージしていた内容はこんなところかなー。効果音を入れたり、得点のランキングを作ったりとかへ発展できそうだけど、そこまではやらないと思う。

htmlへのリンクを下のボタンに貼ってみた。

あと、今回のメインとなる javascript のコードが下の通り。

let point = 0;
let clicked_mog = 0;
let clicked_mogB = 0;
let idpool = ["a01", "a02", "a03", "a04", "a05", "a06", "a07", "a08", "a09", "a10", "a11", "a12", "a13", "a14", "a15", "a16"];
let runpool = [];
let timeout = 0;
let clickCnt = 0;
let setStandardImage = function (image, id) {
    let img = document.getElementById(id);
    img.src = image;
};

let setImage = function (image, id) {
    let img = document.getElementById(id);
    img.src = image;
    setTime1 = setTimeout(setStandardImage, 1400, "./mogura_sta.png", id);
};


function game_start() {

    point = 0;
    clicked_mog = 0;
    clicked_mogB = 0;
    const interval = 1000;
    let count = 60;
    let rand = -1;
    let preid = -1;
    let moguraSet;
    let moguraCnt = 0;
    let moguraCntB = 0;
    clickCnt = 0;

    console.log("=====  Game Start  =====");

    let diff_val = document.getElementsByName('diff');

    if (diff_val[0].checked) {
        moguraSet = setInterval(function () {
            do {
                rand = Math.floor(Math.random() * 16);
                if (rand == -1 || preid != rand) {
                    break;
                }
            } while (true)
            preid = rand;
            let id = idpool[rand];
            let img = document.getElementById(id);

            if (img.attributes.src.value === "./mogura_sta.png") {
                img.src = "./mogura_normal_pre2.png";
                moguraCnt++;
                runpool[id] = setTimeout(setImage, 800, "./mogura_normal.png", id);
            }

        }, interval * 1.2);

    } else {

        let pattern = 1;

        moguraSet = setInterval(function () {

            pattern = Math.floor(Math.random() * 10 + 1);

            do {
                rand = Math.floor(Math.random() * 16);
                if (rand == -1 || preid != rand) {
                    break;
                }
            } while (true)


            preid = rand;
            let id = idpool[rand];
            let img = document.getElementById(id);

            if (img.attributes.src.value === "./mogura_sta.png" && pattern > 4) {
                img.src = "./mogura_normal_pre3.png";
                moguraCnt++;
                runpool[id] = setTimeout(setImage, 400, "./mogura_normal.png", id);
            } else if (img.attributes.src.value === "./mogura_sta.png" && pattern >= 2 && pattern <= 4) {
                img.src = "./mogura_normal_pre3.png";
                setTimeout(setStandardImage, 600, "./mogura_sta.png", id);
            } else if (img.attributes.src.value === "./mogura_sta.png" && pattern == 1) {
                img.src = "./mogura_special.png";
                moguraCntB++;
                runpool[id] = setTimeout(setStandardImage, 800, "./mogura_sta.png", id);
            }

            let rand2;
            let preid2;
            if (count < 40 && pattern > 7) {
                do {
                    rand2 = Math.floor(Math.random() * 16);
                    if (preid != rand2 && preid2 != rand2 && rand != rand2) {
                        break;
                    }
                } while (true)

                preid2 = rand2;
                let id2 = idpool[rand2];
                let img2 = document.getElementById(id2);

                if (img2.attributes.src.value === "./mogura_sta.png") {
                    img2.src = "./mogura_normal_pre3.png";
                    moguraCnt++;
                    runpool[id2] = setTimeout(setImage, 600, "./mogura_normal.png", id2);
                }
            }
        }, interval * (9 / 10));

    }

    const timer = setInterval(function () {
        document.getElementById('time').innerHTML = count;
        if (count-- <= 0) {
            clearInterval(moguraSet);
            clearInterval(timer);
            setTimeout(() => {
                if (diff_val[0].checked) {
                    console.log("=====  Result  =======");
                    console.log("Difficult: Normal");
                    console.log("Mogura: " + clicked_mog + "/" + moguraCnt);
                    console.log("Click: " + clickCnt);
                    console.log("Point: " + point);
                    console.log("=====  Game End  =====");
                } else {
                    console.log("=====  Result  =======");
                    console.log("Difficult: Hard");
                    console.log("Mogura: " + clicked_mog + "/" + moguraCnt);
                    console.log("Mogura(B): " + clicked_mogB + "/" + moguraCntB);
                    console.log("Click: " + clickCnt);
                    console.log("Point: " + point);
                    console.log("=====  Game End  =====");
                }
            }, 1000);
        }
    }, interval);
}


function hit_click(id) {

    let img = document.getElementById(id)
    clickCnt++;

    if (img.attributes.src.value === "./mogura_normal.png" || img.attributes.src.value === "./mogura_normal_pre2.png") {
        point = point + 20;
        clicked_mog++;
        img.src = "./mogura_normal_check.png";
        clearTimeout(runpool[id]);
        setTimeout(setStandardImage, 4000, "./mogura_sta.png", id);
    } else if (img.attributes.src.value === "./mogura_special.png") {
        point = point + 50;
        clicked_mogB++;
        img.src = "./mogura_special_check.png";
        clearTimeout(runpool[id]);
        setTimeout(setStandardImage, 4000, "./mogura_sta.png", id);
    } else if (img.attributes.src.value === "./mogura_normal_pre3.png") {
        setTimeout(setStandardImage, 100, "./mogura_sta.png", id);
    }
    document.getElementById('point').innerHTML = point;
}

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です