티스토리 뷰

실습화면

타자게임 only HTML/Bootstrap: 2022.06.15 - [WEB/Html & Css] - Bootstrap Basic

타자게임 JS 적용 : JS 실습 링크


학습 목표

JS 코드 흐름을 이해하기


JS 코드

const $ = tag => document.querySelector(tag)
const $$ = tag => document.querySelectorAll(tag)

const wordInput = $('#word-input')				// 1
const current = $('#current-word')
const scoreDisplay = $('#score')
const timeDisplay = $('#time')
const message = $('#message')

let words = ['banana', 'key', 'car', 'javascript', 'cat']	// 2
let score = 0

wordInput.addEventListener('input', e => {			// 3
  const typedText = e.target.value
  const currentText = current.innerText

  if (typedText.toUpperCase() === currentText.toUpperCase()) {	// 3-1
    console.log('같습니다')
    addScore()			// 3-2 ←←
    setNewWord()		// 3-3 ←←
  }
})
function setNewWord() {		// 3-2 ↑↑
  wordInput.value = ''
  message.innerText = 'Now Playing!'
  const randomIndex = Math.floor(Math.random() * words.length)
  current.innerText = words[randomIndex]
  wordInput.focus()
}

function addScore() {		// 3-3 ↑↑
  score = score + 1
  scoreDisplay.innerText = score
}

1. HTML 태그 가져옴

2. 랜덤 단어 생성을 위한 배열 생성

3. 해당 노드(wordInput)의 이벤트로 input이 발생하면 콜백함수 실행

  3-1. input에 입력된 문자와 특정요소의 innerText가 같다면 코드 실행

  3-2. 새로운 단어를 생성하는 함수

        랜덤숫자로 ( Math.random() * 문자열의 길이(5) )를 하면 0.xxx~4.xxxx이 나온다.

        그 다음 Math.floor를 하면 0~4 값이 나온다. 이 값을 배열의 인덱스로 사용하면 된다.

  3-3. 점수를 추가하는 함수

        점수를 변경한 값을 요소의 innerText로 넣어주면 된다.

 


HTML 코드

더보기
<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Typing Master</title>
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"
		integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
</head>

<body class="bg-dark text-white">
	<header class="bg-secondary text-center p-3 mb-3">
		<h1>Typing Master</h1>
	</header>

	<div class="container text-center">

		<div class="row">
			<div class="col-md-6 mx-auto">
				<p class="lead">
					주어진 단어들 <span class="text-success">5</span>초안에 타이핑 하기
				</p>
				<h2 class="display-2 mb-5" id="current-word">Start</h2>
				<input type="text" class="form-control form-control-lg" placeholder="start typing..." id="word-input">
				<h4 class="mt-3" id="message"></h4>
			</div>
		</div>

		<div class="row">
			<div class="col-12 col-xl-6">
				<h3>Time left: <span id="time">0</span></h3>
			</div>
			<div class="col-12 col-xl-6">
				<h3>score: <span id="score">0</span></h3>
			</div>
		</div>

		<div class="row">
			<div class="col">
				<div class="card card-body bg-secondary text-white">
					<h5>안내방법</h5>
					<p>각 단어를 주어진 시간안에 타이핑하고, 다시 시작하려면 주어진 단어를 입력하세요.</p>
				</div>
			</div>
		</div>

		<div class="row mt-3">
			<div class="col-md-12">
				<button class="col-12 col-sm-3 btn btn-primary">초급</button>
				<button class="col-12 col-sm-3 btn btn-secondary">중급</button>
				<button class="col-12 col-sm-3 btn btn-success">상급</button>
			</div>
		</div>
	</div>
	<script src="main.js"></script>
</body>

</html>

 

실습파일

'WEB > JavaScript' 카테고리의 다른 글

[클린코드 For JS] 1. 소개 & 2. 변수  (0) 2022.06.27
타자게임 - 데이터상태처리 (setInterval) & API 연동  (0) 2022.06.16
TODO Dom & Event  (0) 2022.06.14
[JS] HTTP API  (0) 2022.06.13
[JS] DOM, Event  (0) 2022.06.13
댓글
다크모드
Document description javascript psychology
더보기 ,제목1 태그 호버