第一弹-番外篇-有关组合的匹配算法问题
首先如果你准备看这一篇文章,那么你还是需要有一点程序基础的。另外,这个活一般是系统策划干的,所以为了亲民还是采用自然语言的形式来写。
起初,我本打算自己使用VBA写一个模拟器的。但是当我面对十多个符号、上百种组合,而且还有随机组合和万能符号(可以替代其他符号来组成奖励组合)存在的时候,有些方法将变得繁琐而且内部情况复杂且不容易考虑周到的时候,我退却了。但是这个心结不能一直留着,我也一直在考虑该怎么去做这件事情,到目前为止总结了三个方法来做,总体来说最满意第三种(因为很巧妙了,我喜欢这种东西)。
好了我们仍然从实例出发来讲:
假设有一个随机组合”ABC”可以中奖,那么中奖的情况将会有”ABC”、”ACB”、”BAC”、”BCA”、”CAB”、”CBA”等六种情况出现,当我们摇到某一个组合式”XXX”时,我们有一下三种方法来匹配组合是否满足中奖条件。
------------我是分割线-------------
方法一、
这里我们定义一个数组Table来储存这六种组合,从Table(1)-Table(6),
另外将摇到的组合存在Table_Tmp中;
那么我们的判断将如下所示:
For (i=1;i<=6;i++)
{
If(Table_Tmp=Table(i))
{
获得奖励;
退出循环;
}
}
这个循环一共循环6次,依次让摇到的组合和数组中的组合匹配,当匹配到奖励后就会给奖励并退出循环(以防止重复给奖励的bug存在)。直到循环结束也没有获奖的话,那么会直接退出循环。
这个方法比较直观,也是比较好理解的一个方法,但是在实际操作中则会出现很多难点。比如:组合更多时将变得难以考虑全面,遍历次数过多等等。
------------我是分割线-------------
方法二、
这里我们可以将”A”、”B”、”C”分别储存在Table(1)-Table(3)中,
摇到的组合中的每一列的符号储存在Table_Tmp(1)-Table_Tmp(3)中;
判断如下所示:
--第一部分用与判断能匹配到的个数---
For(i=1;i<=3;i++)
{
For(j=1;j<=3;j++)
{
If(Table_Tmp(j)=Table(i))
{
奖励一个小红花;
}
}
}
-----第二部分、用于判断是否得奖------
If(累计有三朵小红花)
{
获得奖励;
}
第一部分的循环用于摇到的每一个符号都去匹配是否在中奖组合中也存在相同的符号,如果存在的话,奖励一朵小红花。第二部分则是判断获得的小红花数量是否满足中奖条件。
这个方法的优势就在于在对组合的判定是可以有所变化,更具灵活性,比如说"ABCD"四个符号中匹配到任意三个符号就可以中奖。此时只用将i变成四,并将"D"也放入Table中即可。
------------我是分割线-------------
方法三、
这里考虑到的不再是组合本身的组合情况了,转而是将组合转变为数字来虑;
还是以组合”ABC”来看,假设A=1、B=10、C=100,
那么组合ABC的总值为A+B+C=111;
假设摇到的组合的总值为Num。
所以这里的判断变为:
If(Num=111)
{
获得奖励;
}
这样看起来是不是就简单很多了,并且也不需要遍历什么的。
当然,这里在组合设计的时候就需要我们再设计的时候好好思考一下了。大家也有看到ABC分别给了不同数量级的数字,这其实是为了方便设计,和方便对一些特殊情况做处理。比如对单个符号就能获奖的情况,你可以将数值设定的相对较低(比如1)而其他的数值数量级很大,那么这时对单个符号的判断就变成了
If(Num的个位数=1)
{
获得奖励;
}
好了,限于篇幅今天就讲这么多了,大家也可以自己多思考思考。这些方法都有各自的优点和缺点,选用的时候根据具体情况来定。
希望对你有帮助。
下期更精彩!《第一弹-第三讲-几种不同玩法的简单介绍》
此文为作者原创,转载请注明出处,侵权必究!