(C++) 스마트팩토리 - 21일

내 이름 안찬찬·2023년 2월 26일
0
post-thumbnail

우선 오랜만에 작성을 한다..
C++ 기초에 대한 수업이 끝나고 개인적으로 자그마한 문제를 내어주신 것(6 문제)에 대해 풀어보았고, 이제는 정리해서 올릴 때가 되었다!

그 사이에 POSCO에서 주관하는 부트캠프 답게 포스코 견학도 다녀오게 되었다.

쉽게 하지 못 할 새로운 경험이었고, 재밌었음!

이제 데이터베이스에 대한 수업으로 넘어가야 하기도 하고 ~~

아무튼 그동안 쌓인 26회차까지 하루만에 올릴 것이라는 얘기..!

베스킨라빈스 31

C++로 콘솔게임 배스킨라빈스 31을 만들어보자!

서로 최소 1~3개씩 연속된 숫자를 말하고 31이라는 숫자를 말하는 사람이 지는 게임

- 사용자는 보인이 입력한 숫자만큼.
- 컴퓨터는 랜덤 숫자만큼.
- 단, 사용자와 컴퓨터 모두 1~3사이의 숫자만 가능

코드와 설명

#include <iostream>
#include <cstdlib>  // rand() 사용을 위한 헤더파일
#include <ctime>    // srand() 사용을 위한 헤더파일

// using namespace std; 
// 코드를 작성할 때 편리하지만, 이름 충돌 문제가 발생할 수 있으므로 피하는 것이 좋다.
using std::cin;
using std::cout;
using std::endl;

const int MAX_NUMBER = 3;       // 입력 가능한 숫자의 최댓값
const int WINNING_NUMBER = 31;  // 승리하기 위해 가져야 하는 숫자

int main() {
  int currentCount = 0;
  bool win = true;         // 승자
  bool isUserTurn = true;  // false: 컴퓨터, true: 사용자

  srand((unsigned int)time(NULL));  // rand() 함수를 사용하기 전에 한 번만 호출

  while (currentCount < WINNING_NUMBER) {
    int num = 0;

    if (isUserTurn) {
      cout << "1에서 " << MAX_NUMBER << "까지의 숫자를 입력하세요: ";
      cin >> num;
      while (num < 1 ||
             num > MAX_NUMBER) {  // 입력값이 유효한 범위 내에 있는지 확인
        cout << "잘못된 입력입니다!!\n1에서 " << MAX_NUMBER
             << "까지의 숫자를 입력하세요: ";
        cin >> num;
      }
      isUserTurn = false;
    } else {
      num = rand() % MAX_NUMBER + 1;
      cout << "컴퓨터 입력: ";
      cout << num << endl;
      isUserTurn = true;
    }

    currentCount += num;
    cout << currentCount << endl;
  }
  cout << endl;
  isUserTurn ? cout << "심판: 컴퓨터가 31을 말해버렸습니다!!\n사용자의 승리!"
             : cout << "심판 : 사용자가 31을 말해버렸습니다!!\n컴퓨터의 승리!";

  return 0;
}
  1. 헤더 파일은 C++에서 C 라이브러리 함수의 선언을 포함하고 있다.
    이 코드에서는 rand() 함수를 사용하기 위해 추가되었다.

  2. 헤더 파일은 C++에서 시간과 관련된 함수와 타입의 선언을 포함하고 있다.
    이 코드에서는 srand() 함수를 사용하기 위해 추가되었다.

  3. srand() 함수를 사용하여 rand() 함수가 난수를 생성할 때 사용하는 시드 값을 설정한다. srand() 함수는 프로그램이 실행될 때 한 번만 호출되며, 시드 값을 설정하지 않으면 rand() 함수는 항상 같은 수열의 난수를 생성한다.

  4. const 키워드
    상수는 값을 변경할 수 없는 변수로, 값을 변경하려고 하면 컴파일러가 오류를 발생시킨다. 또한 상수를 사용하면 코드의 가독성을 높일 수 있다.

  5. 상수 MAX_NUMBER와 WINNING_NUMBER를 정의한다.
    MAX_NUMBER는 사용자가 입력할 수 있는 최대 숫자이고,
    WINNING_NUMBER는 게임에서 이길 수 있는 최대 숫자이다.

  6. main() 함수에서 currentCount 변수를 초기화하고, win 변수를 true로 초기화한다.

  7. while 루프는 currentCount 변수가 WINNING_NUMBER 보다 작은 동안 계속 반복된다.

  8. num 변수를 선언하고, isUserTurn 변수에 따라 사용자나 컴퓨터가 숫자를 입력한다. 컴퓨터가 숫자를 입력할 때에는 rand() 함수를 사용하여 1에서 MAX_NUMBER까지의 무작위 숫자를 생성한다.

  9. currentCount 변수에 num 값을 더하고, 현재 숫자를 출력한다

  10. isUserTurn 변수를 반전시킨다.
    즉, 사용자가 입력했을 때에는 컴퓨터의 차례가 되고,
    컴퓨터가 입력했을 때에는 사용자의 차례가 된다.

  11. while 루프가 종료된 후, 게임의 승자를 결정하고 결과를 출력한다.
    isUserTurn 변수가 true일 때에는 컴퓨터가 승리하고,
    false일 때에는 사용자가 승리한다.



마무리

처음 작성한 코드에서 많은 부분을 수정하였다.
코드에 맞는 적절한 주석을 추가하여 가독성이 높아지도록 했고,
변수명을 좀 더 명확하게 지었다.
using namespace std는 강사님께서도 일찍이 알려주신 충돌문제를 고려하였다.

코드가 돌아가기만 하면 다가 아니라는 것을 학교다니면서도 느꼈지만,
당장 작업을 할 때는 계속 편한 방법으로만 하려고 하는 것을 고치는 시간이었다.

이 짧은 코드에 처음 작성했던 것들이 얼마나 수정이 되었는지..

마무리하는데에만 급급하면 안 된다는 것을 다시금 느낄 수 있었다.

profile
스마트팩토리 개발자가 되기 위한 □□ !!

0개의 댓글