Skip to content

Posts tagged ‘游戏’

13
Mar

三国杀价值体系理论———只写给三国杀高手的攻略

最近一段时间,三国杀风靡各大高校,我亦深深沉迷其中。因此转载我的同学SF神牛的关于三国杀的一篇神作,跟大家分享一下…

三国杀价值体系理论————只写给三国杀高手的攻略

如果你懂得先拆后顺骗无懈,知道先杀决斗再五谷,后面出牌的是敌人时慎放五谷,明白先丈八杀再换连弩,那你在三国杀该如何出牌方面已经入门;

如果你用张辽每轮突袭,用刘备主动掉血,用郭嘉每次分牌,那么你对于武将的运用,已经做得非常不错。

或许你可能已经做到以上,或许更多,在一起游戏的玩家里难觅对手,那么我相信我的这篇文章一定能引发你的思考。本文谨献给三国杀的高手们。

1.       何为价值体系以及价值体系的基础

构成三国杀的两部分是人物和手牌。每回合每个人摸2张牌,这是每个人所固有的价值。我们不妨把每张牌的价值看作为1,这是最基础的价值。一般看来,1点体力与2张牌的固有价值是相等的。体力与手牌的这种等价转化关系,是下文理论的基础。下文主要讨论标准版中各种牌与技能对于游戏进程,平衡性等的影响。

三国杀标准版作为最具有竞技性的版本,在具体作战之中需要有一套双方价值得失的量化标准。一般来说,4v4或3v3,双方的初始总价值量大致是相等的。每一次技能的发动,或者手牌的打出,都会对团队的总价值量造成影响,而这些或正或负的影响,也就决定着最后的战局。比如反贼,当反贼的总价值量变成0之时,也就意味着队伍的全灭。

这篇理论,或者说攻略的意义,就在于如何在游戏进程中更有效的控制这种价值量的转化,让每一次技能的发动都使双方之间出现对己方有利的价值差,从而取得团队或个人的胜利。

2.关于手牌…

5
Nov

Nim游戏的必胜策略和Xor运算的神奇应用

上一篇日志里介绍了Nim游戏,他的必胜策略可不是那么好想的。这个游戏貌似很久以前就已经有了,可是必胜策略直至20世纪初才被哈佛大学的一个叫做Charles Leonard Bouton的数学家找到,可见其思维难度;可是,这个必胜策略却只要由一个运算就搞定了:Xor(异或)运算,可见Xor运算之神奇。没有好好学过程序设计的人估计对Xor运算不甚熟悉,更不可能知道他的神奇应用了,因此我先说一说Xor运算。

Xor运算是位运算的一种,和And、Or运算类似,假如a、b都是布尔变量,则a Xor b被定义为:a、b相异则为真(所以中文名字叫做异或),a、b相同则为假。其真值表为:1Xor0=1, 0Xor1=1, 1Xor1=0, 0Xor0=0。众所周知,位运算也可以用于两个数之间,其定义就是把这两个数转化为二进制,然后一位一位的进行位运算。比如说1Xor4=(001)2 Xor(100)2=(101)2=5。位运算除了具有交换律、结合律这样的普通性质之外,还有几条神奇的性质。

Xor运算的神奇性质之一,就是他自己是自己的逆运算,即对于任何两个布尔变量或者数有(a Xor b)Xor b=a。这一点可以从真值表直接验证。有了这样一个性质,我们就可以把交换两个数的函数swap改进一下。大家应该都知道swap可以这么做:

void swap(int a, int b)

{a=a+b; b=a-b; a=a-b;} 

现在我们知道了Xor运算是本身的逆运算之后,就可以把上面的函数改成这个样子:(在C/C++里面把Xor表示为^)

void swap(int a, int b)

{a=a^b; b=a^b; a=a^b;}

乍一看肯定会觉得这个交换函数写的非常诡异,但是仔细一看就知道其原理和刚才那个是一模一样的。而且因为计算机在执行位运算的时候肯定比加减法要快,所以用Xor写的交换函数实际上还更快呢。

这里有一个有意思的小问题:现在给你2n+1个正整数,其中有n对数和1个单独的数,(这里规定一对数的意思是这两个数相等),然后让你设计一种算法,把这个单独的数给找出来,要求时间复杂度为O(n)。比如说这2n+1个数是1 2 …

21
Oct

拈游戏

所谓拈游戏的规则是这样的:(在看了沙发的评论之后我才知道其标准名字应该是Nim游戏…)

桌面上有三行硬币,每一行中分别有a1、a2、a3个硬币,其中a1、a2、a3是可以任意指定的正整数。两个人轮流拿走硬币,每一次只能从某一行中拿走任意多个硬币,谁拿走最后一枚硬币谁就赢了。

比如说a1=1,a2=2,a3=3的情况吧,这时如果轮到我拿了,我可以从第三行拿走2枚硬币,或者可以把第三行的三枚硬币全都拿走,等等;但是我不能同时从第一行和第三行里各拿走1枚硬币。这个简单的情况,可以枚举所有可能性得出结论:先拿的必输。

当a1、a2、a3是任意给定的,在什么情况下先拿的必输呢?必胜策略是怎样的呢?这是一个相当有意思的问题,答案可绝不是显而易见一目了然的。而当我当年看到这个策略长什么模样之后,完全的叹服了。今天我就先不写必胜策略了,大家可以先自己想想,如果下周或者什么时候有时间了再来写。前一阵子我为了熟悉C++自己写了一个拈游戏的人机对弈程序,大家可以点击下面的链接下载。其中包含了必胜策略,所以只要你一步走错就一定会输。

拈游戏.rar

其实拈游戏不仅仅局限于三行硬币,其实最初的问题是N行的,而且神奇的是其必胜策略对于任何N都是一样的。其实这个拈游戏是我上小学的时候奥数老师跟我玩的游戏,最近才发现这个经典的有意思的游戏还有好多人没有玩过,故写此文……