• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

computerValue 만들 때..

22.03.11 17:19 작성 조회수 141

0

안녕하세요 좋은 강의 잘 듣고 있습니다
 
다름이 아니오라,
computerValue 값을 만들 때 0~32767까지가 총 32768개의 숫자라서 0,1,2가 나올 확률이 실제로는 10922/32768, 10923/32768, 10923/32768로 미세한 차이가 날 것 같은데 이 미세한 차이까지도 맞춰주는 방법이 있을지가 궁금합니다!
 
그리고 1번째 예제를 직접 만들었을 때
처음에는 while(true) 안에 switch를 쓰고 그 안에 if-else if-else를 쓰는 방식으로 만들었습니다.
그런데 직접 실행시켰더니 마지막 default 쪽에서 break를 걸어놓아도 switch까지만 break를 하고 while 내에서 계속 작동이 되었고 결국 해결을 못했습니다...이 경우는 어떻게 해결할 수 있을까요?
 
마지막으로 input과 computerValue를 while 내에 넣어주셨는데 computerValue를 그렇게 하신 이유는 이해가 되었지만(매번 value값 갱신을 해야해서) input의 경우는 잘 모르겠습니다...그냥 main 내에만 넣는 것과 유의미한 차이가 있는 것인가요?
 
감사합니다!

답변 1

답변을 작성해보세요.

0

1)
0~32767 값을 여러번 굴릴 수 있으니 수학적인 방법을 찾거나,
추후 추가되는 표준 라이브러리를 이용하면 됩니다.
https://modoocode.com/304

2)
bool 값을 두고 이중으로 break해야 할지를 확인하는 방법 등이 있는데,
자주 나오는 패턴입니다.

3)
input도 다시 입력 받으면 값이 갱신되니,
어디다 넣더라도 성능상 100% 동일합니다. (스택 메모리에 위치한 변수)
(input이 int가 아니라 class라면 기본 생성자가 실행되는 차이는 생기긴 합니다.)
다만 관리 차원에서 변수를 사용하는 시점에 선언해서 사용하는게 훨씬 좋습니다.

한울님의 프로필

한울

질문자

2022.03.11

그렇군요..감사합니다!

한울님의 프로필

한울

질문자

2022.03.15

1가지 더 궁금한 게 있는데

예제를 실행할 때 srand(time(0)) 부분에서

'time_t에서 unsigned int로 변환하면서 데이터가 손실될 수 있습니다'라는 경고가 나오는데 srand(unsigned int(time(0)));로 바꾸니 경고가 사라졌습니다

관련 내용을 검색하니 time 함수가 요구하는 인자값이 unsigned int인데 실제값은 int라서 발생한다고 하는데

그렇다면 srand(time(unsigned int(0)));가 오히려 맞는 거 같았습니다...

그런데 그렇게 고치자

'time_t time(time_t *const )': 인수 1을(를) 'unsigned int'에서 'time_t *const '(으)로 변환할 수 없습니다. 라는 경고도 아닌 에러가 발생합니다...

왜 이런 것인가요?