카테고리 없음

[JavaScript] 끝말잇기 만들기_2/2

hhnn 2021. 8. 24. 12:56

순서도 그려보기


순서도에 따라 입력해보기

const number = parseInt(prompt('몇 명이 참가하나요?'));
const $button = document.querySelector('button');
const $input = document.querySelector('input');
const $word = document.querySelector('#word');

let word; //제시어
let newWord; //새로 입력한 단어

const onClickButton = () => {
	if(!word) { //제시어가 비어 있는가?
    	//예 >> 공란이다.
	} else {
		//아니오 >> 공란이 아니다.
	}
};
const onInput = (event) => {
	newWord = event.target.value; //글자 입력시 newWord 변수에 단어가 담김
};

순서도에 따라 제시어가 비어 있으면 입력한 단어가 제시어가 된다.

 

const onClickButton = () => {
	if(!word) { //제시어가 비어 있는가?
    	word = newWord; //예 >> 입력한 단어가 제시어가 된다. 데이터를 바꾼 뒤 화면도 바꿔주는 것이 짝을 이룬다.
    	$word.textContent = word;
    	$input.value=''; //텍스트 공란으로 만들어주기
	} else {
		//아니오 >> 공란이 아니다.
	}
};

 

변수를 넣어준 뒤 화면도 바꿔주어야 한다.

바꿔줄 부분을 선택해주어야 하므로

QuerySelector를 통해 보여주고자 하는 부분을 선택한다.

const $word = document.querySelector('#word');

#word를 선택해 브라우져에 표현된다.

 


제시어가 올바른 단어인지 판단하기

두번째 사람이 입력한 단어부터 코드가 실행됨

코드가 중복되는것이 프로그램에서 효율적인것은 아니기 때문에 마지막에 코드 수정 예정

 


틀렸을 때 오류 표시하기

alert('올바르지 않은 단어입니다!');

 

<!DOCTYPE html>
<html lang="ko">

<head>
    <title>끝말잇기</title>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>

    </style>
</head>

<body>
    <div><span id="order">1</span>번째 참가자</div>
    <div>제시어: <span id="word"></span></div>
    <input type="text">
    <button>입력</button>

    <script>
        const number = parseInt(prompt('몇 명이 참가하나요?'));
        const $button = document.querySelector('button');
        const $input = document.querySelector('input');
        const $word = document.querySelector('#word');
        const $order = document.querySelector('#order');
        let word; //제시어
        let newWord; //새로 입력한 단어

        const onClickButton = () => {
            if (!word) { //제시어가 비어 있는가?
                word = newWord; //예 >> 입력한 단어가 제시어가 된다. 데이터를 바꾼 뒤 화면도 바꿔주는 것이 짝을 이룬다.
                $word.textContent = word;
                $input.value = ''; //입력창 비우기
                $input.focus(); //입력창 자동 커서

                const order = Number($order.textContent); //order의 순번 가져옴
                if (order + 1 > number) { //현재 참가한 순번이 참가한 인원보다 큰가?
                    $order.textContent = 1; //참가한 인원의 수보다 order가 클 경우 원위치 됨
                } else {
                    $order.textContent = order + 1; //인원수보다 작을 경우 +1 시킴
                }
            } else {
                //아니오 >> 공란이 아니다.
                if (word[word.length - 1] === newWord[0]) { //문자열의 마지막자리와 새로 입력한 단어의 첫번째 단어가 같은지
                    word = newWord; //입력한 단어가 제시어가 된다.
                    $word.textContent = word;
                    $input.value = ''; //입력창 비우기
                    $input.focus(); //입력창 자동 커서

                    const order = Number($order.textContent);
                    if (order + 1 > number) { //현재 참가한 순번이 참가한 인원보다 큰가?
                        $order.textContent = 1;
                    } else {
                        $order.textContent = order + 1;
                    }
                } else {
                    alert('올바르지 않은 단어입니다!');
                    $input.value = ''; //입력창 비우기
                    $input.focus(); //입력창 자동 커서
                }
            }
        };
        const onInput = (event) => {
            newWord = event.target.value; //글자를 입력할때마다 newWord에 담김
        };

        $button.addEventListener('click', onClickButton);
        $input.addEventListener('input', onInput);
    </script>
</body>

</html>


중복코드 수정하기(순서도 최적화)

제시어가 비어 있는가?, 입력한 단어가 올바른가? 를 논리연산자를 통해 합칠 수 있다.

정리한 논리연산자 보러가기

 

[JavaScript] 논리 연산자

논리곱 AND (&&) '그리고'를 표현하는 연산자 A && B true && true => true false && false => false true && false =>false (하나라도 거짓이면 거짓) 예시1) 스티브잡스는 한국인이고(AND) 남자이다. //false A..

haneul2244.tistory.com

 

 

!word || word [word.length -1] === newWord[0]);

//논리연산자 중 OR을 사용해 중복된 코드를 줄여준다.

$input.value = ''; 
$input.focus();

코드가 중복되므로 else 뒤로 빼서 중복된 코드를 제거한다.

 

 const number = parseInt(prompt('몇 명이 참가하나요?'));
 const $button = document.querySelector('button');
 const $input = document.querySelector('input');
 const $word = document.querySelector('#word');
 const $order = document.querySelector('#order');
 let word; //제시어
 let newWord; //새로 입력한 단어

const onClickButton = () => {
  if (!word || word[word.length - 1] === newWord[0]) { //제시어가 비어 있는가?
    word = newWord; //예 >> 입력한 단어가 제시어가 된다. 데이터를 바꾼 뒤 화면도 바꿔주는 것이 짝을 이룬다.
    $word.textContent = word;

    const order = Number($order.textContent); //order의 순번 가져옴
    if (order + 1 > number) { //현재 참가한 순번이 참가한 인원보다 큰가?
      $order.textContent = 1; //참가한 인원의 수보다 order가 클 경우 원위치 됨
    } else {
      $order.textContent = order + 1; //인원수보다 작을 경우 +1 시킴
    }
    } else {
      alert('올바르지 않은 단어입니다!');
    }
      $input.value = ''; //입력창 비우기
      $input.focus(); //입력창 자동 커서
};

const onInput = (event) => {
newWord = event.target.value; //글자를 입력할때마다 newWord에 담김
};

$button.addEventListener('click', onClickButton);
$input.addEventListener('input', onInput);

 

반응형
SMALL