内存游戏(Memory Game)是一种经典的纸牌游戏,玩家需要翻开两张牌,尝试找到所有匹配的牌对。在HTML和JavaScript中构建内存游戏,通常涉及以下几个基础概念:
以下是一个简单的HTML和JavaScript内存游戏示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Memory Game</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div id="game-board"></div>
<script src="script.js"></script>
</body>
</html>
#game-board {
display: grid;
grid-template-columns: repeat(4, 100px);
gap: 10px;
}
.card {
width: 100px;
height: 100px;
background-color: #ddd;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
cursor: pointer;
}
const gameBoard = document.getElementById('game-board');
const cards = ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'];
let firstCard, secondCard;
// Shuffle the cards
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
}
// Create the game board
function createGameBoard() {
shuffle(cards);
gameBoard.innerHTML = '';
cards.forEach(card => {
const cardElement = document.createElement('div');
cardElement.classList.add('card');
cardElement.dataset.value = card;
cardElement.addEventListener('click', flipCard);
gameBoard.appendChild(cardElement);
});
}
// Flip the card
function flipCard(event) {
const card = event.target;
if (card === firstCard || card === secondCard || card.classList.contains('flipped')) {
return;
}
card.classList.add('flipped');
if (!firstCard) {
firstCard = card;
} else if (!secondCard) {
secondCard = card;
checkForMatch();
}
}
// Check for a match
function checkForMatch() {
if (firstCard.dataset.value === secondCard.dataset.value) {
firstCard.removeEventListener('click', flipCard);
secondCard.removeEventListener('click', flipCard);
firstCard = null;
secondCard = null;
} else {
setTimeout(() => {
firstCard.classList.remove('flipped');
secondCard.classList.remove('flipped');
firstCard = null;
secondCard = null;
}, 1000);
}
}
createGameBoard();
shuffle
函数正确实现,可以使用Fisher-Yates洗牌算法。shuffle
函数。flipCard
函数正确处理翻牌逻辑,避免重复翻牌。checkForMatch
函数正确比较两张牌的值,并在不匹配时正确翻回牌面。通过以上步骤和示例代码,你可以构建一个基本的内存游戏。如果需要增加更多功能或优化,可以在此基础上进行扩展。
领取专属 10元无门槛券
手把手带您无忧上云