TIL
[클라우딩 어플리케이션 엔지니어링 TIL] - 6주차 퍼즐 게임
blackmilktea
2024. 5. 25. 22:21
퍼즐 게임 명세서 기반 실습
1. 메인 페이지
게임 시작 버튼 구현
startButton.addEventListener('click', function () {
// 게임 페이지 show
const gameScreen = document.querySelector('.game-screen')
gameScreen.classList.remove('hide')
// 시작 페이지 hide
const startScreen = document.querySelector('.start-screen')
startScreen.classList.add('hide')
}
2. 게임 페이지
1) 원본 이미지 로드
startButton.addEventListener('click', function () {
...
// 원본 이미지 번호 선택
imageSet = Math.floor(Math.random() * 3) + 1
const originalImage = document.getElementById('originalImage')
originalImage.setAttribute('src', `./data/image${imageSet}/originalImage.png`)
}
2) 조각난 이미지 로드
startButton.addEventListener('click', function () {
...
const uniqueNumber = new Set()
while (uniqueNumber.size < 9) {uniqueNumber.add(Math.ceil(Math.random() * 9))}
imageIndexesArray = [...uniqueNumber]
for (let i = 0; i < 9; i++) {
const div = document.createElement('div')
div.classList.add('image-container')
const img = document.createElement('img')
img.setAttribute('src', `./data/image${imageSet}/image${imageIndexesArray[i]}.jpg`)
div.appendChild(img)
}
}
3) 조각난 이미지로 퍼즐 맞추기
startButton.addEventListener('click', function () {
...
div.addEventListener('click', (event) => {
const currentElement = event.target
// 이전에 선택한 이미지가 없다면
if (!previouslySelecetedElement) {
previouslySelecetedElement = currentElement
previouslySelecetedElement.style.opacity = 0.3
// 선택한 이미지가 있다면
} else {
// 이전에 선택한 이미지와 현재 선택한 이미지가 같을 경우
if (previouslySelecetedElement === currentElement) {
previouslySelecetedElement.style.opacity = 1
previouslySelecetedElement = null
// 이전에 선택한 이미지와 다를 경우
} else {
// 서로 위치 교체
const parent1 = previouslySelecetedElement.parentNode
const parent2 = currentElement.parentNode
parent1.removeChild(previouslySelecetedElement)
parent2.removeChild(currentElement)
parent1.appendChild(currentElement)
parent2.appendChild(previouslySelecetedElement)
previouslySelecetedElement.style.opacity = 1
}
}
})
puzzleContainer.appendChild(div)
}
4) 이미지 교체 버튼 구현
changeImageButton.addEventListener('click', function () {
imageSet = Math.floor(Math.random() * 3) + 1
const originalImage = document.getElementById('originalImage')
originalImage.setAttribute('src', `./data/image${imageSet}/originalImage.png`)
const puzzleImages = document.querySelectorAll('.container img')
puzzleImages.forEach((img, index) => {
img.setAttribute('src', `./data/image${imageSet}/image${imageIndexesArray[index]}.jpg`)
})
})