diff --git a/map/domon/ge-mutest.js b/map/domon/ge-mutest.js index 9142583..a81456a 100644 --- a/map/domon/ge-mutest.js +++ b/map/domon/ge-mutest.js @@ -1,154 +1,147 @@ var mymap = L.map('mymap').setView([38.898913, 139.818540], 16); - - var gsiLayer = L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', { - attribution: '国土地理院 (地理院タイル)' - }); - - var osmLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { - attribution: '© OpenStreetMap contributors' - }); - - gsiLayer.addTo(mymap); - - var baseMaps = { - "国土地理院": gsiLayer, - "OpenStreetMap": osmLayer - }; - - L.control.layers(baseMaps).addTo(mymap); - - var markers = [ - L.marker([38.899003, 139.818406]), - L.marker([38.903117, 139.816343]), - L.marker([38.902537, 139.820163]), - L.marker([38.894325, 139.819551]), - L.marker([38.904011, 139.818709]) - ]; - - var currentDestination = null; - var visitedDestinations = new Set(); - var totalDestinations = markers.length; - - function setRandomDestination() { - if (currentDestination) { - mymap.removeLayer(currentDestination); - } - let availableMarkers = markers.filter(marker => !visitedDestinations.has(marker)); - if (availableMarkers.length === 0) { + +var gsiLayer = L.tileLayer('https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png', { + attribution: '国土地理院 (地理院タイル)' +}); + +var osmLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { + attribution: '© OpenStreetMap contributors' +}); + +gsiLayer.addTo(mymap); + +var baseMaps = { + "国土地理院": gsiLayer, + "OpenStreetMap": osmLayer +}; + +L.control.layers(baseMaps).addTo(mymap); + +var markers = [ + L.marker([38.899003, 139.818406]), + L.marker([38.903117, 139.816343]), + L.marker([38.902537, 139.820163]), + L.marker([38.894325, 139.819551]), + L.marker([38.904011, 139.818709]) +]; + +var currentDestination = null; +var visitedDestinations = new Set(); +var totalDestinations = markers.length; + +function setRandomDestination() { + if (currentDestination) { + mymap.removeLayer(currentDestination); + } + let availableMarkers = markers.filter(marker => !visitedDestinations.has(marker)); + if (availableMarkers.length === 0) { + alert('おめでとうございます!全ての目的地を制覇しました!ゲームクリアです!'); + resetGame(); + return; + } + currentDestination = availableMarkers[Math.floor(Math.random() * availableMarkers.length)]; + currentDestination.addTo(mymap); + document.getElementById('game-info').textContent = `新しい目的地が設定されました!目的地を探してクリックしてください。(${visitedDestinations.size + 1}/${totalDestinations})`; +} + +markers.forEach(marker => { + marker.on('click', function(e) { + var clickedLat = e.latlng.lat.toFixed(6); + var clickedLng = e.latlng.lng.toFixed(6); + document.getElementById('game-info').textContent = `クリックした位置: (${clickedLat}, ${clickedLng})`; + if (marker === currentDestination) { + document.getElementById('janken-game').style.display = 'block'; + enableJankenButtons(true); + document.getElementById('result').textContent = ''; + document.getElementById('reset-button').style.display = 'none'; + } else { + document.getElementById('game-info').textContent += ' - この場所は目的地ではありません。'; + } + L.DomEvent.stopPropagation(e); + }); +}); + +mymap.on('click', function(e) { + if (e.originalEvent.target.nodeName !== 'IMG') { + var clickedLat = e.latlng.lat.toFixed(6); + var clickedLng = e.latlng.lng.toFixed(6); + document.getElementById('game-info').textContent = `クリックした位置: (${clickedLat}, ${clickedLng})`; + document.getElementById('janken-game').style.display = 'none'; + enableJankenButtons(false); + } +}); + +function enableJankenButtons(enable) { + const buttons = document.querySelectorAll('#janken-game button:not(#reset-button)'); + buttons.forEach(button => { + button.disabled = !enable; + }); +} + +const choices = ['rock', 'paper', 'scissors']; +choices.forEach(choice => { + document.getElementById(choice).addEventListener('click', () => { + playJanken(choice); + enableJankenButtons(false); + }); +}); + +function playJanken(playerChoice) { + const computerChoice = choices[Math.floor(Math.random() * 3)]; + const outcome = getOutcome(playerChoice, computerChoice); + document.getElementById('result').textContent = `あなた: ${translateChoice(playerChoice)}, コンピュータ: ${translateChoice(computerChoice)}. ${outcome}`; + + if (outcome.includes('あなたの勝ち')) { + visitedDestinations.add(currentDestination); + if (visitedDestinations.size === totalDestinations) { + setTimeout(() => { alert('おめでとうございます!全ての目的地を制覇しました!ゲームクリアです!'); resetGame(); - return; - } - currentDestination = availableMarkers[Math.floor(Math.random() * availableMarkers.length)]; - currentDestination.addTo(mymap); - document.getElementById('game-info').textContent = `新しい目的地が設定されました!目的地を探してクリックしてください。(${visitedDestinations.size + 1}/${totalDestinations})`; - } - - markers.forEach(marker => { - marker.on('click', function(e) { - var clickedLat = e.latlng.lat.toFixed(6); - var clickedLng = e.latlng.lng.toFixed(6); - document.getElementById('game-info').textContent = `クリックした位置: (${clickedLat}, ${clickedLng})`; - if (marker === currentDestination) { - document.getElementById('janken-game').style.display = 'block'; - enableJankenButtons(true); - document.getElementById('result').textContent = ''; - } else { - document.getElementById('game-info').textContent += ' - この場所は目的地ではありません。'; - } - L.DomEvent.stopPropagation(e); - }); - }); - - mymap.on('click', function(e) { - if (e.originalEvent.target.nodeName !== 'IMG') { - var clickedLat = e.latlng.lat.toFixed(6); - var clickedLng = e.latlng.lng.toFixed(6); - document.getElementById('game-info').textContent = `クリックした位置: (${clickedLat}, ${clickedLng})`; + }, 2000); + } else { + setTimeout(() => { + setRandomDestination(); document.getElementById('janken-game').style.display = 'none'; - enableJankenButtons(false); - } - }); - - function enableJankenButtons(enable) { - const buttons = document.querySelectorAll('#janken-game button'); - buttons.forEach(button => { - button.disabled = !enable; - }); + }, 2000); } - - const choices = ['rock', 'paper', 'scissors']; - choices.forEach(choice => { - document.getElementById(choice).addEventListener('click', () => { - playJanken(choice); - enableJankenButtons(false); - }); - }); - - function playJanken(playerChoice) { - const computerChoice = choices[Math.floor(Math.random() * 3)]; - const outcome = getOutcome(playerChoice, computerChoice); - document.getElementById('result').textContent = `あなた: ${translateChoice(playerChoice)}, コンピュータ: ${translateChoice(computerChoice)}. ${outcome}`; - - if (outcome.includes('あなたの勝ち')) { - visitedDestinations.add(currentDestination); - if (visitedDestinations.size === totalDestinations) { - setTimeout(() => { - alert('おめでとうございます!全ての目的地を制覇しました!ゲームクリアです!'); - resetGame(); - }, 2000); - } else { - setTimeout(() => { - setRandomDestination(); - document.getElementById('janken-game').style.display = 'none'; - }, 2000); - } - } else { - setTimeout(() => { - document.getElementById('janken-game').style.display = 'none'; - }, 2000); - } - } - - function getOutcome(player, computer) { - if (player === computer) return '引き分け!'; - if ( - (player === 'rock' && computer === 'scissors') || - (player === 'paper' && computer === 'rock') || - (player === 'scissors' && computer === 'paper') - ) { - return 'あなたの勝ち!おめでとう!🎉 2秒後に新しい目的地が設定されます。'; - } - - const losingMessages = [ - 'コンピュータの勝ち!次の目的地に向かってください。', - '今回は負けちゃったね。次の目的地で頑張ろう!', - '負けは次への成長のチャンス!次の目的地に進もう!', - '今回は運が悪かった。次の目的地で挽回しよう!', - '負けても大丈夫。次の目的地でリベンジだ!' - ]; - - return losingMessages[Math.floor(Math.random() * losingMessages.length)]; - } - - function translateChoice(choice) { - const translations = { rock: 'グー', paper: 'パー', scissors: 'チョキ' }; - return translations[choice]; - } - - document.getElementById('reset-button').addEventListener('click', resetJankenGame); - - function resetJankenGame() { - document.getElementById('result').textContent = ''; - enableJankenButtons(true); - } - - function resetGame() { - visitedDestinations.clear(); - setRandomDestination(); - document.getElementById('janken-game').style.display = 'none'; - document.getElementById('result').textContent = ''; - } - - // 初期化 - resetGame(); + } else { + document.getElementById('reset-button').style.display = 'inline-block'; + } +} + +function getOutcome(player, computer) { + if (player === computer) return '引き分け!もう一度チャレンジしてください。'; + if ( + (player === 'rock' && computer === 'scissors') || + (player === 'paper' && computer === 'rock') || + (player === 'scissors' && computer === 'paper') + ) { + return 'あなたの勝ち!おめでとう!🎉 2秒後に新しい目的地が設定されます。'; + } + + return 'コンピュータの勝ち!もう一度チャレンジしてください。'; +} + +function translateChoice(choice) { + const translations = { rock: 'グー', paper: 'パー', scissors: 'チョキ' }; + return translations[choice]; +} + +document.getElementById('reset-button').addEventListener('click', resetJankenGame); + +function resetJankenGame() { + document.getElementById('result').textContent = ''; + enableJankenButtons(true); + document.getElementById('reset-button').style.display = 'none'; +} + +function resetGame() { + visitedDestinations.clear(); + setRandomDestination(); + document.getElementById('janken-game').style.display = 'none'; + document.getElementById('result').textContent = ''; + document.getElementById('reset-button').style.display = 'none'; +} + +// 初期化 +resetGame();