잿꽃's posting Garden

자바스크립트로 가위바위보 게임 만들기 1 본문

WEB/JAVASCRIPT

자바스크립트로 가위바위보 게임 만들기 1

잿꽃 2022. 2. 26. 19:05

자바스크립트로 가위바위보 게임 만들기 1

저는 현재 웹 개발 수업 중에 자바스크립트 언어를 배우고 있습니다. 과거 몇 년 전에 C언어를 하긴 했는데 다른 직종에 있느라 너무 오래 전이 되어버렸네요. 문법이 기억 날 듯 말 듯하면서 C언어와 자바스크립트의 기본 문법이 유사한 부분이 많더라고요. 덕분에 기억을 더듬으면서 하고 있습니다.

오늘은 상단의 알림창으로 '가위', '바위', '보'를 입력하면 랜덤한 값(컴퓨터)과 게임을 해 결과값을 알려주는 코드를 만들어 봤습니다.

알고리즘

1. 유저가 '가위', '바위', '보'를 입력하게 함.
- 적절하게 입력하지 않으면 다시 1번으로 돌아감.
2. 입력한 값을 비교하기 위한 숫자로 변환(유저의 값).
3. 랜덤한 값을 생성함(컴퓨터의 값).
4. 값을 서로 비교하여 결과를 알려줌.

html

<!DOCTYPE html> <html lang="ko"> <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>팝업으로 가위바위보하기</title> <link rel="stylesheet" href="css/style.css"> </head> <body> <ul> <li>COM</li> <li>USER</li> </ul> <div class="total-image"> <div id="com"></div> <div id="user"></div> </div> <div id="result"></div> </body> </html>


<div id="com"></div> 에는 코드로 계산한 랜덤한(컴퓨터의) 값을 이미지로 변환하여 넣을 것이고
<div id="user"></div> 에는 유저가 선택한 값을 이미지로 변환하여 넣을 곳이다.
<div id="result"></div> 에는 결과값을 출력할 것이다.

javascript

<script> // question에 유저가 선택한 값을 넣음 const question = prompt('가위, 바위, 보를 선택하세요'); // 가위바위보 값을 비교하기 위해 사용할 변수 let num; // 유저 선택에 따른 변수 값 switch(question){ case '가위' : num = 1; break; case '바위' : num = 2; break; case '보' : num = 3; break; default : alert('다시 입력해주세요'); location.reload(); } // 랜덤한 값을 올림을 얻는다 let random = Math.ceil(Math.random()*3); document.getElementById('com').innerHTML = '<img src="images/math_img_' + random + '.jpg">' //가위바위보 비교 연산 if(num == random){ document.getElementById('result').innerHTML = '비겼습니다.' }else if(((num > random && num > 1 && random < 3)||(num == 1 && random == 3))&&!(random == 1 && num == 3)){ //(num == 3 && random == 2) || (num == 2 && random == 1) || (num == 1 && random == 3) 또는 //(num == random + 1) || (num == 1 && random == 3) document.getElementById('result').innerHTML = '이겼습니다.' }else if((num < random && random > 1 && num < 3)||(random == 1 && num == 3)){ document.getElementById('result').innerHTML = '졌습니다.' } document.getElementById('user').innerHTML = '<img src="images/math_img_' + num + '.jpg">' </script>

본래 html코드에 바로 javascript를 넣었기 때문에 script 태그가 붙어있다.
코드에 주석을 달았기 때문에 설명이 다 되었지만 가위바위보 비교 연산이 복잡하게 되어있다. '이겼습니다' 코드를 살펴보면

else if(((num > random && num > 1 && random < 3)||(num == 1 && random == 3))&&!(random == 1 && num == 3))

숫자의 크기 비교를 통해 코드를 작성해서 불필요하게 길어졌지만 작동은 잘 된다. 사실 가위바위보에는 이기는 경우 3가지, 지는 경우 3가지밖에 없기 때문에 위의 같이 작성할 필요는 없다. 만약 가위바위보가 아닌 더 많은 종류가 있다면 이 코드가 좋겠지만 겨우 세 가지뿐이기에 대신에

(num == 3 && random == 2) || (num == 2 && random == 1) || (num == 1 && random == 3)
라고 더 간단하게 작성할 수 있을 것이다.

더 생각해보면 숫자의 크기 비교를 통해 값을 내고 싶다면 '가위' '바위' '보'에 각각 1, 2, 3이라는 단순한 값을 넣었기 때문에 이 값들은 차이가 1이 난다. 이 요소를 이용하면 더 간단하게

(num == random + 1) || (num == 1 && random == 3)
라고 작성할 수 있다.

세 가지 모두 해봤고 제대로 작동했다. 가위바위보를 팝업창이 아닌 버튼을 눌러서 게임하는 것도 만들고 있는데 그 때에는 제일 간단한 식인 맨 하단의 식을 이용할 것이다. 졌을 때에는
(num == random - 1) || (num == 3 && random == 1) 라고 작성하면 될 것이다.

css

@charset "UTF-8"; *{ margin: 0; padding: 0; list-style: none; } body{width: 70%; margin: auto;} ul{ display: flex; } ul li{ width: 50%; text-align: center; padding: 20px 0; font-weight: bold; } ul li:nth-child(2){ color: red; } .total-image{ display: flex; justify-content: space-between; height: 300px; border: 2px solid #333; background: #333; } .total-image img{ width: 100%; max-width: 100%; } .total-image div:nth-child(2) img{ /* 유저 이미지 반전 */ transform: scaleX(-1); } #result{ text-align: center; margin-top: 20px; font-size: 1.5em; font-weight: bold; }

보기 좋게 나타내기 위해 작성한 것 뿐이다.
transform : scaleX(-1); 는 이미지의 방향이 COM위주로 그려졌기 때문에 USER의 이미지를 보기 쉽게 하기 위해 이미지를 vertical 축으로 반전시켰다.


초기화면

prompt창에서 값을 입력합니다. 잘못된 값을 입력하면 '다시 입력하세요'라는 알림 창이 뜨고 다시 값을 입력할 수 있습니다.

선택창

 


값을 입력하면 COM의 랜덤한 값과 비교하여 결과값을 알려줍니다.

 

결과 값

 

728x90
Comments