-
Notifications
You must be signed in to change notification settings - Fork 0
/
memory.js
148 lines (120 loc) · 3.37 KB
/
memory.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
/*
* CS 22 A - JavaScript for Programmers
* Memory Matching Game - Template
*/
'use strict';
var sources = [
{
file: 'circle.gif',
alt: 'red circle'
},
{
file: 'square.gif',
alt: 'green square'
},
{
file: 'rectangle.gif',
alt: 'pink rectangle'
},
{
file: 'oval.gif',
alt: 'purple oval'
},
{
file: 'triangle.gif',
alt: 'white triangle'
},
{
file: 'arrow.gif',
alt: 'teal arrow'
},
{
file: 'diamond.gif',
alt: 'yellow diamond'
},
{
file: 'octagon.gif',
alt: 'blue octagon'
},
];
// The method below may be called on any array
// to shuffle it in place.
Array.prototype.shuffle = function () {
var i = this.length;
var j, temp;
if (i === 0) return this;
while (--i) {
j = Math.floor(Math.random() * (i + 1));
// swap the two array elements
temp = this[i];
this[i] = this[j];
this[j] = temp;
}
return this;
}
var deck = [0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7];
function objCreator() {
deck.shuffle();
for(var i = 0; i<deck.length; i++){
this["card_" + i] = deck[i];
}
}
var shuffledDeckObj = new objCreator();
var flipped = null
var firstCard, secondCard;
var matchCounter = 0
var flip = function(event){ // event handler func
for(var key in shuffledDeckObj){ //cycling through the randomized object
//EVERY CLICK WILL REVEAL THE CARD
if(event.target.id === key && event.target.alt=="back"){
//only cards that have not been flipped will apply
event.target.src = sources[shuffledDeckObj[key]].file;
event.target.alt = sources[shuffledDeckObj[key]].alt;
//SECOND CARD CLICK
if(flipped){ // a card has already been flipped
secondCard = event.target; //this click is a second card
console.log("The second card is a " + secondCard.alt);
flipped = null;
}
//FIRST CARD CLICK
else if(!flipped){ // if the flipped var is null; this click is a first card
firstCard = event.target;
console.log("The First Card is a " + firstCard.alt);
flipped = true;
}
//MATCH
if(firstCard.src === secondCard.src){
console.log("We have a match!");
firstCard.className = "matched";
secondCard.className = "matched";
flipped = null;
firstCard = null;
secondCard = undefined;
matchCounter++;
//WINNING CONDITION
if(matchCounter === sources.length){
setTimeout(function(){
document.getElementById('board').className = "win";
document.getElementById('message').innerHTML = "All Matched";
},1000);
}
}
//NOT A MATCH
else{
console.log ("Not a match");
document.getElementById('board').removeEventListener('click', flip, false);
setTimeout(function(){
firstCard.src = "back.gif";
secondCard.src ="back.gif";
firstCard.alt = "back";
secondCard.alt = "back";
flipped = null;
firstCard = null;
secondCard = null;
document.getElementById('board').addEventListener('click', flip, false);
},1000);
}
}
}
}
document.getElementById('board').addEventListener('click', flip, false);