const threeModeBtn = document.body.querySelector("#three_mode");
const fiveModeBtn = document.body.querySelector("#five_mode");
let mode = "";
const input = document.body.querySelector("input");
const btn = document.body.querySelector("#play");
const userSpan = document.body.querySelector("#user_score");
const computerSpan = document.body.querySelector("#computer_score");
let userScore = 0;
let computerScore = 0;
function checkUser() {
const userInput = input.value;
// 문제) 이 변수 선언 부분을 함수 밖에 쓰면(2번째 줄) 작동 안함...
console.log(userInput);
if (userInput === "가위") {
return "가위";
} else if (userInput === "바위") {
return "바위";
} else if (userInput === "보") {
return "보";
} else {
return "error";
}
}
// 유저가 입력한 값이 가위,바위,보에 해당하는지 확인한 뒤 리턴. 잘못 입력되면 "error"로 알림.
function makeRandom() {
const random = Math.random() * 3;
if (random <= 1) {
return ["가위", random];
// 배열로 만들어 random을 저장한 것은 숫자에 따라 제대로 작동하는지 확인차.
} else if (random <= 2) {
return ["바위", random];
} else {
return ["보", random];
}
}
// 0에서 3까지 랜덤으로 생성되는 숫자를 이용해서 가위,바위,보 결정.
function compareResult(user) {
const randomResult = makeRandom();
const computerChoice = randomResult[0];
// 컴퓨터의 가위바위보 결과 저장.
const userChoice = user;
// *중요* 인자로 받은 user(뒤에서 실행될 때 userResult를 주게 됨) 값을 저장.
let winOrLose = "";
// 승패 여부를 저장할 변수 만듦.
if (
(userChoice === "가위" && computerChoice === "보") ||
(userChoice === "바위" && computerChoice === "가위") ||
(userChoice === "보" && computerChoice === "바위")
) {
winOrLose = "승";
} else if (
(userChoice === "바위" && computerChoice === "보") ||
(userChoice === "보" && computerChoice === "가위") ||
(userChoice === "가위" && computerChoice === "바위")
) {
winOrLose = "패";
} else {
winOrLose = "무승부";
}
return [userChoice, computerChoice, winOrLose];
// userChoice와 computerChoice의 값을 비교해서 승패와 함께 배열로 리턴.
}
function refreshScore(result) {
if (result === "승") {
userScore = userScore + 1;
} else if (result === "패") {
computerScore = computerScore + 1;
}
// 승패에 따라 스코어 업데이트.
userSpan.innerText = userScore;
computerSpan.innerText = computerScore;
// 바뀐 스코어를 html 코드(span)에 반영.
}
function alertWinner() {
if (mode === "three") {
if (userScore === 2) {
alert(
`최종스코어 ${userScore}대${computerScore}, 가위바위보 게임에서 승리했습니다.`
);
window.location.reload();
} else if (computerScore === 2) {
alert(
`최종스코어 ${userScore}대${computerScore}, 가위바위보 게임에서 패배했습니다.`
);
window.location.reload();
}
} else if (mode === "five") {
if (userScore === 3) {
alert(
`최종스코어 ${userScore}대${computerScore}, 가위바위보 게임에서 승리했습니다.`
);
window.location.reload();
} else if (computerScore === 3) {
alert(
`최종스코어 ${userScore}대${computerScore}, 가위바위보 게임에서 패배했습니다.`
);
window.location.reload();
}
}
}
function run(event) {
event.preventDefault();
// 새로고침되며 폼이 초기화되는 것 방지.
const userResult = checkUser();
// 유저가 폼에 입력한 결과를 받아서 변수로 저장.
if (userResult === "error") {
alert("가위, 바위, 보 중 하나를 입력하세요.");
// 유저가 잘못 입력해서 error를 받으면 경고창 띄움.
} else {
const result = compareResult(userResult);
// 유저가 잘 입력한 경우, 유저와 컴퓨터가 선택한 결과를 비교해서 승패 가름.
alert(`상대는 ${result[1]}를 냈습니다. 결과는 ${result[2]}입니다.`);
// 유저에게 결과를 알림.
refreshScore(result[2]);
alertWinner();
}
}
// 버튼을 클릭했을 때 일어날 동작.
btn.addEventListener("click", run);
function threeMode() {
mode = "three";
userScore = 0;
computerScore = 0;
refreshScore();
}
function fiveMode() {
mode = "five";
userScore = 0;
computerScore = 0;
refreshScore();
}
threeModeBtn.addEventListener("click", threeMode);
fiveModeBtn.addEventListener("click", fiveMode);
https://good-developer.tistory.com/47 addEventListener
[참고] https://www.thewordcracker.com/jquery-examples/refresh-current-page-using-javascript/ 새로고침
switch문 https://ko.javascript.info/switch
- if문이 많을 때 여러 case문을 이용한 switch문으로.
'TIL' 카테고리의 다른 글
[TIL-89] 위코드 사전스터디 자바스크립트 06 조건문 / 백준 알고리즘 (0) | 2022.01.06 |
---|---|
[TIL-88] 위코드 사전스터디 자바스크립트 01~05 (0) | 2022.01.05 |
[TIL-85~86] 위코드 사전스터디 2주차 : 로또 번호 만들기 (0) | 2021.12.30 |
[TIL-84] 위코드 사전스터디 1주차 과제: 자기소개 페이지 만들기 (0) | 2021.12.20 |
[TIL-83] 노마드코더 유튜브 클론코딩 #6.17~#6.19 (0) | 2021.12.16 |