본문 바로가기
개발/차근차근 개발일지 TIL

230405 TIL 2인 1조 팀과제-야구게임 만들기 (거의 완성)

by 코딩하는짱구 2023. 4. 5.
반응형

230405 TIL 2인 1조 팀과제-야구게임 만들기


기분 너무 좋다!!!!!!!!!!!!!!!!!

비로소 개발의 재미를 조금이나마 느낀듯한 이 기분 !!

 

진짜 ..처음 이 과제를 접했을 땐 정말 눈앞이 캄캄했고, 아무 생각도 안들었다.

'뭘 검색해야 하는지' 조차 모르는 상태라 2시간..3시간 보고있어도 아무 진전이 없었는데, 

조원(팀장)이 툭 툭 던져주는 힌트와 구글링으로 여기까지 온 나 자신 너무 기특하다. 

 

(일화로, 중간에 팀과제의 조건을 챗 GPT에 쳐보라는 조언을 들었다.

이때까지만 해도 난 GPT를 이용해본 적이 없어서 긴가 민가 하고 쳐봤는데,

왠걸 코드까지 다 짜주더라. 

처음엔 너~무 신기했지만 바로 들었던 생각은 .. 내가 이거 보고 하면 내 머릿속에 남는건 없겠다 였다. 

다행히 조원 분도 GPT의존 없이 최대한 스스로 알아가자는 주의셔서 서로 서로 의논하며 한걸음 한걸음 발전할 수 있었던 것 같다. 하지만 지금 코드를 다 완성하고 보니 ..GPT에서 짜줬던 코드를 봤더라도 내가 이해할 수 있었을까 싶다 ㅋㅋ 또 GPT에서 짜준 코드가 완벽하지 않아서, 필요한 것을 검색하여 보완 수정해야한다는 점. )

 

코드 내용보다 주석이 더 많은거 보이시나요..? 

개발을 공부하다 보니 우선 코드를 짤 때 큰 틀을 만들어 놓고, 그 안에서도 단계별로 어떻게 진행할 것인지,

그렇게 진행해서 어떤 값을 받을 것인지, 그 값을 또 어떻게 이용할 것인지 계획을 짜는게 정말 중요한 것 같다.

그것들을 표기하다보니 주석이 얼마나 중요한지 알겠다!

 

이 프로젝트의 핵심.

1. 랜덤한 세개의 숫자를 뽑아 중복되지 않는 숫자를 만든다.

2. 추출된 세자리 숫자와 비교할 세자리 숫자를 입력할 수 있게 한다.

3. 세자리 숫자의 값(즉 index의 값)을 각 각 비교하여 S(strike),B(ball)로 표현한다.

    여기서 중요한 포인트가 있는데, 

    우리가 CHECKING 하여 값을 메길 수 있는 조건은 S,B 단 두개이니, 

    요소를 비교할때 나오는 경우의 수를 생각해보자.

     a. 요소(숫자)&위치 다 정확히 맞는 경우 즉 완전일치 : STRIKE 

     b. 요소만 맞는 경우 즉 부분일치 : BALL

     c. 같은 위치나 요소가 다 없는 경우 : 값을 주지 않음

    

따라서 아래와 같은 for 문으로 S,B의 값을 도출할 수 있다! 

for (let i = 0; i < 3; i++) {
    //i는 index임!!!!!!!!!!!!!!숫자가 아님을 인지. 즉 위치라는 뜻;
    //여기서는 S,B가 몇개인지 알려주는 단계.
    if (input[i] === threeNums[i]) {
      //input과 threeNums의 위치가 정확히 일치할 시.
      strike += 1; //STRIKE가 몇개인지 알려주는 개념, 즉 S가 3개 나와야 끝남.
    } else if (threeNums.includes(input[i])) {
      ball += 1;
    }
  } //여기까지는 strike 가 3개가 될때까지 for 루프를 사용하여 s,b 개수를 계산하라는 명령.

 

4. s<3 일때 for문을 돌리고, 아닐 시 종료함. 

 

 

// //2023.04.05

// //

const prompt = require("prompt-sync")();

let numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
let result = []; //ranResult는 배열, 즉 1개 각각의 배열을 3개 합쳐서 문자화 시킬것.

for (let i = 0; i < 3; i++) {
  let index = Math.floor(Math.random() * numbers.length);
  result.push(numbers[index]);
  numbers.splice(index, 1);
}

let threeNums = result.join("");

console.log(threeNums);

//사용자가 입력한 값을 저장하는 변수가 필요함. guess
//사용자가 시도한 횟수를 저장하는 변수가 필요함. attempts

//그 변수들을 초기화 해서 while문을 돌려야함 while 문---~조건을 충족하기 전까진 계속 같은 작업을 함

//랜덤숫자 : 123
//내 숫자 : 369

//1. 꼭맞는다. 내숫자 123 -> 맞았습니다. 후에 break
//2. 안맞는경우->
//-> B, S

//S은 B가 될 수 있지만
//B는 S가 될 수 없다.

//for 문을 써야됌 -> [3,6,9] 혹은 '문자열 369[n]'
//길이만큼 for문 돌리는데 문자열인 숫자의 인덱스로 확인한다면?

//입력받은 숫자는 3자리  i(인덱스)->0,1,2

let input = prompt("컴퓨터가 숫자를 생성하였습니다. 답을 맞춰보세요!"); //string 으로 들어오고 그걸 배열화해서 비교
let strike = 0;
let ball = 0;
let attempts = 0;

while (strike < 3) {
  attempts++; //시도한 횟수 증가
  for (let i = 0; i < 3; i++) {
    //i는 index임!!!!!!!!!!!!!!숫자가 아님을 인지. 즉 위치라는 뜻;
    //여기서는 S,B가 몇개인지 알려주는 단계.
    if (input[i] === threeNums[i]) {
      //input과 threeNums의 위치가 정확히 일치할 시.
      strike += 1; //STRIKE가 몇개인지 알려주는 개념, 즉 S가 3개 나와야 끝남.
    } else if (threeNums.includes(input[i])) {
      ball += 1;
    }
  } //여기까지는 strike 가 3개가 될때까지 for 루프를 사용하여 s,b 개수를 계산하라는 명령.

  //여기서부터 만약 스트라이크가 3 미만일시 계속해서 게임 진행.
  if (strike < 3) {
    console.log(`${attempts}번째 시도`);
    console.log(`S ${strike}, B ${ball}`); //자 이제 스트라이크가 3번 나오면 게임을 끝내야죠.
    input = prompt("숫자를 입력하세요 (세 자리 수):");
    strike = 0; //strike가 3개 미만일시 if(strke<3) 구문에서 s,b개수를 출력하고, 다시 input을 받음.
    ball = 0; //다시 input 받을땐 s,b를 초기화 해줘야 0부터 시작가능.
  }
}
console.log(`${attempts}번 만에 맞추셨습니다. 게임 종료!`); //``백틱을 써준 이유는?

// // 정수 셋팅
// // if()문과 비슷함 'a'의 값이 10보다 작은동안 반복
// var a = 1;
// while(a < 10){
//     console.log("a의 시작값 : " + a);

//'a'의 값이 '7'이면 반복문을 빠져 나갑니다.
//         if(a == 7){
//         console.log("break 시점의 a의 값 : " + a);
//         break;
//     }
//     a++;
// }

//statement

// if (final === userInput) {
//   return "S";
// } else {
//   return "B";
// }

// console.log(compare());

 

반응형