基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法
基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法
Pierre Dellacherie算法感觉上像是一个遍历算法,给与各个参数不同的权重,使得更加合理的摆放方块
评估主要是6个参数:
LandingHeight:下落后的高度,方块最后不能下落之后,方块的重心(也就是中心点的高度),相当于高度越低越安全,我这里并没有记录每一个图形的中心点,统一为高度减去1,如图小方块Z下落之后高度为4,我这里需要重心,我就选择重心 - 1 = 3

ErodedPieceCellsMetric:消除贡献值=消除行数该方块参与消除的格子数。
例如,该情况下消除了2行,该方块提供了2个单位的格子。那么贡献值=2*2=4
RowTransitions:行变换数。按行遍历,从哪一行有方块开始计算,边界定义为有方块,从方块到空记作一次变换,从空到有方块在记作一次变化,如图
从有方块开始计算从上到下一次是4 + 4+2+4
BoardColTransitions:列变换数:同行变换数,只不过换成了按列遍历。(上下两侧算做边界)
BoardBuriedHoles:空洞数,空洞指的是,每列中某个方块下面没有方块的空白位置,该空白可能由 1 个单位或多个单位组成,但只要没有被方块隔断,都只算一个空洞。注意,空洞的计算以列为单位,若不同列的相邻空格连在一起,不可以将它们算作同一个空洞。如图所示

BoardWells:井数,就像是水井一样,空白的个数。井指的是某一列中,两边都有方块的连续空格,(左右两边看做实体)一定要注意两边都有方块才能看做是井。还需要注意井深度,井的深度是连续累加的。如图所示最右边深度为2,就是1+2,需要把井的深度做累加,如图所示已经标识的很清楚

