๊ฐœ๋ฐœ ๐Ÿพ/JavaScript

๋žœ๋ค์ˆซ์ž๋งŒ๋“ค๊ธฐ๊ฒŒ์ž„

JOTOKKI 2019. 11. 20. 12:00
728x90

์ฒซ playground ๊ฒŒ์‹œ๊ธ€์ด๋„ค์š”. 

์•Œ๊ณ ์žˆ๋Š” ์ง€์‹์œผ๋กœ ์ถฉ๋ถ„ํžˆ ์žฌ๋ฐŒ๋Š” ๊ฒƒ๋“ค์„ ๋งŒ๋“ค์–ด๋ณผ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ๋งŒ๋“  ๊ฒŒ์‹œ๊ธ€์ž…๋‹ˆ๋‹ค. 

 

์ตœ์ดˆ๋กœ ๊ฒŒ์‹œํ•˜๊ฒŒ๋  ๊ธ€์€ ๋ฐ”๋กœ ๋žœ๋ค์ˆซ์ž๋งž์ถ”๊ธฐ ๊ฒŒ์ž„์ž…๋‹ˆ๋‹ค.

 

* ๊ฒฐ๊ณผํ™”๋ฉด

๊ฒฐ๊ณผํ™”๋ฉด์„ ๋ณด๊ณ  ์œ ์ถ”ํ•˜์—ฌ ๋จผ์ € ์ง์ ‘ ๋งŒ๋“ค์–ด ๋ณด์‹œ๊ณ  

๋‚˜์ค‘์— ๋น„๊ตํ•ด๋ณด๋Š”๊ฒƒ์„ ์ถ”์ฒœ๋“œ๋ ค์š”. 

์ œ ์ฝ”๋“œ๊ฐ€ ๋˜ฅ์ฝ”๋“œ์ผ์ˆ˜๋„์žˆ์ž–์•„์š”

 

 

* ๊ธฐ๋Šฅ์„ค๊ณ„

๊ฐ„๋‹จํ•˜๊ฒŒ ํ™”๋ฉด, ๊ธฐ๋Šฅ์—์„œ ํ•ด์•ผํ•  ์ผ์„ ๋‚˜์—ดํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

1. ์‹œ์ž‘๋ฒ„ํŠผ ํด๋ฆญ

1-1. ํ™”๋ฉด

- "๋‚ด๊ฐ€์ƒ๊ฐํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋งž์ถฐ ๋ณด์„ธ์š”(1๋ถ€ํ„ฐ 100๊นŒ์ง€)" ๋ฌธ๊ตฌ ์ถœ๋ ฅ

- ์ผ๋ ฅInput, ์ œ์ถœButton, ๊ธฐํšŒcnt(maxCnt)๋ฒˆ ๋‚จ์•˜์–ด์š” ์ถœ๋ ฅ

1-2. ๊ธฐ๋Šฅ

- ๋งž์ถฐ์•ผํ•  ๋žœ๋ค ์ˆซ์ž ์ƒ์„ฑ

- input clear, input disabled=false, input์— focus

- ๊ธฐํšŒcnt(maxCnt) ์ดˆ๊ธฐํ™”

โ€‹

2. ์ œ์ถœ๋ฒ„ํŠผ

2-1. ํ™”๋ฉด

- ๋กœ๊ทธ์ถœ๋ ฅ

( ๋†’์€์ง€ ๋‚ฎ์€์ง€ ์ˆซ์ž ๋น„๊ตํ›„ ์ถœ๋ ฅ , ์˜ˆ: ์ž…๋ ฅ๊ฐ’๋ณด๋‹ค ๋†’์•„์š”, ์ž…๋ ฅ๊ฐ’๋ณด๋‹ค ๋‚ฎ์•„์š” )

- ๊ธฐํšŒ-1 ์ถœ๋ ฅ

2-2. ๊ธฐ๋Šฅ

- ๋งž์ท„๋Š”์ง€, ํ‹€๋ ธ๋Š”์ง€ ๋น„๊ต

- ๊ธฐํšŒ๋ฅผ ๋‹ค์ผ๋Š”์ง€ ์ฒดํฌ

