给定一个浮点数,如何将它映射到枚举类似
{FAIL,POOR,OK,GOOD,EXCELLENT,PERFECT}
如果分歧不均匀.
0.0-0.4失败
0.4-0.6 很差
...
0.8-0.999 ..优秀
1.0是完美的
浮动是根据游戏中所有玩过的等级计算的等级值.它的范围从0..1,包括两者.通常不需要超过10个分区,但是在开发过程中间距会受到调整.
我目前正在使用一堆if..else语句.这是正确的方法吗?看起来有点脆弱.
使用一个结构数组 - 静态分配或动态 - 然后一个简单的例程来搜索它 - 如果它只是迭代,如果它的大,你可以进行二进制搜索.
如您所知,最小(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 }
};
Run Code Online (Sandbox Code Playgroud)
现在sizeof(Divisions)/sizeof(RatingDivision)将告诉您条目的数量(二进制搜索所需),或者只是迭代直到您要查找的值<= Divisions[i].upperBound返回Divisions[i].score或者没有匹配的upperBound到达1.0并处理错误.
| 归档时间: |
|
| 查看次数: |
1453 次 |
| 最近记录: |