더북(TheBook)

대부분 게임은 행동의 결과에 약간의 임의성을 부여하는 경우가 많다. 이 점을 고려하여 생각해볼 예제가 있는데, 게임 내 궁수가 보병을 명중시킬지 여부를 난수로 검사한다고 치자. 만일 플레이어 A의 인스턴스에선 궁수가 보병을 명중시켰는데, 플레이어 B의 인스턴스에선 명중하지 않았다면 즉각 플레이어의 눈에 띌 것이다. 이 문제를 해결하기 위해 유사 난수 발생기(pseudo-random number generator, PRNG)의 동작 원리에 주목해 보자. 유사 난수 발생기는 완벽한 난수가 아니라 어디까지나 난수와 ‘유사한’ 값을 도출하는데, 난수를 도출할 때 어떤 형태이건 시드(seed) 값, 즉 난수의 씨앗이 되는 값에서 유도하여 도출하므로 모든 게임 인스턴스의 시드 값만 똑같이 맞춰 주면 플레이어 A와 B 모두에서 같은 난수 결과가 도출되도록 보장할 수 있다. 단, 이때 명심할 점은 시드 값을 통일해 두어도 단 한 번이라도 서로 다른 횟수로 호출하면 더 이상 회차마다 같은 값이 나오지 않게 된다는 점이다. 그러므로 시드 값을 동기화하는 것도 중요하지만, 각 게임 인스턴스가 서로의 난수 발생기를 같은 횟수로 호출해야 한다는 것 또한 중요하다. 그러지 않으면 난수 결과가 서로 어긋나 동기화가 깨지게 된다. P2P 환경에서 유사 난수 발생기를 사용해 동기화하는 기법에 대해선 6장 네트워크 토폴로지와 예제 게임에서 더 알아보자.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.