游戏中按概率播放某个音效简单c++实现
2013-05-28 12:19
483 查看
熟悉xact的都知道一个cue可以对应多个sound。在播放某个cue的时候xact会按照每个sound播放概率进行选择某个sound然后进行下面的播放。
在这里简单的使用rand进行一个模拟通过概率选择某一项的实现。
假设有四个sound对应的概率分别为:
A——%20
B——%40
C——%10
D——%30
假设100%概率的话,可以简单的指定0-100对应上面的每项的概率。
A————对应100内的(0-19)20%
B————对应100内的(20-59)40%
C————对应100内的(60-69)10%
D————对应100内的(70-99)30%
这里使用rand()所求得出的概率尽管不能绝对的和上面类似20%这样精确,但基本上是可以做到按照给定的概率做出相应的选择的。
下面是测试代码:
今天在实际实现的时候发现了一些小问题,例如在使用rand()的时候,如果只获取一次的话,那它第一次执行的值永远是相同的,所以需要修改下逻辑。还有就是有可能让你通过概率选择的个数不固定,所以这些都是要考虑的范围。
下面是修正版测试代码:
效率上感觉不是很好,不过基本满足通过每项的权重计算概率,然后按照概率进行选择某一项了。
在这里简单的使用rand进行一个模拟通过概率选择某一项的实现。
假设有四个sound对应的概率分别为:
A——%20
B——%40
C——%10
D——%30
假设100%概率的话,可以简单的指定0-100对应上面的每项的概率。
A————对应100内的(0-19)20%
B————对应100内的(20-59)40%
C————对应100内的(60-69)10%
D————对应100内的(70-99)30%
这里使用rand()所求得出的概率尽管不能绝对的和上面类似20%这样精确,但基本上是可以做到按照给定的概率做出相应的选择的。
下面是测试代码:
void main() { int ia(0),ib(0),ic(0),id(0); for(int i = 0;i<100;i++) { int n = rand() % 100; if(n<=19) { ia++; cout << "A"<<endl; }else if(n<=59) { ib++; cout << "B"<<endl; }else if(n<=69) { ic++; cout << "C"<<endl; }else { id++; cout << "D"<<endl; } } cout << "A=%"<<ia<<endl; cout << "B=%"<<ib<<endl; cout << "C=%"<<ic<<endl; cout << "D=%"<<id<<endl; system("pause"); }
今天在实际实现的时候发现了一些小问题,例如在使用rand()的时候,如果只获取一次的话,那它第一次执行的值永远是相同的,所以需要修改下逻辑。还有就是有可能让你通过概率选择的个数不固定,所以这些都是要考虑的范围。
下面是修正版测试代码:
struct stSound { string Name; int weight; } string GetSelectName(vector<stSound> *vecSound) { int sum = 0; int ia = 0; vector<int> vecTemp; for(int i =0;i<vecSound.size();i++) { sum += vecSound.at(i).weight; } for(int i =0;i<vecSound.size();i++) { ia += ((vecSound.at(i).weight)*100) / sum; int nRange = ia; vecTemp.push_back(nRange); } srand((unsigned int)time(0));//解决rand()执行第一次值都相等的问题 int iVlau = rand()%100; for(int i = 0;i<vecTemp.size();i++) { //解决通过概率选择的个数不固定的问题 if(iVlau == vecTemp.at(i)) { return vecSound.at(i).Name; } } return NULL; }
效率上感觉不是很好,不过基本满足通过每项的权重计算概率,然后按照概率进行选择某一项了。
相关文章推荐
- 游戏中按概率播放某个音效简单c++实现
- 课程设计(打字游戏)设计功能实现之---简单的音乐mp3播放功能实现
- ios-播放音效的简单实现
- Android游戏开发中使用SoundPool来实现音效的播放
- iOS开发中对音效和音乐播放的简单实现
- Java 简单拼图游戏(实现音乐播放功能)
- VS下用C++实现的简单3D射击游戏(附游戏文件与源工程代码)
- 讲解iOS开发中对音效和音乐播放的简单实现
- 【贪吃蛇,C++实现】,由简单游戏开始学习OOP,的编程新手
- 【C++游戏】2048的实现和简单AI
- iOS App中实现播放音效和音乐功能的简单示例
- C++实现简单的分牌游戏
- c++ 简单模拟实现 游戏定时开启任务
- 一个简单的游戏引擎核心状态机的C++实现
- iOS开发,音效的播放简单实现以及音效播放的简单封装
- J2ME游戏开发中时钟的简单实现
- 一个linux下简单的纯C++实现Http请求类(GET,POST,上传,下载)
- C++实现注册表简单操作
- 从零开始学C++之重载 operator new 和 operator delete 实现一个简单内存泄漏跟踪器
- 一个简单的多叉树C++实现