权重的话,有人用小数,我这里为了方便计算全部乘以10作为整数计算了
#define LANDINGHEIGHT -45
#define ROWSELIMINATED 34
#define ROWTRANSITIONS -32
#define COLUMNTRANSITIONS -93
#define NUMBEROFHOLES -79
#define WELLSUMS -34
函数为:nValue = -45 × landingHeight + 34 × erodedPieceCellsMetric - 32 × boardRowTransitions - 93 × boardColTransitions - 79 × boardBuriedHoles - 34 × boardWells
即使所有数都会是负数,nValue 值大的为最优位置
如果出现两个局面评分相同那怎么办?这个时候需要加入一个计算优先度的函数,这个也很简单。公式: nPriority=100 * 板块需要水平移动移动的次数 + 板块需要选择的次数
PD算法的设计是 如果板块摆放再游戏区域的左侧优先度要加上10,那是因为他的那个游戏横向的小方格数量是10个,是一个偶数,而他的中心点在6这个位置。nPriority值小的为最优位置
以上就是Pierre Dellacherie算法的全部内容
获取某方块的所有形态可以放置的所有位置这个才是难点
基本的实现步骤是:
先确定总共有40中可能(方块为4中旋转方式,依照我这个方式来说,每一种可以摆放的列的位置是 0-9,因为有的方块的左侧是空白的,所以是0开始,方块最窄也是2,所以结尾是0)
行的话从上往下依次下降直到最后不能下降为止,就记作当前图形
得到所有形态可以放置的所有位置,计算各个参数
计算所有位置的nValue 值和nPriority值
比较值的大小找到最优位置
基于Pierre Dellacherie的俄罗斯方块-05Pierre Dellacherie算法的更多相关文章
- 基于OpenSLL的RSA加密应用(非算法)
基于OpenSLL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...
- 基于Matlab的MMSE的语音增强算法的研究
本课题隶属于学校的创新性课题研究项目.2012年就已经做完了,今天一并拿来发表. 目录: --基于谱减法的语音信号增强算法..................................... ...
- 美团网基于机器学习方法的POI品类推荐算法
美团网基于机器学习方法的POI品类推荐算法 前言 在美团商家数据中心(MDC),有超过100w的已校准审核的POI数据(我们一般将商家标示为POI,POI基础信息包括:门店名称.品类.电话.地址.坐标 ...
- 基于模糊Choquet积分的目标检测算法
本文根据论文:Fuzzy Integral for Moving Object Detection-FUZZ-IEEE_2008的内容及自己的理解而成,如果想了解更多细节,请参考原文.在背景建模中,我 ...
- 五种基于RGB色彩空间统计的皮肤检测算法
最近一直在研究多脸谱识别以及如何分辨多个皮肤区域是否是人脸的问题 网上找了很多资料,看了很多篇文章,将其中基于RGB色彩空间识别皮肤 的统计算法做了一下总结,统计识别方法主要是简单相比与很多其它基于 ...
- 《基于Arm实验箱的国密算法应用》课程设计 结题报告
<基于Arm实验箱的国密算法应用>课程设计 结题报告 小组成员姓名:20155206赵飞 20155220吴思其 20155234昝昕明 指导教师:娄嘉鹏 设计方案 题目要求:基于Arm实 ...
- 20155234 昝昕明《基于ARM实验箱的国密算法应用》课程设计个人报告
20155234 昝昕明<基于ARM实验箱的国密算法应用>课程设计个人报告 个人贡献 参与课设题目讨论及完成全过程: 资料收集: SM1算法及和ARM之间通信 负责串口代码调试: 协调完成 ...
- 基于OpenSSL的RSA加密应用(非算法)
基于OpenSSL的RSA加密应用(非算法) iOS开发中的小伙伴应该是经常用der和p12进行加密解密,而且在通常加密不止一种加密算法,还可以加点儿盐吧~本文章主要阐述的是在iOS中基于openSL ...
- 硕毕论文_基于 3D 卷积神经网络的行为识别算法研究
论文标题:基于 3D 卷积神经网络的行为识别算法研究 来源/作者机构情况: 中 国 地 质 大 学(北京),计算机学院,图像处理方向 解决问题/主要思想贡献: 1. 使用张量CP分解的原理, ...
- 基于搜索的贝叶斯网络结构学习算法-K2
基于搜索的贝叶斯网络结构学习算法-K2 2018-04-05 19:34:18 ItsBlue 阅读数 3172更多 分类专栏: 贝叶斯网络 网络结构学习 版权声明:本文为博主原创文章,遵循CC ...
随机推荐
- redis过期数据的底层存储结构
- 异步Udp监听关闭 出现异常,访问已释放的资源或者其他错误的解决方法
在开发异步Udp程序的过程中,通常在关闭UDP的时候回遇到诸如socket 访问已释放的资源之类的异常,如下简单操作下: 1 Udp的监听 2 this.serverSocket = new Sock ...
- Java字符串的一些函数方法
一.substring()方法 String str="123456"; String s1=str.substring(2); //s1="3456" Str ...
- 05 js利用ajax向服务器发送请求并返回json值
创建一个php $json = '';$data = array();$con =mysqli_connect($servername, $username, $password, $dbname); ...
- uniapp的子组件,当父组件下来刷新时,子组件一同刷新。
最近做uniapp项目的时候,使用给父组件一个刷新属性,父组件有效果,但是子组件没有反应,网上查找了很多方法,最终采取通过刷新时,函数传值,子组件监听的方式.具体做法可以参照:https://blog ...
- js-var,let ,const 的区别
变量提升: 在js预编译阶段,函数和变量的声明会被提前检索编译,打乱了编写时的声明顺序. 函数字面量表达式不会被提升 var a = function(){}; ex: console.log(a) ...
- springboot 日志处理
引言 springboot框架集成logback日志 logback是由log4j创始人设计的又一个开源日志组件.目前,logback分为三个模块:logback-core,logback-class ...
- redis远程连接错误SocketTimeoutException: connect timed out
redis远程连接错误SocketTimeoutException: connect timed out 解决方案: 编辑redis.conf文件(建议将其 先备份 编辑备份文件 启动redis服务时 ...
- C# 图片 等 文件 读取操作 的一点提示
源于:在读取图片时,总喜欢首先采用:Image img=Image.FromFile("");操作,这种方式由于 调用图片的程序与图片文件是通过 绝对地址关联的,会造成 当前进程或 ...
- 1004 Counting Leaves (30分)
今天在热心网友的督促下完成了第一道PAT编程题. 太久没有保持训练了,整个人都很懵. 解题方法: 1.读懂题意 2.分析重点 3.确定算法 4.代码实现 该题需要计算每层的叶子节点个数,所以选用BFS ...