游戏中按概率播放某个音效简单c++实现
熟悉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%这样精确,但基本上是可以做到按照给定的概率做出相应的选择的。
下面是测试代码:
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; }
效率上感觉不是很好,不过基本满足通过每项的权重计算概率,然后按照概率进行选择某一项了。
转载于:https://www.cnblogs.com/wainiwann/archive/2013/05/28/3103359.html
游戏中按概率播放某个音效简单c++实现相关推荐
- Ruby‘s Adventrue游戏制作笔记(十四)Unity播放游戏音效
Ruby's Adventrue游戏制作笔记(十四)Unity播放游戏音效 前言 一.创建背景音乐 二.创建新的脚本 三.在其他需要播放的所有脚本中进行操作 四.给敌人添加音效 五.给玩家添加移动音效 ...
- Unity中UGUI实现点击改按钮播放一个音效
项目开发完了,发现了一个问题,虽然不是什么严重的问题不影响游戏和谐,但是这个再用户体验上真的不是很好,什么问题呢,就是我们的按钮统一没有点击音效,这就很尴尬,所以要添加一下,虽然不是什么很难的功能,但 ...
- mp4 android自动播放,Android 使用VideoView播放MP4的简单实现
使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...
- java播放器使用教程_java 实现音乐播放器的简单实例
java 实现音乐播放器的简单实例 实现效果图: 代码如下 package cn.hncu.games; import java.applet.Applet; import java.applet.A ...
- boost::math模块计算二项式随机变量的概率和分位数的简单示例
boost::math模块计算二项式随机变量的概率和分位数的简单示例 实现功能 C++实现代码 实现功能 boost::math模块计算二项式随机变量的概率和分位数的简单示例 C++实现代码 #inc ...
- Android之播放一首简单的音乐
1.首先,创建一个项目,名为Mp3Test,创建完之后打开res目录下的layout下的activity_main.xml文件,打开src下的MainActivity.java文件,首先,先把布局文件 ...
- 图片播放器 简单使用
(1)前台_客户端: var focus_width=800;//图片宽 var focus_height=600;//图片高 var text_height=20;//字高 ...
- java音乐播放器视频_java 实现音乐播放器的简单实例
java 实现音乐播放器的简单实例 实现效果图: 代码如下 package cn.hncu.games; import java.applet.Applet; import java.applet.A ...
- android 播放静态mp4,Android 使用VideoView播放MP4的简单实现
使用VideoView播放MP4 播放示例 实现简单的播放功能,播放手机本地的MP4文件.不依赖任何第三方框架,不添加任何防腐剂. 添加一个系统自带的控制条. 申请权限 读取存储中的MP4文件 准备布 ...
- iOS开发——播放系统音效、自定义音效
播放系统音效.自定义音效工具类 需求大致分为三种: 1.震动 2.系统音效(无需提供音频文件) 3.自定义音效(需提供音频文件) 我的工具类的封装: // // WQPlaySound.h // WQ ...
最新文章
- python3文件下载-python3获取文件中url内容并下载代码实例
- emoji隐藏表情_除了TouchBar可以快捷输入Emoji表情 这个快捷键也能做到
- 程序员应该具备的能力
- win10计算机本地无法连接,win10无法连接到这个网络怎么办_win10无法连接到这个网络如何解决...
- javacv入门指南:序章_建立开放文化的循序渐进指南
- oracle导出自增设置,oracle008:oracle自增,自适应,数据闪回,导入导出
- hnu 暑期实训之最少钱币数
- 我眼中的Visual Studio 2010架“.NET研究”构工具
- 习题:交换一组数据的位置
- Session的常用场景
- 《算法分析》——布线问题
- 论文|Jointly Pre-Training Transformers on Unpaired Images and Text
- 手机语言 Symbian 术语表
- 小爱同学语音API(不需要小米账号)
- .Net Framework 0x800b0109 -已处理证书链,但是在不受信任提供程序信任的根证书中终止。
- Cython基础--Cython的函数
- 计算机c盘那个是系统文件夹,C盘有哪些文件可以删除?可以手动删除的几个C盘中的文件夹...
- 深圳打卡(四) 红树林与深圳湾公园
- selenium实战 登录后菜单作业分享(白月黑羽网站selenium自动化学习)
- php7支持画,画一多边形并填充 - PHP 7 中文文档
热门文章
- python - break和continue
- GIT的使用中的问题处理
- [android] android下文件访问的权限
- VMware VirtualBox共存时桥接注意
- 汇编语言基础之二 - 各种寻址和过程进出简介
- java.lang.RuntimeException: Package manager has died
- [数据结构]树状数组详解
- nodejs后台系列--第四篇--koa
- cefsharp.core.dll找不到指定模块_DeepFaceLab错误:DLL Load failed 找不到指定模块!
- python爬虫定时运行_python 爬虫 定时计划任务