2012-01-15 3 views
2

는 플로트 감안할 경우의 긴 스택없이 열거에 float를지도하는 방법,

{FAIL, 가난한, OK, GOOD, 우수한, 완벽한}

같은 열거에 매핑하는 방법

부서가 짝수가 아니면.

0.0-0.4는
0.8-0.999가 ..
1.0 플로트가 평가 값 산출

완벽 우수한 ...
0.4-0.6 불량
이다 FAIL이다 게임에서 모든 레벨을 플레이하십시오. 범위는 모두 0..1입니다. 일반적으로 약 10 개 이상의 부서가 필요하지만 개발 간격 중에는 조정이 필요할 수 있습니다.

현재 if..else 문 스택을 사용하고 있습니다. 그것이 올바른 방법인가요? 조금 부서지기 쉬운 것 같습니다.

답변

5

정적으로 할당되거나 동적 인 구조체의 배열을 사용하고 검색하는 간단한 루틴을 사용합니다. 크기가 작 으면 반복 만하면 이진 검색을 수행 할 수 있습니다.

최소값 (0.0)과 최대 값 (1.0)을 알고 있으므로 범위와 열거 형 값의 상한값 만 저장하면됩니다. 예 :

이제
typedef enum {FAIL, POOR, OK, GOOD, EXCELLENT, PERFECT} Rating; 

typedef struct 
{ 
    float upperBound; 
    Rating score; 
} RatingDivision; 

static RatingDivision Divisions[] = 
{ 
    { 0.4, FAIL }, 
    { 0.6, POOR }, 
    ... 
    { 0.999, EXCELLENT }, 
    { 1.0, PERFECT } 
}; 

sizeof(Divisions)/sizeof(RatingDivision) 당신에게 항목의 수 (이진 검색에 필요한)를 말해, 또는 당신이 <= Divisions[i].upperBoundDivisions[i].score 또는 upperBound을 반환 찾고있는 값이없는 경기로 1.0에 도달 할 때까지 반복하고 처리합니다 오류.

3

병렬 배열을 사용할 수 있습니다 : 임계 값 부동 소수점 값의 배열과 같은 크기의 열거 형 값 배열을 사용하십시오. float 배열의 각 값을 검사하고 임계 값을 초과하면 열거 형 값을 반환하는 단일 짧은 루프를 사용할 수 있습니다.