TetrisAI--AI玩俄罗斯方块--基于Pierre Dellacherie算法

摆放一个板块的策略是:板块放置的位置越靠下越好,方块之间越紧密越好,自身对消除行的方块贡献数量越多越好。

 不可为了追求消除行数,而去造成过多的空洞,这样也是不合理的。

参数:

  • landingHeight:指当前板块放置之后,板块重心距离游戏区域底部的距离。(也就是小方块的海拔高度)
  • erodedPieceCellsMetric:这是消除参数的体现,他代表的是消除的行数与当前摆放的板块中被消除的小方块的格数的乘积。 举个例子:下面这个例子就是说明红色的小方块下落之后会消除2行,而且自身贡献的小方格数是3个,所以返回值是3*2=6 

boardRowTransitions:对于每一行小方格,从左往右看,从无小方格到有小方格是一种“变换”,从有小方格到无小方格也是一种“变换”,这个属性是各行中“变换”之和

 

 

  • 上面这张图片中用黑色边框标注的即为一次“变换”,第一行为7次变换,第二行为6次变换

boardColTransitions:这是每一列的变换次数之和

 boardBuriedHoles:各列中的“空洞的小方格数之和”

  • 如图所示,空洞数为6
  • boardWells:各列中“井”的深度的连加和 
  • “井”的定义是,两边(包括边界)都有方块填充的空列。

 

  • 如图所示,以两边的最低边为“井”的开始,图中一共有两个“井”,深度分别为2和3,
  • 所以这个图返回的boardWells值应该是(1+2)+(1+2+3)= 9

 

Pierre Dellacherie算法评估函数

value = -landingHeight + erodedPieceCellsMetric - boardRowTransitions - boardColTransitions - (4 * boardBuriedHoles) - boardWells
根据各指标的权重的经验值修改评估函数为:value = -45 × landingHeight + 34 × erodedPieceCellsMetric - 32 × boardRowTransitions - 93 × boardColTransitions - (79 × boardBuriedHoles) - 34 × boardWells
value值大的为最优位置,你没看错就是大的是最优,即使所有数都会是负数


要出现两个局面评分相同那怎么办呢?这个时候需要加入一个计算优先度的函数,这个也很简单。公式如下: 
priority=100 * 板块需要水平移动移动的次数 + 板块需要选择的次数
(ps:可能PD算法的设计是 如果板块摆放再游戏区域的左侧优先度要加上10,那是因为他的那个游戏横向的小方格数量是10个,是一个偶数,而他的中心点在6这个位置。)priority值小的为最优位置

以上就是Pierre Dellacherie算法的全部内容 

 难在第一步,获取某方块的所有形态可以放置的所有位置这个才是难点。 
基本的实现步骤是: 
- 1. 获取某方块的所有形态可以放置的所有位置 
- 2. 计算所有位置的value值和priority值 
- 3. 比较值的大小找到最优位置

 

 

  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 思路如下: 1. 首先需要使用 Python 编写俄罗斯方块游戏的人机对战系统,可以使用 Pygame 库来实现。 2. 接着需要实现 Pierre Dellacherie 算法,该算法是一种经典的自动俄罗斯方块算法,可以使计算机自动完成俄罗斯方块游戏。 3. 在人机对战系统中,需要将 Pierre Dellacherie 算法与人类家进行对战,实现真正的人机对战。 4. 在游戏过程中,需要收集游戏数据,包括每个方块的位置、形状、旋转状态以及游戏得分等信息,将这些数据保存至文件中。 5. 接下来需要使用 DNQ(深度权重网络)算法读取保存在文件中的游戏数据,并进行训练,以便计算机能够更好地学习俄罗斯方块的策略。 6. 训练完成后,可以让计算机使用该算法自动俄罗斯方块,也可以将其应用于其他类似的游戏中。 需要注意的是,在实现人机对战系统和自动俄罗斯方块的过程中,需要考虑游戏的速度、画面刷新率、键盘响应等问题,以确保游戏的流畅性和稳定性。 ### 回答2: 俄罗斯方块是一款经典的游戏,人机对战系统可以提供更丰富的游戏体验。以下是基于Python的俄罗斯方块人机对战系统的完善思路: 1. 游戏实现:使用Python编程语言实现俄罗斯方块游戏的基本逻辑,包括游戏界面、方块生成、方块下落、消除行等功能。 2. 人机对战系统:增加人机对战模式,实现自动控制的电脑家与人类家对战。电脑家使用Pierre Dellacherie算法的策略进行自动操作。 3. Pierre Dellacherie算法Pierre Dellacherie算法是一种经典的俄罗斯方块AI算法,其核心思想是通过评估局面得分,选择最优的方块放置位置。可以使用Python编程语言来实现该算法,并将其集成到游戏系统中。 4. 游戏数据收集:在每场对战过程中,记录电脑家的每一步操作及对应的游戏局面。可以收集的数据包括得分、消除行数、方块形状及位置等等。 5. 数据保存至文件中:将游戏数据保存至文件中,可以使用Python提供的文件操作功能,将数据按一定格式写入文件中。可以选择适合的文件格式,如文本文件、JSON文件等。 6. DNQ算法:DNQ (深度权重网络)算法是一种深度学习算法,可以用于学习和预测游戏过程中的最优策略。可以使用Python中的深度学习框架,如TensorFlow或PyTorch,读取保存的游戏数据文件,并进行训练和预测。 通过以上完善思路,可以实现基于Python的俄罗斯方块人机对战系统,使用Pierre Dellacherie算法实现自动俄罗斯方块,并收集游戏数据保存至文件中,再使用DNQ算法读取文件中游戏数据进行训练和预测。这样的系统将提供更加丰富的游戏体验和学习能力。 ### 回答3: 基于Python的俄罗斯方块人机对战系统可以通过以下思路进行完善: 1. 实现俄罗斯方块的基本逻辑:首先,需要实现俄罗斯方块的游戏逻辑,包括方块的生成、移动和旋转等操作,以及消除行的判断和计分等等。 2. 使用Pierre Dellacherie算法实现自动俄罗斯方块Pierre Dellacherie算法是一种优化的俄罗斯方块AI算法,能够根据当前方块的状态和场地的情况,选择最优的移动和旋转策略。可以根据该算法设计自动俄罗斯方块的机制,使得电脑能够自动进行游戏。 3. 收集游戏数据并保存至文件中:在实现人机对战系统的过程中,可以将每局游戏的数据收集下来,包括方块的位置、得分等信息,并将其保存至文件中,以便后续使用。 4. 使用DNQ算法读取文件中的游戏数据:DNQ算法是一种深度学习算法,可以根据给定的输入数据进行训练,并输出相应的结果。在这里,可以使用DNQ算法读取之前保存的游戏数据文件,并进行训练,以提高自动游戏的能力。 以上就是基于Python的俄罗斯方块人机对战系统的完善思路。通过将Pierre Dellacherie算法和DNQ算法结合起来,可以实现一个能够自动俄罗斯方块,并且不断提升自己的AI系统。同时,通过收集游戏数据并保存至文件中,可以为后续的训练提供更多的数据,使得AI系统的性能不断提高。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值