- input clear, input focus

โ€‹

3. ์ข…๋ฃŒ

3-1. ํ™”๋ฉด

- ์‹œ์ž‘๋ฒ„ํŠผ ์™ธ์— ํ™”๋ฉด ์ˆจ๊น€

- ๋กœ๊ทธ์ถœ๋ ฅ ์ค‘์ง€โ€‹ ๋ฐ ์ด๊ฒผ๋Š”์ง€, ์กŒ๋Š”์ง€ ์ถœ๋ ฅ

- ํ•˜๋‹จ์— "์žฌ์‹œ์ž‘", "์ข…๋ฃŒ" ๋ฒ„ํŠผ ์ถœ๋ ฅ

3-2. ๊ธฐ๋Šฅ

- ์‚ฌ์šฉ์ž ์ˆซ์ž ์ž…๋ ฅ ๋ฐฉ์ง€

 

4. ์žฌ์‹œ์ž‘

4-1. ํ™”๋ฉด

- ์‹œ์ž‘๋ฒ„ํŠผ ํด๋ฆญํ–ˆ์„๋•Œ์™€ ๊ฐ™์Œ

4-2. ๊ธฐ๋Šฅ

- ์‹œ์ž‘๋ฒ„ํŠผ ํด๋ฆญํ–ˆ์„๋•Œ์™€ ๊ฐ™์Œ

 

* ๊ฐœ๋ฐœ์‹œ์ž‘

์šฐ์„  ๊ธฐ๋ณธ ํ™”๋ฉด์„ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค. 

- index.html

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
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>๋žœ๋ค์ˆซ์ž๋งž์ถ”๊ธฐ๊ฒŒ์ž„</title>
</head>
<body>
 
    <div class="wrapper">
        <div class="stage01">  // ์ตœ์ดˆํ™”๋ฉด
            <button class="start_btn">์‹œ์ž‘ํ•˜๊ธฐ</button>
        <div>
        <div class="stage02">  // "์‹œ์ž‘ํ•˜๊ธฐ" ํด๋ฆญ ํ›„ ์ถœ๋ ฅ
            <p class="gameStartText">๋‚ด๊ฐ€์ƒ๊ฐํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋งž์ถฐ ๋ณด์„ธ์š”(1๋ถ€ํ„ฐ 100๊นŒ์ง€)</p>
            <p>
                <input type="number" placeholder="์˜ˆ)15" name="num"/> ์ผ๊บผ๊ฐ™์•„์š”!
                    <button class="apply_btn">์ œ์ถœ</button>
                <span>๊ธฐํšŒ๊ฐ€ <strong class="leftNum">10๋ฒˆ</strong>๋‚จ์•˜์–ด์š”!</span>
            </p>
            <ul class="log">  // ์‚ฌ์šฉ์ž๊ฐ€ ์ˆซ์ž๋ฅผ ๋„ฃ์œผ๋ฉด ์ถœ๋ ฅ
                <li>00๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, 00๋ณด๋‹ค ๋†’์•„์š”!</li>
                <li>00๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, 00๋ณด๋‹ค ๋‚ฎ์•„์š”!</li>
            </ul>
            
            <p class="reStart">  // ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋˜๋ฉด ์ถœ๋ ฅ
                <button class="btn_restart"">๋‹ค์‹œํ• ๋ž˜์š”!</button>
                <button class="btn_end">๊ทธ๋งŒํ• ๋ž˜์š”!</button>
            </p>
        </div>
    </div>
    
</body>
</html>
cs

๋งˆํฌ์—…์„ ์™„๋ฃŒํ–ˆ์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ๋„ ๋ฏธ๋ฆฌ ์”Œ์›Œ์ค„๊ป˜์š”. 

- style.css

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
body{
    background-color:lightgray;
}
 
.gameStartText{
    font-size: 18px;
    font-weight: 600;
}
 
input[name='num']{
    padding:8px;
    height:22px;
    border-radius:4px;
    border:1px solid #ddd;
}
 
/* button s */
.start_btn{
    border:0 none;
    background-color:darkcyan;
    color:#fff;
    padding:12px 22px;
    border-radius:4px;
    font-size:16px;
}
 
