こんにちは。ハイナレです!
プログラミングを学ぶなら、本を読むより手を動かして実際に作ってみるのが一番ですよね。
前回、Vue.jsのイベント処理でアラートを出すことに成功した私は、調子に乗って神経衰弱ゲームを作ろうとしています。
ただまだ私には難易度が高かったようで。。。。
まずはjQueryで神経衰弱ゲームを作ってみて、処理の流れを確認をしてみました!
神経衰弱のコード
とりあえず、神経衰弱と呼べるような最低限の機能だけ搭載しました。
↓そして完成したのがこちら↓
- カードを並べる
- 2枚めくるのを1セットとする
- 同じ数値のカードをめくったらカードが赤くなる
本当に最低限の機能だけなので、揃ったカードは残ったまま。揃ったあともクリックもできてしまいます。
コード解説
【HTML】
<ul id="card"></ul>
HTMLは ul タグを用意するだけです。その中に li 要素を追加していきます。
【CSS】
#card{
list-style: none;
}
#card li{
margin: 5px;
width: 30px;
height: 50px;
float: left;
border:solid 1px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
}
CSSは主に li 要素を装飾しています。
list-style: none;
→リストスタイルを無効にしています。
float: left;
→ li 要素を横に並べています。
display: flex;
align-items: center;
justify-content: center;
→上記3行で文字を上下中央に表示しています。左右中央だけなら text-align:center でいいのですが、上下中央の場合は上記の書き方になりますね。
【JavaScript】
var total = 10; //カードの枚数
var isFirst = true; //1枚目か判定
var card1 = ""; //array_cardsのindex(1枚目)
var card2 = ""; //array_cardsのindex(2枚目)
var array_cards = []; //カードに表示する数値を格納する配列
//カードに表示する数値を生成
//array_cards = [1,1,2,2,3,3,4,4,5,5]となる)
for(i=1; i <= total/2; i++) {
array_cards.push(i,i);
}
//array_cards配列の数値をランダムに並び替える
array_cards.sort(function() {
return Math.random() - Math.random();
});
//ulに空のli要素を追加
for(i=0; i < total; i++) {
$("#card").append("<li></li>");
}
//li要素をクリックした際の処理
$("#card li").on("click",function(){
//1枚目の場合は、全li要素のテキストを空にする
if(isFirst){
$("#card li").text("");
}
//li要素のindexを取得
var index = $(this).index();
//li要素のindexと同じindexであるarray_cards配列の値を表示する
$(this).text(array_cards[index]);
if(isFirst){
//1枚目
card1 = index;
isFirst = false;
}else{
//2枚目
card2 = index;
//1枚目と2枚目の値が同じ場合はli要素の背景色を赤にする
if(array_cards[card1] === array_cards[card2]){
$("#card li").eq(card1).css("background-color","red");
$("#card li").eq(card2).css("background-color","red");
}
isFirst = true;
}
});
ここでは下記の流れで処理を記述しています。
(1) カード番号を格納する配列array_cardsを作成
(2) li要素を表示
(3) クリックイベントでめくったカード同士を比較
(4) 一致していたらli要素の背景色を赤く変更
カード番号を格納する配列 array_cards には、最初 array_cards={1,1,2,2,3,3,4,4,5,5} のように同じ数値を2つずつ格納します。そして、
array_cards.sort(function() {
return Math.random() - Math.random();
});
の部分で配列の中身をランダムに並べ替えています。
array_cards[0]の値が1枚目のカードの値、array_cards[1]が2枚目のカード……というふうに対応していくんですねー。
神経衰弱なので、1回目のクリックと2回目のクリックで動作が変わります。
なので isFirst フラグで、1回目のクリックかどうか判定しています。
1回目にクリックしたli要素のインデックスはcard1に格納、2回目にクリックしたli要素のインデックスはcard2に格納し、
if(array_cards[card1] === array_cards[card2]){
$("#card li").eq(card1).css("background-color","red");
$("#card li").eq(card2).css("background-color","red");
}
この部分でカードの値同士を比較、一致したら背景色を赤に変更しています。
そしてまた1回目の処理、2回目の処理、比較……を繰り返していく感じです。
ざっくりした説明でしたが、伝わったでしょうか?
次回の目標
処理の流れを理解したので、次回こそVue.jsで神経衰弱を作りたいですね!
上記のプログラムが私だけではなく、誰かの参考にもなったら嬉しいですねー。