Newer
Older
2022-yuto / map / nazotoki / nazotoki.js
@Yuto Togashi Yuto Togashi on 27 Jan 2023 11 KB fix judge
document.addEventListener("DOMContentLoaded", () => {
    var mymap = L.map("gpsmap").setView([38.8933, 139.8191], 17);  // 中心とズームレベル
    L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {  // タイルレイヤーの設定
	attribution:
	'&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> \
		contributors'
    }).addTo(mymap);
    //円を描く
    var cc = [38.89426, 139.81888];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("201教室");

    var cc = [38.89413, 139.81886];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("202教室");

    var cc = [38.89400, 139.81884];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("203教室");

    var cc = [38.89369, 139.81884];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("204教室");

    var cc = [38.89356, 139.81882];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("205教室");

    var cc = [38.89338, 139.81880];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("206教室");

    var cc = [38.89325, 139.81879];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("207教室");

    var cc = [38.89303, 139.81877];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("208教室");

    var cc = [38.89290, 139.81877];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("209教室");

    var cc = [38.89261, 139.81877];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("210教室");

    var cc = [38.89248, 139.81875];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("211教室");

    var cc = [38.89235, 139.81873];
    var ccopt = {
        radius: 5,
        color: "black"
    };
    var ccobj = L.circle(cc, ccopt).addTo(mymap);
    ccobj.bindPopup("212教室");

    var gpsmarker = L.marker(mymap.getCenter(), {draggable: true}).addTo(mymap);
    gpsmarker.bindPopup("STARTを押してね").openPopup();
    gpsmarker.on('dragend', function(e) {  // マーカーをドラッグさせる
        var latlng = e.target.getLatLng();
        e.target.setPopupContent("この位置は"+latlng+"です。");
        // 画像の切り替え
        if ((latlng.lat >= 38.894081 && latlng.lat <= 38.894173) && (latlng.lng >= 139.818792 && latlng.lng <= 139.818910)) {
	        document.getElementById("nazo_ttl").textContent = "202の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo1.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "さかた";
        } else if ((latlng.lat >= 38.893642 && latlng.lat <= 38.893734) && (latlng.lng >= 139.818776 && latlng.lng <= 139.818894)) {
            document.getElementById("nazo_ttl").textContent = "204の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo2.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "しょうない";
        } else if ((latlng.lat >= 38.893329 && latlng.lat <= 38.893421) && (latlng.lng >= 139.818739 && latlng.lng <= 139.818857)) {
            document.getElementById("nazo_ttl").textContent = "206の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo3.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "つるおか";
        } else if ((latlng.lat >= 38.892983 && latlng.lat <= 38.893079) && (latlng.lng >= 139.818707 && latlng.lng <= 139.818825)) {
            document.getElementById("nazo_ttl").textContent = "208の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo4.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "ゆざ";
        } else if ((latlng.lat >= 38.892561 && latlng.lat <= 38.892649) && (latlng.lng >= 139.818707 && latlng.lng <= 139.818825)) {
            document.getElementById("nazo_ttl").textContent = "210の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo5.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "みかわ";
        } else if ((latlng.lat >= 38.892302 && latlng.lat <= 38.892394) && (latlng.lng >= 139.818664 && latlng.lng <= 139.818787)) {
            document.getElementById("nazo_ttl").textContent = "212の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo6.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "いもに";
        } else {
            document.getElementById("nazo_ttl").textContent = "最初の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo0.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "にかいのぐうすうへいけ";
        }
    });

    var nTrial = 100
    var watchId = null;		// 最初はnullにしておく
    function stopGPS() {	// watchが動いていたら止めてnullにする
        console.log("watchId="+watchId);
        if (watchId != null) {	// nullかどうかで比較しないとだめ(初期値0)
            navigator.geolocation.clearWatch(watchId);
            document.getElementById("arrive").textContent = "stop";
            gpsmarker.setPopupContent("停めました");
        }
        watchId = null;
    }
    function tryWatchGPS() {
        stopGPS();		// 二重で動かないように注意する
        watchId = navigator.geolocation.watchPosition(
            onSuccess, onError,{
            maximumAge: 0, timeout: 3000, enableHighAccuracy: true});
        document.getElementById("arrive").textContent = "START!!";
    }
    function onSuccess(pos) {	// GPS信号が取れたらここに来る
        var latlng = L.latLng([pos.coords.latitude, pos.coords.longitude]);
        mymap.panTo(latlng);// 地図の中心をそこにする
        console.log(latlng);
        gpsmarker.setLatLng(latlng).setPopupContent(
            "ここは lat="+latlng.lat+", lng="+latlng.lng+" です."
        ).openPopup();
        // 画像の切り替え
        if ((latlng.lat >= 38.894081 && latlng.lat <= 38.894173) && (latlng.lng >= 139.818792 && latlng.lng <= 139.818910)) {
            document.getElementById("nazo_ttl").textContent = "202の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo1.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "さかた";
        } else if ((latlng.lat >= 38.893642 && latlng.lat <= 38.893734) && (latlng.lng >= 139.818776 && latlng.lng <= 139.818894)) {
            document.getElementById("nazo_ttl").textContent = "204の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo2.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "しょうない";
        } else if ((latlng.lat >= 38.893329 && latlng.lat <= 38.893421) && (latlng.lng >= 139.818739 && latlng.lng <= 139.818857)) {
            document.getElementById("nazo_ttl").textContent = "206の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo3.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "つるおか";
        } else if ((latlng.lat >= 38.892983 && latlng.lat <= 38.893079) && (latlng.lng >= 139.818707 && latlng.lng <= 139.818825)) {
            document.getElementById("nazo_ttl").textContent = "208の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo4.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "ゆざ";
        } else if ((latlng.lat >= 38.892561 && latlng.lat <= 38.892649) && (latlng.lng >= 139.818707 && latlng.lng <= 139.818825)) {
            document.getElementById("nazo_ttl").textContent = "210の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo5.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "みかわ";
        } else if ((latlng.lat >= 38.892302 && latlng.lat <= 38.892394) && (latlng.lng >= 139.818664 && latlng.lng <= 139.818787)) {
            document.getElementById("nazo_ttl").textContent = "212の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo6.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "いもに";
        } else {
            document.getElementById("nazo_ttl").textContent = "最初の謎";
            document.getElementById("nazo_img").setAttribute("src", "image/nazo0.png");
            document.getElementById("result").innerHTML = " ";
            document.getElementById("answer").innerHTML = "にかいのぐうすうへいけ";
        }
    }
    // エラー時
    function onError(err) {
        restN = "あと"+(--nTrial)+"回試行します。";
        gpsmarker.setPopupContent("捕捉失敗:"+restN).openPopup();
        if (nTrial <= 0) {
            navigator.geolocation.clearWatch(watchId);
        }
    }
    //解答の判定
    function judgeAnswer(ans) {
        var answer = document.getElementById("answer");
        if (ans == answer.textContent) {
            document.getElementById("result").innerHTML = "正解!!";
            document.getElementById("result").setAttribute("class", "correct");
        } else {
            document.getElementById("result").innerHTML = "不正解…";
            document.getElementById("result").setAttribute("class", "incorrect");
        }
    }
    // STARTボタンに開始を仕込む
    document.getElementById("start").addEventListener("click", tryWatchGPS);
    // STOPボタンに停止を仕込む
    document.getElementById("stop").addEventListener("click", stopGPS);
    // 送信ボタンが押されたときの処理
    document.getElementById("send").addEventListener("click", () => {
        var input = document.getElementById("input").value;
        judgeAnswer(input);
    });
}, false);