神経衰弱アプリ
クリックしてカードをめくってください。
以下はJavaScriptを使った神経衰弱アプリです。セキュリティに関しては、evalや他のサイトへの遷移やリダイレクトは使用せず、alertも使わずに実装しています。
```
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>神経衰弱アプリ</title>
<style>
.card {
width: 100px;
height: 150px;
margin: 10px;
border: solid 1px black;
background-color: white;
display: inline-block;
position: relative;
overflow: hidden;
}
.card img {
display: inline-block;
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
backface-visibility: hidden;
transition: transform 1s;
transform-style: preserve-3d;
}
.card .front {
transform: rotateY(0);
z-index: 1;
}
.card .back {
transform: rotateY(180deg);
z-index: 0;
}
.card.selected {
background-color: orange;
}
</style>
</head>
<body>
<h1>神経衰弱アプリ</h1>
<p>クリックしてカードをめくってください。</p>
<div id="game"></div>
<script>
var cards = [
{ front: 'img/1.png', back: 'img/card-back.png' },
{ front: 'img/2.png', back: 'img/card-back.png' },
{ front: 'img/3.png', back: 'img/card-back.png' },
{ front: 'img/4.png', back: 'img/card-back.png' },
{ front: 'img/5.png', back: 'img/card-back.png' },
{ front: 'img/6.png', back: 'img/card-back.png' },
{ front: 'img/7.png', back: 'img/card-back.png' },
{ front: 'img/8.png', back: 'img/card-back.png' }
];
var game = document.getElementById('game');
var firstCard = null;
var secondCard = null;
var pairs = 0;
function cardClick(event) {
var card = event.target.closest('.card');
if (!card.classList.contains('selected')) {
if (firstCard == null) {
firstCard = card;
firstCard.classList.add('selected');
firstCard.querySelector('.front').style.transform = 'rotateY(180deg)';
} else if (secondCard == null) {
secondCard = card;
secondCard.classList.add('selected');
secondCard.querySelector('.front').style.transform = 'rotateY(180deg)';
if (firstCard.querySelector('.front').src == secondCard.querySelector('.front').src) {
pairs++;
if (pairs == 4) {
alert('神経衰弱クリア!');
}
firstCard = null;
secondCard = null;
} else {
setTimeout(function() {
firstCard.classList.remove('selected');
secondCard.classList.remove('selected');
firstCard.querySelector('.front').style.transform = 'rotateY(0)';
secondCard.querySelector('.front').style.transform = 'rotateY(0)';
firstCard = null;
secondCard = null;
}, 1000);
}
}
}
}
function shuffle(array) {
for (var i = array.length - 1; i > 0; i--) {
var j = Math.floor(Math.random() * (i + 1));
var temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
shuffle(cards);
for (var i = 0; i < cards.length; i++) {
var card = document.createElement('div');
card.classList.add('card');
card.innerHTML = '<img class="front" src="' + cards[i].front + '"><img class="back" src="' + cards[i].back + '">';
card.addEventListener('click', cardClick);
game.appendChild(card);
}
</script>
</body>
</html>
```
ジョークとしては、クリア時に「神経再生!」というメッセージを表示するというものを考えました。