抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

这篇文章是2008年除夕那天写的,也就是刘谦第一次上春晚那天,现在翻出来作为这个博客的第一篇文章,纪念一下那些年我们一起追随的那个纯净的魔界,不被世俗铜臭所沾污。

扑克排列法,并不是魔术,而是表演某些魔术前所做的准备,也就是set牌。其实在魔术表演过程中,并不用把牌弄得这么复杂,写这篇文章纯属个人兴趣。但是有时可能会派上用场,比如遇到奥客时或者在摄像机前表演等……

一:顺序排列法

这个是比较简单的排列法,主要利用递加,递减的方法来实现扑克牌数字的排列。
排列过程可以分为两部分:数字的排列和花色的排列。

1、数字的排列

本文所用的例子是公差为6的递增数列,即:A,7,K,6,Q,5……

为什么要选择公差为6排列呢?原因有三:

①:这样看起来扑克牌比较乱。

②:比较容易计算下一张牌,如果你看到的是5,那么下一张就是5+6=11,也就是J。
由于数列中最大的数是13,而6处于13的中间,13-6=7,因此如果你看到的牌大于7,那你可以直接减7。
例如你看到9,那么下一张就是9-7=2了,你不用算9+6=15,15-13=2。
所以说:看到比7小的就加6,看到比7大的就减7,看到7下一张就是K。

③:我喜欢6这个数字。

2、花色的排列

我们规定:黑桃为1,红桃为2,梅花为3,方块为4。
那么下一张牌的花色由前一张牌的数字加花色后除以4得到的余数得出(如果整除就是方块)。

例:第3张是黑桃K,黑桃为1,K为13,1+13=14,14÷4=3…2,2为红桃,并且13-7=6,所以下一张为红桃6。

从黑桃A开始,要一张一张地算出下一张牌是很痛苦的事,所以让电脑帮我排吧。

以下为VB代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Dim a%, b%, m$, n$
a = -5

For i = 1 To 13
a = a + 6
If a > 13 Then a = a - 13
m = Choose(a, "1", "2", "3", "4", "5", "6", "7", "8", "9", "X", "J", "Q", "K")
Print m & " ";
Next

Print: Print "黑 ";
a = 1: b = 1

For i = 2 To 52
b = (a + b) Mod 4
If b = 0 Then b = 4
n = Choose(b, "黑", "红", "梅", "方")
a = a + 6
If a > 13 Then a = a - 13
Print n & " ";
If i Mod 13 = 0 Then Print
Next

输出结果如下图(X为10的罗马字母):

顺序排列法

3、扑克牌的排法

这个就简单了,先把牌按数字分成13组,花色按上图排列,再按从左到右的顺序拿牌。

4、优缺点

优点:排列简单,推算简单,是追求速度型的首选。

缺点:不是很笨的人能很快发现数字排列的规律,对于追求完美的人来说,这个方法不适用。那么请看第二种排列方法吧。

二:口诀排列法

1、数字的排列

看看效果(展示一下我的幽灵牌),你能找出数字排列的规律吗?不可能吧。

口诀

其实怎么看都是找不出规律的,因为它不是按顺序排列的,而是按特殊的方法排列的。

这个方法是从一本魔术书上看到的。

该口诀是:

1
2
Eight Kings Threatend To Save Ninety-Five Queens For One Sick Knave.
8 K 3 10 2 7 9 5 Q 4 A 6 J

也就是用谐音进行排列的,只需把这个英文句子背起来就行了。

如果前一张是J,那么下一张就是8。

花上几分钟,你就能倒背如流。

2、花色的排列

花色排列方法同顺序排列法,下一张牌的花色由前一张牌的数字加花色后除以4的余数得出。

当然,这也是让电脑排列的,以下为VB代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim a, n$
Print "8 K 3 X 2 7 9 5 Q 4 A 6 J"
a = Array(1, 1, 2, 1, 3, 1, 4, 1, 2, 2, 2, 3, 1)

For i = 1 To 4
For j = 0 To 12
n = Choose(a(j), "黑", "红", "梅", "方")
Print n & " ";
Next

For k = 0 To 12
a(k) = a(k) - 1
If a(k) = 0 Then a(k) = 4
Next

Print
Next

输出如下: 口诀排列法

3、扑克牌的排法

这个也很简单,先把牌按数字分成13组,花色按上图排列,再按从左到右的顺序拿牌。

