Newer
Older
2022-aoi / map / game / gamegps3.js
@SUGAWARA Aoi SUGAWARA Aoi on 27 Jan 2023 4 KB tuika
document.addEventListener("DOMContentLoaded", () => {
    var place = [
	[38.894331,139.819547],  // カフェテリア
	[38.893771,139.819431],  // 事務室付近
	[38.893128,139.819452],  // 図書室前
	[38.892443,139.819352],  // ホール付近
	[38.893585,139.818951],  // 学生棟内1
	[38.892972,139.818898],  // 学生棟内2
	[38.892258,139.819039],  // ポイント1
	[38.892799,139.819386],  // ポイント2
	[38.894185,139.819286]   // ポイント3
    ];
    var center = [38.893445,139.819209];
    var mymap = L.map("gpsmap").setView(center, 17);
    L.tileLayer('//cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', {
	attribution:
	'<a href="http://maps.gsi.go.jp/development/ichiran.html">\
	国土地理院</a>'
    }).addTo(mymap);
    /* L.tileLayer('https://{s}.tile.osm.org/{z}/{x}/{y}.png', {
	attribution:
	'&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> \
		contributors'
    }).addTo(mymap); */

    /* 目的地のマーカー */
    L.marker(place[0]).addTo(mymap);
    L.marker(place[1]).addTo(mymap);
    L.marker(place[2]).addTo(mymap);
    L.marker(place[3]).addTo(mymap);
    L.marker(place[4]).addTo(mymap);
    L.marker(place[5]).addTo(mymap);
    var m1 = L.marker(place[6]).addTo(mymap);
    var m2 = L.marker(place[7]).addTo(mymap);
    var m3 = L.marker(place[8]).addTo(mymap);
   
    var pkey = Math.floor(Math.random()*6);
    
    var count = 3;
    document.getElementById("point").textContent = count;
    
    /* 移動するマーカー */
    var gpsmarker = L.marker(center).addTo(mymap);
    gpsmarker.bindPopup("STARTおしてね").openPopup();

    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("title").textContent = "stop";
	    gpsmarker.setPopupContent("停めました");
	}
	watchId = null;
    }
    function tryWatchGPS() {
	stopGPS();		// 二重で動かないように注意する
	watchId = navigator.geolocation.watchPosition(
	    onSuccess, onError,{
		maximumAge: 0, timeout: 3000, enableHighAccuracy: true});
	document.getElementById("title").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.8943 && latlng.lat <= 38.8944) && (latlng.lng >= 139.8195 && latlng.lng <= 139.8196)) {
	    var pmarker = 0;
	} else if ((latlng.lat >= 38.8937 && latlng.lat <= 38.8938) && (latlng.lng >= 139.8194 && latlng.lng <= 139.8195)) {
	    pmarker = 1;
	} else if ((latlng.lat >= 38.8931 && latlng.lat <= 38.8932) && (latlng.lng >= 139.8194 && latlng.lng <= 139.8195)) {
	    pmarker = 2;
	} else if ((latlng.lat >= 38.8924 && latlng.lat <= 38.8925) && (latlng.lng >= 139.8193 && latlng.lng <= 139.8194)) {
	    pmarker = 3;
	} else if ((latlng.lat >= 38.8935 && latlng.lat <= 38.8936) && (latlng.lng >= 139.8189 && latlng.lng <= 139.8190)) {
	    pmarker = 4;
	} else if ((latlng.lat >= 38.8929 && latlng.lat <= 38.8930) && (latlng.lng >= 139.8188 && latlng.lng <= 139.8189)) {
	    pmarker = 5;
	} else if ((latlng.lat >= 38.8922 && latlng.lat <= 38.8923) && (latlng.lng >= 139.8190 && latlng.lng <= 139.8191)) {
	    pmarker = 6;
	} else if ((latlng.lat >= 38.8927 && latlng.lat <= 38.8928) && (latlng.lng >= 139.8193 && latlng.lng <= 139.8194)) {
	    pmarker = 7;
	} else if ((latlng.lat >= 38.8941 && latlng.lat <= 38.8942) && (latlng.lng >= 139.8192 && latlng.lng <= 139.8193)) {
	    pmarker = 8;
	} else {
	    pmarker = 9;
	}

	if (pmarker == pkey) {
	    document.getElementById("title").textContent = "鍵を発見!";
	} else if (6 <= pmarker && pmarker <= 8 ) {
	    count += 1;
	    document.getElementById("title").textContent = "ポイントゲット";
	    document.getElementById("point").textContent = count;
	} else if (pmarker == 9) {
	    document.getElementById("title").textContent = "さらにマーカーに近づいてください";
	} else {
	    count -= 1;
	    document.getElementById("title").textContent = "ここにはない...";
	    document.getElementById("point").textContent = count;
	}
    }
    function onError(err) {
	restN = "あと"+(--nTrial)+"回試行します。";
	gpsmarker.setPopupContent("捕捉失敗:"+restN).openPopup();
	if (nTrial <= 0) {
	    navigator.geolocation.clearWatch(watchId);
	}
    }
    // STARTボタンに開始を仕込む
    document.getElementById("start").addEventListener("click", tryWatchGPS);
    // STOPボタンに停止を仕込む
    document.getElementById("stop").addEventListener("click", stopGPS);
}, false);