[Clone Project] Typing Game

kwonยท2024๋…„ 1์›” 1์ผ
0
post-thumbnail

ํ•™์Šต ๋ชฉํ‘œ๐Ÿ”ฅ

  • HTML,CSS,Javascript ๋ฌธ๋ฒ•์— ์ ์‘ํ•˜๊ณ , ํ™œ์šฉํ•˜๋Š” ๊ฒƒ

  • ๋ฏธ๋‹ˆ ํ”„๋กœ์ ํŠธ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ, ํŒŒ์ผ
    ์ •๋ฆฌ ๋Šฅ๋ ฅ ํ–ฅ์ƒ

  • ๊ตฌํ˜„ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๊ณ , ํ•ด๊ฒฐํ•˜๋Š” ๋Šฅ๋ ฅ ํ–ฅ์ƒ


What I Learnedโœ๏ธ

๊ฐ ํƒœ๊ทธ๋งˆ๋‹ค class๋ช…์„ ์ง€์–ด์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

ํด๋ž˜์Šค๋Š” ํŠน์ • ๊ทธ๋ฃน์ด๋‚˜ ์œ ํ˜•์˜ ์š”์†Œ์— ์Šคํƒ€์ผ์„ ์ ์šฉํ•˜๊ฑฐ๋‚˜ JavaScript์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ์—์„œ ํ•ด๋‹น ์š”์†Œ๋ฅผ ์„ ํƒํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

<br>.header { //header๋ผ๋Š” ํด๋ž˜์Šค๋ช… ๊ฐ€์ง„ ํƒœ๊ทธ ์†์„ฑ<br>
    font-size: 18px;<br>
    font-weight: bold;<br>
    color: #333;<br>
    /* ๊ธฐํƒ€ ์Šคํƒ€์ผ ์†์„ฑ๋“ค */ <br>
}

HTMLํŒŒ์ผ์—์„œ CSS,JS ํŒŒ์ผ์„ ์ ์šฉ์‹œํ‚ค๋ ค๋ฉด?

cssํŒŒ์ผ ์ ์šฉ <link rel="stylesheet" href="css/style.css(ํŒŒ์ผ๋ช…์˜ˆ์‹œ)">

jsํŒŒ์ผ ์ ์šฉ <script src = "js/main.js(ํŒŒ์ผ๋ช… ์˜ˆ์‹œ)"> <\script>

CSS ์•Œ๊ฒŒ๋œ ๊ฒƒ๋“ค

  • display flex์†์„ฑ (display:flex)

    flex๋Š” ๋ ˆ์ด์•„์›ƒ์„ ์‰ฝ๊ฒŒ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ž„.

    (1) flex-direction๋Š” Flex-Item์˜ ๋ฐฐ์น˜ ๋ฐฉํ–ฅ ๊ธฐ๋ณธ๊ฐ’์€ row์ด๊ณ  row-reverse, column, column-reverse ๋“ฑ์ด ์žˆ์Œ.

    (2)flex-wrap์€ ํŽ˜์ด์ง€์—์„œ ์ฐฝ์„ ํ™•๋Œ€ํ–ˆ์„ ๋•Œ ๋งŒ์•ฝ wrap์œผ๋กœ ์„ค์ •๋˜์–ด์žˆ์œผ๋ฉด ํ™•๋Œ€ ์•„๋ฌด๋ฆฌํ•ด๋„ ํฌ๊ธฐ๋Š” ์•ˆ๋ณ€ํ•˜์ง€๋งŒ ์ค„๋ฐ”๊ฟˆ์ด ๋˜๊ณ , nowrap(๊ธฐ๋ณธ๊ฐ’)์€ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ณ€ํ™”๋˜์–ด๋„ ์ค„๋ฐ”๊ฟˆ์€ ์ ˆ๋Œ€X

    (3)justify-content ์†์„ฑ์€ ์ •๋ ฌ์„ ๋„์™€์ค€๋‹ค. justify-content:center ๋Š” ๊ฐ€์šด๋ฐ ์ •๋ ฌ
    ๊ธฐ๋ณธ๊ฐ’์€ flex-start(์™ผ์ชฝ๋ถ€ํ„ฐ ์‹œ์ž‘) space-between๋Š” ์–‘ ์˜†์œผ๋กœ ๋ถ™๋Š”๋‹ค(ํ•ด๋‹น ํƒœ๊ทธ์˜ width๋ฅผ ์ง€์ •ํ•ด์ค˜์•ผํ•จ)

  • padding=1rem์˜ ์˜๋ฏธ?

    ํ•ด๋‹น ์†์„ฑ์„ ๊ฐ€์ง„ ์š”์†Œ์˜ ๋ชจ๋“  ๋„ค ๋ฐฉํ–ฅ(์œ„, ์˜ค๋ฅธ์ชฝ, ์•„๋ž˜, ์™ผ์ชฝ)์— ๋Œ€ํ•ด 1๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ์˜ ๊ธ€๊ผด ํฌ๊ธฐ์™€ ๋™์ผํ•œ ์—ฌ๋ฐฑ์„ ๋ถ€์—ฌ
    ๋งŒ์•ฝ, margin-top: 3rem;์ด๋ผ๊ณ  ํ•˜๋ฉด ๊ธ€๊ผด ํฌ๊ธฐ์˜ 3๋ฐฐ ๋งŒํผ์˜ ํฌ๊ธฐ๋ฅผ ์ƒ๋‹จ ์—ฌ๋ฐฑ์œผ๋กœ ์ง€์ •