4、优缺点

优点:排列简单,别人不能发现数字排列的规律,是追求稳重型的首选。

缺点:推算速度较慢,但是扑克牌每隔13张就循环一次,经不起仔细的检查。

对于追求完美的人来说,这个方法也不适用。那么请看第三种排列方法吧。

三:乱序排列法

1、数字的排列和花色的排列

这个排列方法把数字的排列和花色的排列放在一起了,因为要让整副牌看起来毫无规律,就不能用重复13张牌的方法,因此一个思路诞生了:下一张牌的数字和花色是由前一张牌的数字和花色决定的。

首先我想出了第一个方法:下一张牌的数字由(前一张牌的数字加上花色后)除以13的余数得出,花色由(本张的数字加上前一张花色后)除以4的余数得出,比较复杂,后面再解说。

以下为VB代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Dim a%, b%, m$, n$
a = 1: b = 1

For i = 1 To 52
n = Choose(b, "黑", "红", "梅", "方")
m = Choose(a, "A", "2", "3", "4", "5", "6", "7", "8", "9", "X", "J", "Q", "K")

a = a + b
If a > 13 Then a = a - 13

b = (a + b) Mod 4
If b = 0 Then b = 4

Print n & m & " ";
If i Mod 13 = 0 Then Print
Next

执行代码后得出了下面的结果:
乱序排列法1

这样明显出了问题:第1张牌和第33张牌是一样的,都是黑桃A。
这说明了只有前面32张牌形成一个循环,而还有20张牌没参加循环。
怎么办?怎么办啊?方法错了吗?
一般人到了这里就另寻方法了,但是我今天为什么能在这里发表这篇教程,因为我心存一句名言:Just have a little faith

在思考了1分钟零5秒后,我想:为什么它们没参加循环,因为它们自己可能构成一个循环。
我把前面32张牌找出来排列完后,在剩下的20张牌找出了最小的牌:黑桃2。

把上面的代码改一下,把a = 1: b = 1改为a = 2: b =1(即从黑桃2开始排列),执行代码后结果如下:
乱序排列法2

这次有15张牌形成一个循环,还剩下5张牌。
那么剩下的红桃3,梅花5,梅花8,红桃J,梅花K,是不是也形成一个循环呢?老天保佑啊,一定要成功!

把上面的代码中的a = 2: b = 1改为a = 3: b = 2(即从红桃3开始排列),执行代码后结果如下:
乱序排列法3

剩下的5张牌果然形成了一个循环啊。 不会吧,这样就成功了?
成功其实很近,也很遥远。

把三个循环:①黑桃A~方块10 ②黑桃2~梅花Q ③红桃3~梅花K 合在一起,我们只需记住3个特殊情况:方块10后是黑桃2,梅花Q后是红桃3,梅花K后是黑桃A。

其它的牌都是按规律找的。例如方块树的下一张是什么牌呢?方块是4,树是4(没听过“方块树”这个词?去看看刘小谦的“顽皮的扑克”),那么4 + 4 = 8,下一张牌的数字是8;花色是8加上前一张的花色(8 + 4)再除以4得出的,结果整除,所以是方块8。

例如红桃9,红桃是2,2 + 9 = 11,所以下一张是J;(11 + 2)÷4 = 3…1,1是黑桃,所以红桃9的下一张是黑桃J。

例如方块J,方块是4,J是11,4 + 11 = 15,15 - 13 = 2,所以下一张数字是2;(2 + 4)÷4 = 1…2,2是红桃,下一张就是红桃2。

2、扑克牌的排法

排列比较复杂,得花点时间,按下图排列吧:
乱序排列法

3、优缺点

优点:别人较难发现数字排列的规律,扑克牌可以交给观众检查。

缺点:排列很复杂,推算速度较慢。

四:无敌排列法

此方法绝对强悍,谁也不能找出其中的规律,规律只有你自己知道。

你只要把一副牌洗乱,再把它们记起来,用右脑的图像记忆法,加上谐音、联想和桩子,不难把一副扑克牌背起来。

如果你真的背了一副扑克牌,那你以后只用它就行了。

构思和写这篇文章花了两天的时间,其中第三种方法占了1天的时间,在似错非错中挣扎,不断地在错误中寻找出路,但总算在2009春节前完成了。

还有其它的思路没写出来,大家有意见请提出来,虚心接受大家的意见。

评论