2011-02-14 9 views
3

저는 Objective C를 처음 접했고, 처음에는 간단한 퐁 게임을 만들고 있습니다.목표 C 임의의 숫자

4 - arc4random() % 8 

그러나, 몇 가지 문제가 있습니다 : 내가 그러나

ballVelocity = CGPointMake(4 - arc4random() % 8,4 - arc4random() % 8); 

사용하고

이 새로운 라운드의 시작 부분에 공을 이동하려면 중요한 부분은 이것이다 무엇보다도 우선 난수를 생성하지는 않습니다. 시뮬레이터를 종료 한 후에 만 ​​다시 열면 새 번호가 생성됩니다. 둘째로, 나는 단지 -4와 -2 또는 2와 4 사이의 수를 생성하기를 원합니다.

저는 한 시간 동안 여기 저곳을 둘러 보았고 여전히 아무것도 찾을 수 없습니다. 나는 훨씬 더 단순한 PHP에 익숙하다.

감사합니다. 다시 말하지만, 여기 다른 질문을 보았습니다. 제안한 제안은 제가 원했던 것처럼 혼동하지 않습니다.

+0

rando가 필요합니까? m float 또는 그냥 임의의 정수? –

+0

임의의 정수입니다. – Gus

답변

9

arc4random()은 rand() 대신 iphone에서 선호되는 무작위 기능입니다. arc4random()에는 시드가 필요하지 않습니다.

int minus2_to_minus4 = (arc4random() % 3) - 4; 
int two_to_four = (arc4random() % 3) + 2; 
+0

rand() 함수는 더 작은 수 (int보다 작음)를 생성하고, 더 긴 대안은보다 고유 한 수 (long)를 생성하는 random()입니다. 둘 다 단 한 번만 시드되므로 성능이 모두 효율적입니다. rand()를 사용할 올바른 장소는 주로 초당 난수를 요구하는 수천 개의 요청을 갖는 while 루프입니다. arc4random()은 시드를 필요로하지 않으므로 고유성에 대한 성능에 영향을주는 요소를 자동으로 초기화합니다. 빈번하지 않은 호출 (수십 초당)에서 선호됩니다. – jold

3

rand() 함수를 살펴 봐야합니다. 기본적으로 시작 값을 "시드"하고 호출 할 때마다 새로운 난수를 반환합니다.

또는 arc4random을 사용하여 전체 예제가있는 this question을 확인하십시오.

+0

시드 (seeding)를 사용하여 rand()를 시도했지만 srand (time (NULL))를 다시 호출하더라도 동일한 난수가 생성됩니다. 나는 또한 그 질문을 보았고 나는 이것이 내가 이미하고있는 것이라고 생각한다. – Gus

0

이 당신에게 -4 -2 또는 2와 4

float low_bound = -4; //OR 2  
float high_bound = -2;//OR 4 
float rndValue = (((float)arc4random()/0x100000000)*(high_bound-low_bound)+low_bound); 

사이 부동 소수점 수를 줄 것이다 :

이 코드는 당신이 관심에있어 범위를 생성합니다 -4 ... -2 AND 2 ... 4의 숫자를 사용하려면 다음을 시도하십시오.

float low_bound = 2;  
float high_bound = 4; 
float rndValueTemp = (((float)arc4random()/0x100000000)*(high_bound-low_bound)+low_bound); 
float rndValue = ((float)arc4random()/0x100000000)<0.5?-rndValueTemp:rndValueTemp;