.apply_btn{
    border:0 none;
    background-color:#333;
    color:#fff;
    height:32px;
    margin-left: 22px;
    padding:0 22px;
    border-radius:4px;
    font-size:16px;
}
 
.btn_restart,
.btn_end{
    border:0 none;
    color:#fff;
    padding:12px 22px;
    border-radius:4px;
    font-size:16px;
}
 
.btn_restart{ background-color:darkcyan; margin-right: 12px; }
.btn_end{ background-color:darkred; }
 
cs

์ตœ์ดˆํ™”๋ฉด์—๋Š” ์‹œ์ž‘๋ฒ„ํŠผ๋งŒ ๋‚˜์˜ค๋ฉด๋ฉ๋‹ˆ๋‹ค.

css์— ๋‹ค์Œ ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

 

๋˜ํ•œ "00๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, 00๋ณด๋‹ค ๋†’์•„์š”!" ์ด๋ถ€๋ถ„์€ ๋‚˜์ค‘์— ๋™์ ์œผ๋กœ ์ˆซ์ž๋ฅผ ๋น„๊ตํ•ด์„œ ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑํ•ด ๋„ฃ์–ด์ค„ ๋ถ€๋ถ„์ด๋ผ ์•„์˜ˆ ์ง€์›Œ๋ฒ„๋ฆฝ๋‹ˆ๋‹ค.

- style.css

1
2
3
4
.stage02,
.reStart{
    display:none;
}
cs

- index.html

1
2
3
4
5
6
7
8
9
...
 <ul class="log">
                <!-- 
                <li>00๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, 00๋ณด๋‹ค ๋†’์•„์š”!</li>
                <li>00๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, 00๋ณด๋‹ค ๋‚ฎ์•„์š”!</li>
                ์ถœ๋ ฅํ•˜๊ธฐ
                -->
  </ul>
...
cs

์ด์ œ ์Šคํฌ๋ฆฝํŠธ ์ž‘์„ฑ๋งŒ ๋‚จ์•˜๋„ค์š”.

 

- Javascript

์ผ๋‹จ randomGame.js ๋ผ๋Š” ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ณ , ์ดˆ๋ฐ˜์— ํ•„์š”ํ•œ ๋ณ€์ˆ˜๊ฐ€ ๋ญ๋ญ์žˆ์„์ง€ ์ƒ๊ฐํ•ด๋ด…๋‹ˆ๋‹ค.

 

1. ์ผ๋‹จ ๋งž์ถฐ์•ผํ•˜๋Š” ์ˆซ์ž๊ฐ€ ์žˆ์–ด์•ผ ๊ฒ ๋„ค์š”. ๋žœ๋ค์œผ๋กœ 0 ~ 100๊นŒ์ง€ ์ƒ์„ฑํ•ด์•ผ๋˜๋Š” ๊ฐ’์ด ์žˆ์–ด์•ผ ๊ฒ ์–ด์š”.

2. ์ง€๊ธˆ ์ƒํƒœ๊ฐ€ ์‹œ์ž‘ํ•œ๊ฒƒ์ธ์ง€ ์ข…๋ฃŒ๋œ ๊ฒƒ์ธ์ง€ ์•Œ์•„์•ผํ•˜๋‹ˆ๊นŒ ์ƒํƒœ๊ฐ’๋„ ๋„ฃ์–ด์ค„๊ป˜์š”.

3. ๊ฒŒ์ž„์˜ ๊ทœ์น™์„ 10๋ฒˆ๋งŒ ์ž…๋ ฅ๋ฐ›๊ฒŒ ํ•ด๋†“์•˜์–ด์š”. 10๋ฒˆ์ดํ•˜๋กœ ๋งž์ถ”๋ฉด ์ด๊ธฐ๋Š”๊ฑฐ๊ณ  10๋ฒˆ์ด ๋„˜์–ด๊ฐ€๋ฉด ๊ฒŒ์ž„์— ์ง€๋Š”๊ฑฐ์˜ˆ์š”. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ตœ๋Œ€์ž…๋ ฅ๊ฐ’(10๋ฒˆ)๊ณผ ๋ช‡๋ฒˆ์„ ์ž…๋ ฅํ–ˆ๋Š”์ง€ ๊ฐœ์ˆ˜๋ฅผ ์นด์šดํŠธํ•ด์•ผํ•˜๋‹ˆ ๋‘๊ฐœ์˜ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•˜๊ฒ ๋„ค์š”