Javascript ์•Œ๊ฒŒ๋œ ์ 

  • ์ด๋ฒคํŠธ ๋“ฑ๋ก ๋ฐ ์ฒ˜๋ฆฌ

    ์ด๋ฒคํŠธ ๋“ฑ๋ก์€ html์—์„œ ํƒœ๊ทธ์— ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜, jsํŒŒ์ผ์—์„œ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌํ•  ํƒœ๊ทธ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ํ›„ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ๋‹ค.
//1๋ฒˆ
<button class ="button loading" onclick="run()">๊ฒŒ์ž„์„ ๋ถˆ๋Ÿฌ์˜ค๋Š”์ค‘...</button>
//2๋ฒˆ  
const wordInput = document.querySelector('.word-input');
wordInput.addEventListener('input', checkMatch);
  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜(Arrow Function) ์ž‘์„ฑ ๋ฐฉ๋ฒ•
    Javascript์—์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํƒ€ ์–ธ์–ด์˜ ๋žŒ๋‹ค์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    ์šฐ์„ ์€ Javascript์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด 3๊ฐ€์ง€ ํ•จ์ˆ˜ ์„ ์–ธ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์„ ์•Œ์•„๋‘์ž.
//1๋ฒˆ
function add(a, b) {
    return a + b;
};

add(1, 2); // 3
//2๋ฒˆ
const add = function(a, b) {
    return a + b;
};

add(1, 2); // 3
//3๋ฒˆ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
const add = (a, b) => {
return a + b;
};

add(1, 2); // 3
  • let๊ณผ const์„ ์–ธ์ œ ์‚ฌ์šฉํ•˜๊ณ , ์™œ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ดํ•ด
    let์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ํ•ด๋‹น ๋ณ€์ˆ˜๋Š” ์žฌํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด, ๊ฐ’์„ ์—ฌ๋Ÿฌ ๋ฒˆ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
    const๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๋ฉด, ํ•ด๋‹น ๋ณ€์ˆ˜๋Š” ์ƒ์ˆ˜(constant)๋กœ ์ทจ๊ธ‰๋˜์–ด ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค
    ์ด๊ฒƒ์€ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์ด ๋ถˆ๋ณ€์ธ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์žฌํ• ๋‹น์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธ
  • innerHTML๊ณผ innerText์˜ ์ฐจ์ด
    innerHTML์€ ํ•ด๋‹น ํƒœ๊ทธ์˜ ๋ชจ๋“  html ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜จ๋‹ค.(๊ณต๋ฐฑ๊นŒ์ง€๋„)
    innterText๋Š” ๋ฐ˜๋ฉด์— Text, ์ฆ‰ ๊ธ€์ž๋งŒ ๊ฐ€์ ธ์˜จ๋‹ค. (๊ณต๋ฐฑ ์ œ์™ธ)
  • setInterval(countDown,1000)์€ 1์ดˆ๋งˆ๋‹ค countDown๋ฉ”์„œ๋“œ(์ •์˜ํ•œ ๋ฉ”์„œ๋“œ)๋ฅผ ์‹คํ–‰
  • classList.add('ํด๋ž˜์Šค๋ช…')๊ฐ€ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ
    ์ด์ „์— ํƒœ๊ทธ์— class๋ฅผ ์ •์˜ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ทธ ์ •์˜ํ•œ class๋ช…์„ ๊ฐ€์ง€๊ณ  CSS ์†์„ฑ ๋˜๋Š” Js ์†์„ฑ์„ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ธ๋ฐ, ์ด๋ ‡๊ฒŒ class๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ๋˜ ๋‹ค๋ฅธ ํ•˜๋‚˜์˜ ์†์„ฑ์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ ์ค‘ ๋ฌธ์ œ ํ•ด๊ฒฐ

  • ๊ฒŒ์ž„์‹œ์ž‘ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ , ๋‹จ์–ด๋ฅผ ๋”ฐ๋ผ ์จ๋„ inputText ์ดˆ๊ธฐํ™” ์•ˆ๋˜๊ณ , score ์ฆ๊ฐ€๋„ ์ž‘๋™X
    -> checkstatus ๋ฉ”์„œ๋“œ ์•ˆ์— checkMatch ๋ฉ”์„œ๋“œ ํ•จ์ˆ˜๋ฅผ ๋„ฃ์Œ์œผ๋กœ์จ ํ•ด๊ฒฐ

  • ์ •๋‹ต์„ ๋งž์ถฐ๋„ ๋‹ค์Œ word๋กœ ์•ˆ๋„˜์–ด๊ฐ
    -> run๋ฉ”์„œ๋“œ ์•ˆ์— getWords๋ฉ”์„œ๋“œ๋ฅผ ๋„ฃ์Œ์œผ๋กœ์จ ํ•ด๊ฒฐ

์ฒœ์ฒœํžˆ ๋™์ž‘ ๊ณผ์ •์„ ์‚ดํ”ผ๋ฉด์„œ, ์–ด๋–ค ์ˆœ์„œ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ธ๊ณผ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ์ˆ˜์ •ํ•˜๋‹ˆ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋‹ค.


profile
๐Ÿƒ๐Ÿป ๐Ÿƒ๐Ÿป ๐Ÿƒ๐Ÿป ๐Ÿƒ๐Ÿป

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด