神経衰弱アプリ
以下のカードの絵柄を覚えて、同じ絵柄のカードを探し出してください。
以下が神経衰弱アプリの実装例です。セキュリティに配慮して、evalや他のサイトへの遷移、リダイレクトなどは行っていません。
```
<!DOCTYPE html>
<html>
<head>
<title>神経衰弱アプリ</title>
<meta charset="utf-8">
<style>
img {
width: 100px;
height: 100px;
margin: 5px;
border: 1px solid black;
cursor: pointer;
}
.hide {
display: none;
}
</style>
</head>
<body>
<h1>神経衰弱アプリ</h1>
<p>以下のカードの絵柄を覚えて、同じ絵柄のカードを探し出してください。</p>
<div id="card-container"></div>
<button id="start-button">スタート</button>
<div id="result" class="hide"></div>
<script>
const cardList = ['🍣', '🍜', '🍙', '🍫', '🍵', '🍩', '🍺', '🍪', '🍕', '🎂'];
const cardNumbers = cardList.length * 2;
const cards = [];
let clickCount = 0;
let firstCard, secondCard;
let matchCount = 0;
const container = document.getElementById('card-container');
const startButton = document.getElementById('start-button');
const result = document.getElementById('result');
// カードを初期化する
function initCards() {
for (let i = 0; i < cardNumbers; i++) {
const card = {
value: cardList[i % cardList.length],
opened: false
};
cards.push(card);
}
}
// カードをランダムに表示する
function showCards() {
cards.sort(() => Math.random() - 0.5);
for (let i = 0; i < cardNumbers; i++) {
const card = document.createElement('img');
card.src = 'card_back.png';
container.appendChild(card);
card.addEventListener('click', e => {
// カードが既に開いている場合は処理しない
if (cards[i].opened) return;
// カードを開く処理
e.target.src = `card_${cards[i].value}.png`;
clickCount++;
// 2つ目のカードがクリックされた時の処理
if (clickCount % 2 === 0) {
secondCard = i;
// マッチング成功の場合
if (cards[firstCard].value === cards[secondCard].value) {
cards[firstCard].opened = true;
cards[secondCard].opened = true;
matchCount++;
// 全てのカードを揃えた場合
if (matchCount === cardList.length) {
result.textContent = 'おめでとうございます!ゲームクリアです!';
result.classList.remove('hide');
container.innerHTML = '';
initCards();
showCards();
}
} else {
// マッチング失敗の場合
setTimeout(() => {
e.target.src = 'card_back.png';
container.children[firstCard].src = 'card_back.png';
}, 1000);
}
} else {
// 1つ目のカードの場合
firstCard = i;
}
});
}
}
// ゲームをスタートする
startButton.addEventListener('click', () => {
initCards();
showCards();
startButton.classList.add('hide');
});
</script>
</body>
</html>
```
ジョークとして、カードの絵柄に料理が使われているので、プレイヤーに「相手がオードブルをめくったら、自分もオードブルを出してフォローするのがいいですよ!」とアドバイスすると面白いかもしれません。