false / if ꡬ문 / && μ°μ°μ / λΉ μ€λΈμ νΈ / class / μ½λ°± ν¨μ
λΉκ·Ό ν΄λ¦ κ²μ ꡬν μ€
λλ¦Όμ½λ© μ νλΈ 'μλ°μ€ν¬λ¦½νΈ κΈ°λ³Έ 1 ~ 4νΈ'
λλ¦Όμ½λ© 'νλ‘ νΈμλ νμ λΈλΌμ°μ 101' κ°μ
λλ¦Όμ½λ© μ νλΈ μλ°μ€ν¬λ¦½νΈ κΈ°λ³Έ (3 ~ 4νΈ) μ°Έκ³
let obj = { // objκ° κ°μ κ°μ§λ―λ‘
name: 'ellie'
};
if (obj) { // trueμ΄κΈ° λλ¬Έμ
console.log(obj.name); // console μ°½μ ellieκ° μΆλ ₯λ¨
}
// π‘ κ·Έλ¬λ μμ²λΌ μ°λ κ²λ³΄λ€ μλμ²λΌ μ°λ κ² λ μ’λ€
obj && console.log(obj.name); // λ§μ°¬κ°μ§λ‘ ellieκ° μΆλ ₯λ¨
let obj = {}; // λ³μ objμ λΉ μ€λΈμ νΈλλΌλ κ°μ ν λΉλ μν
if (obj) { // λΉ μ€λΈμ νΈλ κ·Έ μμ²΄λ‘ trueμ΄κΈ° λλ¬Έμ
console.log(obj.name); // console μ°½μ undefinedκ° 'μΆλ ₯λ¨'
}
obj && console.log(obj.name); // λ§μ°¬κ°μ§λ‘ undefinedκ° μΆλ ₯λ¨
let obj; // λ³μ objμ μ΄λ€ κ°λ ν λΉλμ§ μμκΈ°μ undefined
if (obj) { // undefinedλ falseμ΄λ―λ‘
console.log(obj.name); // console.logκ° μ€νλμ§ μμ console μ°½μ μ무κ²λ 'μΆλ ₯λμ§ μμ'
}
obj && console.log(obj.name); // λ§μ°¬κ°μ§λ‘ μ무κ²λ μΆλ ₯λμ§ μμ
// class μ μΈ
class Counter {
constructor () {
this.counter = 0;
}
increase () {
this.counter++;
console.log(this.counter);
// counter λ³μκ° 5μ λ°°μμΌ λλ§λ€ console μ°½μ 'λ©λ‘±' μΆλ ₯
if (this.counter % 5 === 0) {
console.log('λ©λ‘±');
}
}
}
// CounterλΌλ classλ₯Ό μ΄μ©ν΄ coolCounterλΌλ κ°μ²΄λ₯Ό λ§λ¦
const coolCounter = new Counter();
coolCounter.increase(); // 1
coolCounter.increase(); // 2
coolCounter.increase(); // 3
coolCounter.increase(); // 4
coolCounter.increase();
// 5
// λ©λ‘±
μ΄λ κ² μ°λ©΄ if κ΅¬λ¬Έμ΄ class μμ λ€μ΄κ° μμ΄μ μμ μ΄ μ΄λ ΅λ€.
μ΄μ κ°μ κ²½μ°μ μ½λ°± ν¨μ
(λ€λ₯Έ ν¨μμ μΈμλ‘ λ€μ΄κ°λ ν¨μ)λ₯Ό μ΄μ©ν μ μλ€.
class Counter {
constructor () {
this.counter = 0;
}
// increase λ©μλμ μΈμλ‘ ν¨μλ₯Ό λ£μ΄μ€
increase (runIf5Times) {
this.counter++;
console.log(this.counter);
if (this.counter % 5 === 0) {
runIf5Times(); // console.log('λ©λ‘±'); λμ μ¨μ€
}
}
}
const coolCounter = new Counter();
// increase λ©μλμ μΈμλ‘ printSomething ν¨μλ₯Ό λ£μ΄μ€
function printSomething () {
console.log('λ©λ‘±');
}
coolCounter.increase(printSomething);
coolCounter.increase(printSomething);
coolCounter.increase(printSomething);
coolCounter.increase(printSomething);
coolCounter.increase(printSomething);
// μμ κ°μ κ²°κ³Όκ° λ¬λ€
μ½λ°± ν¨μμλ μΈμ
λ₯Ό μ λ¬ν μ μλ€.
class Counter {
constructor () {
this.counter = 0;
}
increase (runIf5Times) {
this.counter++;
console.log(this.counter);
if (this.counter % 5 === 0) {
runIf5Times(this.counter); // this.counterλ₯Ό μ¨μ€
}
}
}
const coolCounter = new Counter();
function printSomething (num) { // μ½λ°± ν¨μμ μΈμλ₯Ό λ£μ΄μ€
console.log(`λ©λ‘± ${num}`);
}
coolCounter.increase(printSomething); // 1
coolCounter.increase(printSomething); // 2
coolCounter.increase(printSomething); // 3
coolCounter.increase(printSomething); // 4
coolCounter.increase(printSomething);
// 5
// λ©λ‘± 5
classμ 미리 μ μν΄λλ κ² μλκΈ° λλ¬Έμ κ·Έλκ·Έλ λ€λ₯Έ μ½λ°± ν¨μ
λ₯Ό λ§λ€μ΄ μΈμλ‘ μ ν΄μ€μΌλ‘μ¨ λ€μν κΈ°λ₯μ μνν μ μλ€.
class Counter {
constructor () {
this.counter = 0;
}
increase (runIf5Times) {
this.counter++;
console.log(this.counter);
if (this.counter % 5 === 0) {
runIf5Times(this.counter);
}
}
}
const coolCounter = new Counter();
// alertNumμ΄λΌλ μ½λ°± ν¨μλ₯Ό μλ‘ λ§λ¦
function alertNum (num) {
alert(`μ°μ ${num}`);
}
coolCounter.increase(printSomething);
coolCounter.increase(printSomething);
coolCounter.increase(printSomething);
coolCounter.increase(printSomething);
coolCounter.increase(alertNum);
κ·Έλ¬λ μ΄λ κ² νλ©΄ λ§€λ² coolCounter κ°μ²΄μ increase λ©μλμ μ½λ°± ν¨μλ₯Ό μ¨μ€μΌ ν΄μ λ²κ±°λ‘λ€.
μ΄ λ¬Έμ λ μ μ΄μ classλ‘ κ°μ²΄λ₯Ό λ§λ€ λ μμ±μ(coustructor) ν¨μ
μ μνλ μ½λ°± ν¨μλ₯Ό μ λ¬
ν¨μΌλ‘μ¨ ν΄κ²°ν μ μλ€.
class Counter {
constructor (runEveryFiveTimes) { // 1. μμ±μ ν¨μμ 맀κ°λ³μλ₯Ό μ μ΄μ€
this.counter = 0;
this.callBack = runEveryFiveTimes; // 2. κ°μ²΄μ callBackμ΄λ μμ±μ 맀κ°λ³μλ₯Ό ν λΉν¨
}
increase () {
this.counter++;
console.log(this.counter);
if (this.counter % 5 === 0) {
this.callBack(this.counter);
// 5. this.callBackμ ν λΉλμ΄ μλ printSomething ν¨μλ₯Ό νΈμΆνλΌλ λ»
// 6. μ΄ ν¨μκ° μ€νλ λλ this.counterκ° μΈμλ‘ λ€μ΄κ°
}
}
}
// 3. printSomethingμ΄λ μ½λ°± ν¨μλ₯Ό μ μΈν¨
function printSomething (num) {
console.log(`μ°μ ${num}`);
}
const printCounter = new Counter(printSomething);
// 4. κ·Έ 맀κ°λ³μλ printSomethingμ΄λ κ²μΈλ°, μ΄λ μμμ μ μνλ€μνΌ ν¨μμ
coolCounter.increase();
coolCounter.increase();
coolCounter.increase();
coolCounter.increase();
coolCounter.increase();
// 7. coolCounter κ°μ²΄μ increase λ©μλλ₯Ό μ€νν΄ this.counterκ° 5μ λ°°μκ° λλ©΄
// κ·Έλμ this.counterλ₯Ό μΈμλ‘ κ°μ§λ printSomething ν¨μκ° μ€νλ¨
// 8. alertNumμ΄λΌλ λ λ€λ₯Έ μ½λ°± ν¨μλ₯Ό μ μΈν΄ κ°μ μμλ₯Ό κ±°μΉ μ μμ
function alertNum (num) {
alert(`μ°μ ${num}`);
}
// π‘ CounterλΌλ νλμ classλ₯Ό μ΄μ©ν΄ μλ‘ λ€λ₯Έ κΈ°λ₯μ μννλ λ€μν κ°μ²΄λ₯Ό λ§λ€ μ μλ€
// β classμ μ¬μ¬μ© κ°λ₯μ± β
const alertCounter = new Counter(alertNum);
coolCounter2.increase();
coolCounter2.increase();
coolCounter2.increase();
coolCounter2.increase();
coolCounter2.increase();
μμ κ²½μ°μλ CounterλΌλ classλ₯Ό μ΄μ©ν΄ coolCounterλΌλ κ°μ²΄λ₯Ό λ§λ€ λ λ°λ‘ μ½λ°± ν¨μλ₯Ό λ±λ‘ν΄μ€ κ²½μ°μ΄λ€.
κ·Έλ¬λ, λ§μ½ μ½λ°± ν¨μλ₯Ό λ±λ‘ν΄μ£Όμ§ μμλ€λ©΄ this.callBackμ undefined κ°μ κ°κ² λλ€.
μ΄λ κ² λλ©΄ μμ if ꡬ문μμ ν¨μκ° μλ this.callBackμ, ν¨μλ₯Ό νΈμΆνλ―μ΄ νΈμΆν΄λ²λ¦° κ²μ΄ λμ΄, this.callBackμ ν¨μκ° μλλΌλ typeErrorκ° λ¨κ² λλ€.
λ°λΌμ, μ΄λ° μλ¬μ λ°μμ λ§κΈ° μν΄μλ λ±λ‘λ μ½λ°± ν¨μκ° μλμ§ μλμ§(this.callBackμ΄ undefinedμΈμ§ μλμ§)λ₯Ό νμΈν ν μ μμΌ λλ§ μ½λ°± ν¨μλ₯Ό λΆλ₯΄λλ‘ ν΄μΌ νλ€.
μ΄λ₯Ό μν΄ increase() λ©μλμ μ½λ λΈλμ μλμ κ°μ΄ μμ ν΄μ€ μ μλ€.
increase() {
this.counter++;
console.log(this.counter);
if (this.callBack) {
this.counter % 5 === 0 && this.callBack(this.counter);
}
μ΄κΈ° νλ©΄μ 보μ¬μΌ ν κ²λ€
1) κ²μ μμ λ²νΌ
2) νμ΄λ¨Έ (0:0μ΄λΌκ³ μ ν μμ)
3) ν΄λ¦ κ°λ₯ νμ (0μ΄λΌκ³ μ ν μμ)
κ²μ μμ λ²νΌμ ν΄λ¦νλ©΄
1) νλ μμ λΉκ·Ό 10κ°κ³Ό λ²λ 7λ§λ¦¬κ° λλ€ν μμΉμ λ°°μΉλμ΄μΌ νλ€.
2) νμ΄λ¨Έκ° μλν΄μΌ νλ€. (10μ΄λΆν° μμ)
3) ν΄λ¦ κ°λ₯ νμκ° 10μΌλ‘ λ°λμ΄μΌ νλ€.
4) bg.mp3 λ°°κ²½μμ΄ μ¬μλμ΄μΌ νλ€.
5) κ²μ μμ λ²νΌ μμ μμ΄μ½μ΄ μ€μ§ μμ΄μ½μΌλ‘ λ°λμ΄μΌ νλ€.
λΉκ·Όμ ν΄λ¦νλ©΄
1) carrot_pull.mp3 ν¨κ³Όμμ΄ λ€λ €μΌ νλ€.
2) ν΄λ¦ κ°λ₯ νμκ° 1μ© μ€μ΄λ€μ΄μΌ νλ€.
3) ν΄λ¦λ λΉκ·Όμ΄ νλ©΄μμ μ¬λΌμ ΈμΌ νλ€.
λ²λ λ₯Ό ν΄λ¦νλ©΄
1) bg.mp3 λ°°κ²½μμ΄ λ©μΆ°μΌ νλ€.
2) bug_pull.mp3 ν¨κ³Όμμ΄ λ€λ €μΌ νλ€.
3) νμ΄λ¨Έκ° λ©μΆ°μΌ νλ€.
4) κ²μ μμ λ²νΌμ΄ μμ΄μ ΈμΌ νλ€.
5) YOU LOST 문ꡬμ ν¨κ» μ¬μμ λ²νΌμ΄ λ μΌ νλ€.
μ ν μκ° λ΄μ λͺ¨λ λΉκ·Όμ ν΄λ¦νλ©΄
1) bg.mp3 λ°°κ²½μμ΄ λ©μΆ°μΌ νλ€.
2) game_win.mp3 μμ μ΄ μ¬μλμ΄μΌ νλ€.
3) νμ΄λ¨Έκ° λ©μΆ°μΌ νλ€.
4) κ²μ μμ λ²νΌμ΄ μμ΄μ ΈμΌ νλ€.
5) YOU WON 문ꡬμ ν¨κ» μ¬μμ λ²νΌμ΄ λ μΌ νλ€.
μ ν μκ° λ΄μ λͺ¨λ λΉκ·Όμ ν΄λ¦νμ§ λͺ»νλ©΄
1) bg.mp3 λ°°κ²½μμ΄ λ©μΆ°μΌ νλ€.
2) κ²μ μμ λ²νΌμ΄ μμ΄μ ΈμΌ νλ€.
3) YOU LOST 문ꡬμ ν¨κ» μ¬μμ λ²νΌμ΄ λ μΌ νλ€.
κ²μ μ€μ§ λ²νΌμ ν΄λ¦νλ©΄
1) bg.mp3 λ°°κ²½μμ΄ λ©μΆ°μΌ νλ€.
2) alert.wav ν¨κ³Όμμ΄ λ€λ €μΌ νλ€.
3) νμ΄λ¨Έκ° λ©μΆ°μΌ νλ€.
4) κ²μ μμ λ²νΌμ΄ μμ΄μ ΈμΌ νλ€.
5) REPLAY 문ꡬμ ν¨κ» μ¬μμ λ²νΌμ΄ λ μΌ νλ€.
μ¬μμ λ²νΌμ ν΄λ¦νλ©΄
1) μ΄μ κ²μμ λΉκ·Όκ³Ό λ²λ κ° μμ΄μ ΈμΌ νλ€.
2) replay β μ°½μ΄ μμ΄μ ΈμΌ νλ€.
3) λ€μ2.
κ° μΌμ΄λμΌ νλ€. - (1), (3)λ§
4) νμ΄λ¨Έκ° 'λ€μ μ²μλΆν°' μλν΄μΌ νλ€.
5) bg.mp3 λ°°κ²½μμ΄ 'λ€μ μ²μλΆν°' μ¬μλμ΄μΌ νλ€.
6) κ²μ μμ λ²νΌμ΄ λ€μ 보μ¬μΌ νλ€.
μ΄κΈ° νλ©΄μ 보μ¬μΌ ν κ²λ€
- κ²μ μμ λ²νΌ
- νμ΄λ¨Έ (00:00μ΄λΌκ³ μ ν μμ)
- ν΄λ¦ κ°λ₯ νμ (0μ΄λΌκ³ μ ν μμ)
π HTML λ§ν¬μ
μΆν μμ
<html>
<body>
<div class="setting">
<button class="setting-startBtn" type="button"><i class="fas fa-play"></i></button>
<div class="setting-timer">00:00</div>
<div class="setting-limit">0</div>
</div>
<div class="field"></div>
</body>
</html>
π CSS μ€νμΌλ§
μΆν μμ
background: color image_url attatchment position / size;
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
button {
border: 5px solid black;
border-radius: 20px;
background-color: wheat;
width: 100px;
height: 100px;
}
html {
width: 100%;
height: 100%;
}
body {
background: url("img/background.png") no-repeat center / cover;
}
.setting {
height: 450px;
}
.setting-startBtn {
display: block;
margin: 15px auto;
}
.setting-timer {
border: 5px solid black;
border-radius: 20px;
background-color: white;
width: 260px;
height: 80px;
margin: 15px auto;
text-align: center;
font-size: 2.5em;
line-height: 1.3;
}
.fas {
font-size: 40px;
}
.setting-limit {
border: 4px solid black;
border-radius: 50%;
background-color: orange;
width: 100px;
height: 100px;
margin: 10px auto;
text-align: center;
line-height: 1.5;
font-size: 3em;
font-weight: bold;
}
.field {
height: calc(100vh - 450px);
}
κ²μ μμ λ²νΌμ ν΄λ¦νλ©΄
- νλ μμ λΉκ·Όκ³Ό λ²λ λ€μ΄ λλ€ν μμΉμ λ°°μΉλμ΄μΌ νλ€.
- νμ΄λ¨Έκ° μλν΄μΌ νλ€. (10μ΄λΆν° μμ)
- ν΄λ¦ κ°λ₯ νμκ° 10μΌλ‘ λ°λμ΄μΌ νλ€.
- bg.mp3 λ°°κ²½μμ΄ μ¬μλμ΄μΌ νλ€.
- κ²μ μμ λ²νΌ μμ μμ΄μ½μ΄ μ€μ§ μμ΄μ½μΌλ‘ λ°λμ΄μΌ νλ€.
(μμ§ κ΅¬ν μ€)
π JavaScript μμ±
setInterval()
μ΄μ©ν΄μ νμ΄λ¨Έ λ§λ€κΈ°
const startBtn = document.querySelector('.setting-startBtn');
const timer = document.querySelector('.setting-timer');
const clickLimit = document.querySelector('.setting-limit');
// κ²μ μμ λ²νΌμ ν΄λ¦νλ©΄
let time = 10;
startBtn.addEventListener('click', function startTimer () {
// νμ΄λ¨Έκ° μλν΄μΌ νλ€.
const decreNum = setInterval(function () {
const second = time % 60;
timer.innerHTML = `0:${second}`;
time--;
if (time < 0) {
clearInterval(decreNum);
}
}, 1000);
// ν΄λ¦ κ°λ₯ νμκ° 10μΌλ‘ λ°λμ΄μΌ νλ€.
clickLimit.innerHTML = 10;
});