게임 개발을 하다보면 랜덤 함수는 거의 필수라 할 수 있다.
3Match 게임을 만들 때에도 랜덤으로 블록을 배치하기 위해 사용해야한다.
이 때 블록 타입을 랜덤으로 가져오는데 우연의 일치로 모든 랜덤 값이 동일하게 나온다면
모든 블록이 동일해지고 참으로 재미없는 일이 발생 할 것이다.
이러한 경우 원하는 블록타입을 하나씩 배치하기 위해서 중복없이 랜덤 값을 가져와야 한다.
C / C++ Function (shffle 라는 함수를 하나 만든다.)
void shuffle(int *data, int size)
{
int temp = 0;
for (int i = 0; i < size; ++i) {
int randNum = getRandomNumber(0, size - 1);
temp = data[randNum];
data[randNum] = data[i];
data[i] = temp;
}
}
사용 예
// 10개의 블록 타입이 있다고 가정하고 0 ~ 9 까지 담고 있는 배열을 만든다.
#define MAX_BLOCK_TYPE 10
int arrayBlockNum[MAX_BLOCK_TYPE] = {0, };
for (int i = 0; i < MAX_BLOCK_TYPE; ++i)
{
arrayBlockNum[i] = i + 1;
}
// 블록 타입을 담은 배열과 사이즈를 함수에 파라메터로 넘긴다.
shuffle(arrayBlockNum, MAX_BLOCK_TYPE);
위와 같이 해주면 배열안에 값들을 서로 바꿔주는 셔플 기능이기때문에
0번째 배열부터 순차적으로 사용해도 배열안에 값들은 무엇이 나올지 모른다.
0~9번 배열까지 하나씩만 사용할 경우 중복 없이 랜덤 값을 가져올 수 있다.
1씩 증가하는 정수가 아니더라도 랜덤으로 뽑을 수를 배열에 넣고 셔플을 하면
중복 없이 가져 올 수 있다.
[주의]
셔플을 한다고 해도 0번 배열에 값을 여러번 사용 하면 중복 값이 되니 한번 사용한 배열의 값은 필요한 경우가 아니라면
사용하지말자!! ^^
'- C , C++' 카테고리의 다른 글
[ C, C++] 소수점 이하 올림과 내림 함수 (0) | 2016.10.01 |
---|---|
[ C, C++ ] x의 n승 구하기 (0) | 2016.09.30 |
[ C / C++ ] for문에서 i++ 와 ++i 의 차이 (3) | 2015.08.28 |
[ C / C++ ] 간단한 삽입 정렬 (0) | 2015.08.27 |