[ ์ฐธ๊ณ ๋กœ ์ƒ๋‹จ์˜ ์‹œ์—ฐGIF์—๋Š” 3๋ฒˆ์œผ๋กœ ํ•ด๋†“์•˜์–ด์š”. ์ด๋ ‡๊ฒŒ ์ตœ๋Œ€๊ฐ’๋„ ๋”ฐ๋กœ ๋ณ€์ˆ˜๋กœ ๋นผ์ฃผ๋ฉด ์‰ฝ๊ฒŒ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•ด์ ธ ํ…Œ์ŠคํŠธํ• ๋•Œ๋Š” ๋” ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋„ค์š”. ]

์ด๋ ‡๊ฒŒ ํ•„์š”ํ•œ ๋ณ€์ˆ˜๋ฅผ ๋ฏธ๋ฆฌ ์ƒ๊ฐํ•ด ๋†“์€๋’ค ์ง€์—ญ ๋ณ€์ˆ˜๋กœ ์ง€์ •์„ ํ•ด์ฃผ๋ฉด ๋˜์š”.

1
2
3
4
5
6
7
8
var targetNum; // ๋งž์ถฐ์•ผ ํ•˜๋Š” ์ˆซ์ž
var startStatus = false// ์ง€๊ธˆ์ƒํƒœ
var cnt = 0// ์ž…๋ ฅํ•œ ๊ฐœ์ˆ˜์ฒดํฌ
var maxCnt = 10;  // ์ตœ๋Œ€ ์ž…๋ ฅ ๊ฐœ์ˆ˜
// ๊ทธ์™ธ ๊ฐ’์„ ์ž…๋ ฅํ• ๋•Œ๋งˆ๋‹ค ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๊ธฐ๋กœ ํ–ˆ์—ˆ์ฃ ? 
// ๊ทธ๋Ÿด๋ ค๋ฉด ๋น„๊ตํ•ด์„œ ๋†’์€์ง€ ๋‚ฎ์€์ง€์— ๋Œ€ํ•œ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•˜๋ ค๊ณ  ํ•˜๋Š”๋ฐ 
// ์ฒ˜์Œ์—๋Š” ์ดˆ๊ธฐํ™”๋œ ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์žˆ์œผ๋ฉด ๊ทธ ์•ˆ์— ์ž…๋ ฅ๊ฐ’๋งŒ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋˜๊ฒ ๋„ค์š”. 
var compare = "";
cs

๊ณ ์ˆ˜๋“ค์€ ์ด๋ฏธ ์•„์‹œ๊ฒ ์ง€๋งŒ[์ €๋„ ๋žœ๋ค๊ฒŒ์ž„์„ ๋งŒ๋“ค๋ฉด์„œ ๋งŽ์ด ๋ฐฐ์šฐ๋Š” ์ค‘์ž…๋‹ˆ๋‹คใ… ],

๊ทธ์ค‘์˜ ํ•˜๋‚˜๊ฐ€ logic๋ถ€๋ถ„๊ณผ view๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜๋ฉด ๋” ์ข‹์€ ๊ฐœ๋ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ด์š”.

๊ทธ๋ž˜์„œ ๊ทธ๋ ‡๊ฒŒ ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ์ ์šฉํ•ด ๋ณด๋ฉด์„œ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. [์ œ๋Œ€๋กœํ•œ์ง€๋Š”๋ชจ๋ฅด๊ฒ ์–ด์š”..]

 

์ผ๋‹จ!!!!

 

๊ฒŒ์ž„์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋งž์ถฐ์•ผํ•  ์ˆซ์ž๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , stage02ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฐœ๋ฐœ๋‹จ๊ณ„์ด๋ฏ€๋กœ console.log๋กœ ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ์ˆซ์ž๋ฅผ ํ™•์ธํ•ด ๋ณผ๊ป˜์š”.

 

- index.html

1
2
3
4
5
6
<div class="wrapper">
        <div class="stage01">
            <button class="start_btn" onClick="gameStart();">์‹œ์ž‘ํ•˜๊ธฐ</button>
        <div>
        ...
</div>
cs

- randomGame.js

1
2
3
4
5
6
7
8
9
10
11
var targetNum; // ๋งž์ถฐ์•ผ ํ•˜๋Š” ์ˆซ์ž
var startStatus = false;
var cnt = 0
var maxCnt = 10;
var compare = "";
 
function gameStart(){
    targetNum = Math.floor(Math.random() * 100+ 1// 1-100 ๊นŒ์ง€ ์ˆซ์ž ์ƒ์„ฑ
    console.log("๋งž์ถฐ์•ผ๋  ์ˆซ์ž : ", targetNum);
    document.querySelector('.stage02').style.display = 'block';
}
cs

 

* ๋žœ๋ค์ˆซ์ž๋Š” ์–ด๋–ค๋ฐฉ์‹์œผ๋กœ ์ƒ์„ฑ๋˜๋‚˜์š”? ์•„์‹œ๋Š”๋ถ„์€ ์Šคํ‚ต!!!!!

Math.floor๋ฅผ ํ•ด์ฃผ๋Š”์ด์œ ๋Š” ์†Œ์ˆ˜์ ์„ ์ œ๊ฑฐํ•˜๊ณ  ์ •์ˆ˜๋งŒ ๋‚จ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.

Javascript์—์„œ๋Š” 0 ~ 1 ์‚ฌ์ด์˜ ๋žœ๋ค๊ฐ’์ด ์ƒ๊ฒจ 1 - 100๊ฐœ๋ฅผ ์ƒ์„ฑํ•ด์ฃผ๊ณ ์‹ถ์€๊ฒฝ์šฐ,

100์„ ๊ณฑํ•œ๋’ค 1์„ ๋”ํ•ด์ฃผ๋ฉด๋˜์š”. ์˜ˆ๋ฅผ๋“ค์–ด ๋žœ๋ค์ˆซ์ž๊ฐ€ 0.852 ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด 100์„ ๊ณฑํ•ด 85.2๊ฐ€๋˜๊ณ ,

Math.floor๋ฅผํ•˜๋ฉด 85๊ฐ€ ๋˜๊ณ  +1์„ ํ•˜๋ฉด 86์ด ๋˜๊ฒ ์ฃ ? 0๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋‹ˆ๊นŒ 1์„ ๋”ํ•ด์ฃผ๋ฉด 1์ดํ•˜์˜ ๋žœ๋ค๊ฐ’์€ ์ƒ๊ธฐ์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ฒฐ๊ณผ์ ์œผ๋กœ 1๋ถ€ํ„ฐ 100๊นŒ์ง€์˜ ์ˆซ์ž๊ฐ€ ์ƒ๊ธฐ๊ฒ ๋„ค์š”.

๊ทธ๋Ÿผ ํด๋ฆญํ–ˆ์„๋•Œ ๋งž์ถฐ์•ผํ•  ์ˆซ์ž๊ฐ€ ์ฝ˜์†”์— ๋‚˜ํƒ€๋‚˜๊ณ  ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚˜๊ฒ ๋„ค์š”.

 

์ด์ œ input์—์„œ ์ˆซ์ž๊ฐ’์„ ๋ฐ›์•„ ์ œ์ถœ์„ ํด๋ฆญํ•˜๋ฉด

input๊ฐ’ ๊ณผ ๋งž์ถฐ์•ผ๋ ์ˆซ์ž ์™€ ๋น„๊ตํ•œ๋’ค, ๋†’์€์ง€, ๋‚ฎ์€์ง€, ๋งž์ท„๋Š”์ง€๋ฅผ ์ถœ๋ ฅํ•ด์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์•„๊นŒ ๋งํ•œ logic ๋ถ€๋ถ„๊ณผ view๋ถ€๋ถ„์„ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐœ๋ฐœํ•  ๊ป๋‹ˆ๋‹ค.

Trace ๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋’ค ๊ทธ ์•ˆ์— log๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ๋ถ€๋ถ„์„ ๋งŒ๋“ค์–ด ์žฌํ™œ์šฉ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ œ์ถœ์„ ํ• ๋•Œ๋งˆ๋‹ค input๋‚ด์šฉ์„ ๋น„์šฐ๊ธฐ ์œ„ํ•ด Traceํ•จ์ˆ˜ ์•ˆ์— input์„ clearํ•ด์ฃผ๋Š”ํ•จ์ˆ˜๋„ ๋งŒ๋“ค๊ป˜์š”.

 

- index.html

1
2
3
4
...
<button class="apply_btn" onclick="applyNum();">์ œ์ถœ</button>
...
 
cs

 

- randomGame.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
...
function Trace() {
    this.clear = function() {
        document.querySelector('.log').innerHTML = "";  // input์„ clear
    }
    this.log = function(msg) {
        var ul = document.querySelector('.log'); // .log๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์ €์žฅ
        var li = document.createElement('li');  // li ํƒœ๊ทธ๋ฅผ ์ƒ์„ฑ
        li.innerHTML = msg;  // ๋ฉ”์„ธ์ง€๋ฅผ ์ƒ์„ฑํ•œ li ํƒœ๊ทธ์•ˆ์— ๋„ฃ์Œ
        ul.appendChild(li);  // ๋งค์„ธ์ง€๋ฅผ ๋‹ด์€ li๋ฅผ .log์— ๋‹ด์€ ํ›„ ์ถœ๋ ฅ
    }
    this.chanceLeft = function(leftChance){  // ๋ช‡๋ฒˆ ๋‚จ์•˜๋Š”์ง€ ์ฒดํฌ์ถœ๋ ฅ 
        document.querySelector('.leftNum').innerHTML = leftChance + "๋ฒˆ";
    }
}
var trace = new Trace();
 
 
function gameStart(){
...
}
 
 
function applyNum(){
 
    // input ํƒœ๊ทธ์— ๋“ค์–ด๊ฐ€๋Š” ๊ฐ’์„ ๋ฐ›์Œ 
    var userNum = document.querySelector('input[name="num"]').value;
    
    if(userNum == "" || userNum == undefined){  // ๊ฐ’์ด ์—†์„๋•Œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ
        alert('๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š”');  // alert๋„์›Œ์ฃผ๊ณ 
        document.querySelector('input[name="num"]').focus();  // input์— ํฌ์ปค์Šค
    }else{
        cnt++;  // ์ž…๋ ฅํšŸ์ˆ˜๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ์คŒ
        document.querySelector('input[name="num"]').focus();  // input์— ํฌ์ปค์Šค
        trace.chanceLeft(maxCnt-cnt);
 
        if(targetNum == userNum){
            compare = "๊ฐ™์•„์š”! ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! YOU WIN";
        }else{
            if(targetNum > userNum){
                compare = "๋†’์•„์š”";
            }else{
                compare = "๋‚ฎ์•„์š”";
            }
            if(cnt === maxCnt && targetNum !== userNum){
                compare = compare + "! ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค! YOU LOOSE";
            }
        }
        log = userNum+"๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, "+userNum+"๋ณด๋‹ค "+compare+"!";
        trace.log(log);
        document.querySelector('input[name="num"]').value = "";
 
    }
}
 
cs

 

๋งž์ถฐ์•ผํ•  ์ˆซ์ž๊ฐ€ 54์ธ๋ฐ 50์„ ์ž…๋ ฅํ•˜๋ฉด 50๋ณด๋‹ค ๋†’๋‹ค๊ณ ๋‚˜์˜ค๊ณ  60๋ณด๋‹ค ๋‚ฎ๋‹ค๊ณ  ๋‚˜์˜ค๋„ค์š”.

 

ํ•˜์ง€๋งŒ ๋ฌธ์ œ์ ์ด ์žˆ๋Š”๋ฐ์š” ๋งŒ์•ฝ 10๋ฒˆ์ด์ƒ ์ž…๋ ฅํ•˜๊ฒŒ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ์š”

์ด๋Ÿฐ์‹์œผ๋กœ ์ดˆ๊ณผ๊ฐ€ ๋˜๋„ ๊ณ„์†๋™์ž‘์ด ๋ฉ๋‹ˆ๋‹ค. 

 

 

10๋ฒˆ์ด ๋˜๋ฉด ๋™์ž‘์„ ํ•˜์ง€ ๋ชปํ•˜๋„๋ก input์„ disabled ๋กœ ๋ฐ”๊ฟ”์ฃผ๋„๋ก ํ• ๊ป€๋ฐ,

์ƒ๊ฐํ•ด๋ณด๋ฉด 10๋ฒˆ์ด ์•ˆ๋˜๋”๋ผ๋„ ์ˆซ์ž๋ฅผ ๋งž์ถ”๋ฉด ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๊ฐ€ ๋˜์•ผํ•˜๋ฏ€๋กœ ์—ญ์‹œ ๋”ฐ๋กœ ๋นผ์ฃผ๋Š”๊ฒŒ ์ข‹๊ฒ ๋„ค์š”.

 

Reset์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ดˆ๊ธฐ์ƒํƒœ์™€ ์ข…๋ฃŒ์ƒํƒœ๋ฅผ ๋งŒ๋“ค์–ด ๊ฒŒ์ž„์‹œ์ž‘์‹œ ์ดˆ๊ธฐ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ณ ,

๊ฒŒ์ž„์—์„œ ์ง€๊ฑฐ๋‚˜์ด๊ฒผ์„๋•Œ ๊ฒŒ์ž„์ข…๋ฃŒ ์ƒํƒœ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋„๋ก ํ• ๊ป˜์š”.

 

์ถ”๊ฐ€์ ์œผ๋กœ ํ…Œ์ŠคํŠธํ• ๋•Œ ๋งค๋ฒˆ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋งˆ์šฐ์Šค๋กœ ์ œ์ถœ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ธฐ ๋ถˆํŽธํ•˜๋‹ˆ

input์—์„œ Enter๋ฅผ ์ณ๋„ ๋™์ž‘์ด ๋˜๋„๋ก ํ•ด๋ณผ๊ป˜์š”.

 

๋˜ํ•œ ์ƒ๋‹จ์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด document.querySelector('input[name="num"]').focus(); ๋„ ๊ฒฐ๊ตญ์—” ๋ฐ˜๋ณต๋˜๋Š”๊ฒƒ์„ ์•Œ์ˆ˜ ์žˆ์ฃ ?

์ด๋ถ€๋ถ„๋„ Reset() ์— ๋”ฐ๋กœ ๋นผ์ฃผ๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. 

 

 

- randomGame.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
function Reset() {
    this.clearStatus = function(){  // ์ดˆ๊ธฐํ™”์ƒํƒœ
        document.querySelector('.gameStartText').style.display = "block";
        document.querySelector('.reStart').style.display = 'none';
        document.querySelector('input[name="num"]').disabled = false;
        document.querySelector('input[name="num"]').value = "";
        trace.clear();
        cnt = 0;
    }
    this.endStatus = function(){  // ์ข…๋ฃŒ์ƒํƒœ
        document.querySelector('.reStart').style.display = 'block';
        document.querySelector('input[name="num"]').disabled = true;
    }
    this.focusInput = function(){  // ์ธํ’‹์— ํฌ์ปค์Šค
        document.querySelector('input[name="num"]').focus();
    }
      
}
 
var Reset = new Reset();
 
 
function gameEnd(){
    document.querySelector('.stage02').style.display = "none";
    document.querySelector('.reStart').style.display = "none";
}
 
function gameStart(){
   ...
}
 
function applyNum(){
    var userNum = document.querySelector('input[name="num"]').value;
    
    if(userNum == "" || userNum == undefined){
        alert('๊ฐ’์„ ์ž…๋ ฅํ•˜์„ธ์š”');
        Reset.focusInput();  // inputFocus๋„ ๋”ฐ๋กœ ๋นผ๋‹ˆ๊นŒ ๋” ํŽธ๋ฆฌํ•ด์กŒ๋„ค์š”. 
    }else{
        cnt++;
        Reset.focusInput();
        trace.chanceLeft(maxCnt-cnt);
 
        if(targetNum == userNum){
            compare = "๊ฐ™์•„์š”! ์ถ•ํ•˜ํ•ฉ๋‹ˆ๋‹ค! YOU WIN";
            Reset.endStatus();
        }else{
            if(targetNum > userNum){
                compare = "๋†’์•„์š”";
            }else{
                compare = "๋‚ฎ์•„์š”";
            }
            if(cnt === maxCnt && targetNum !== userNum){
                Reset.endStatus();
                compare = compare + "! ํ‹€๋ ธ์Šต๋‹ˆ๋‹ค! YOU LOOSE";
            }
        }
        log = userNum+"๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, "+userNum+"๋ณด๋‹ค "+compare+"!";
        trace.log(log);
        document.querySelector('input[name="num"]').value = "";
 
    }
}
 
// input์—์„œ ํ‚ค๊ฐ’์„ ๋ฐ›์•„ Enter(keyCode=13)๋ฅผ ์ฒดํฌํ•ด ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
function enterCheck(){
    if(event.keyCode === 13){
        applyNum();
    }
}
 
cs

- index.html

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
<div class="wrapper">
    <div class="stage01">
        <button class="start_btn" onClick="gameStart();">์‹œ์ž‘ํ•˜๊ธฐ</button>
    <div>
    <div class="stage02">
        <p class="gameStartText">๋‚ด๊ฐ€์ƒ๊ฐํ•˜๋Š” ์ˆซ์ž๋ฅผ ๋งž์ถฐ ๋ณด์„ธ์š”(1๋ถ€ํ„ฐ 100๊นŒ์ง€)</p>
        <p>
 
            //  onkeydown ์œผ๋กœ ํ‚ค๋ณด๋“œ๋กœ ๋™์ž‘์‹œ ํ‚ค๊ฐ’์„ ๋ฐ›์•„ ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.
            <input type="number" placeholder="์˜ˆ)15" name="num" 
                onkeydown="enterCheck()"/> ์ผ๊บผ๊ฐ™์•„์š”!
                <button class="apply_btn" onclick="applyNum();">์ œ์ถœ</button>
            <span>๊ธฐํšŒ๊ฐ€ <strong class="leftNum"></strong>๋‚จ์•˜์–ด์š”!</span>
        </p>
        <ul class="log">
            <!-- 
            <li>00๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, 00๋ณด๋‹ค ๋†’์•„์š”!</li>
            <li>00๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์š”, 00๋ณด๋‹ค ๋‚ฎ์•„์š”!</li>
            ์ถœ๋ ฅํ•˜๊ธฐ
            -->
        </ul>
        
        <p class="reStart">
            <button class="btn_restart" onClick="gameStart();">๋‹ค์‹œํ• ๋ž˜์š”!</button>
           // ๊ฒŒ์ž„์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋Š”๊ฒƒ์€ ๊ฒŒ์ž„์‹œ์ž‘๊ณผ ๊ฐ™์œผ๋‹ˆ gameStart() ํ•จ์ˆ˜๋ฅผ ๊ทธ๋Œ€๋กœ ์“ฐ๋ฉด๋˜๊ฒ ์ฃ 
            <button class="btn_end" onClick="gameEnd();">๊ทธ๋งŒํ• ๋ž˜์š”!</button>
           // ๊ทธ๋งŒํ•œ๋‹ค๊ณ  ํ–ˆ์„๋•Œ๋Š” ์ƒํƒœ์ข…๋ฃŒ ๋ฟ๋งŒ์•„๋‹ˆ๋ผ ์ตœ์ดˆํ™”๋ฉด์œผ๋กœ ๋Œ์•„๊ฐ€์•ผํ•˜๋ฏ€๋กœ gameEnd() ํ•จ์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค. 
        </p>
    </div>
</div>
cs

ํ…Œ์ŠคํŠธํ•ด๋ณด๋ฉด ์ž˜ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. 

 

๋ฐ˜์‘ํ˜•