有关于21点娱乐的洗牌与发放营业证件照

        我当时想了很久要怎么设计洗牌和发牌程序 嗯 对 是想了很久
我很弱的 

  1 var compeleteCards = new Array();
  2 var mytimer;
  3 var cardSequence = 1;
  4 var player1 = new Array();
  5 //储存玩家一的手牌
  6 var player2 = new Array();
  7 //储存玩家二的手牌
  8 var player3 = new Array();
  9 //储存玩家三的手牌
 10 var player4 = new Array();
 11 //储存玩家四的手牌
 12 
 13 function Cards(number,type){
 14     var card = {
 15         number: number,
 16         type: type
 17     }
 18     return card;
 19 }
 20 
 21 function CreatCompeleteCard() {
 22     var arr = new Array();
 23     for (var i = 3; i <= 15; i++) {
 24         for (var j = 1; j <= 4; j++) {
 25             var card = Cards(i, j);
 26             arr.push(card);
 27         }
 28     }
 29     return arr;
 30 }
 31 
 32 
 33 function Show() {
 34     function typeShow(type) {
 35         var t;
 36         switch(type) {
 37         case 1:
 38             t = "♠";
 39             break;
 40         case 2:
 41             t = "♣";
 42             break;
 43         case 3:
 44             t = "<font color='#FF0000'>♦</font>";
 45             break;
 46         case 4:
 47             t = "<font color='#FF0000'>♥</font>";
 48             break;
 49         }
 50         return t;
 51     };
 52 
 53     function numberShow(number) {
 54         var n = number;
 55         switch(number) {
 56         case 11:
 57             n = "J";
 58             break;
 59         case 12:
 60             n = "Q";
 61             break;
 62         case 13:
 63             n = "K";
 64             break;
 65         case 14:
 66             n = "A";
 67             break;
 68         case 15:
 69             n = "2";
 70             break;
 71         }
 72         return n;
 73     };
 74 
 75     function arrayToShow(array, id) {
 76         var html = "";
 77         for (var i = 0; i < array.length; i++) {
 78             html += "<div class='card'><b>" + typeShow(array[i].type) + "</b><div class='number'>" + numberShow(array[i].number) + "</div></div>";
 79         }
 80         document.getElementById(id).innerHTML = html;
 81     };
 82     arrayToShow(compeleteCards, "compeleteCards");
 83     arrayToShow(player1, "player1");
 84     arrayToShow(player2, "player2");
 85     arrayToShow(player3, "player3");
 86     arrayToShow(player4, "player4");
 87 }
 88 
 89 function SortCards() {
 90     if (compeleteCards.length == 52) {
 91         compeleteCards.sort(function(a, b) {
 92             return 0.5 - Math.random();
 93         });
 94     }
 95 }
 96 
 97 function DealCards() {
 98     if (compeleteCards.length == 52) {
 99         mytimer = setInterval("GetCards(compeleteCards.shift())", 100);
100     }
101 }
102 
103 function GetCards(CardObj) {
104     switch(cardSequence) {
105     case 1:
106       var k = InCardsIndex(player1, CardObj);
107       player1.splice(k, 0, CardObj);
108       cardSequence = 2;
109       break;
110     case 2:
111       var k = InCardsIndex(player2, CardObj);
112       player2.splice(k, 0, CardObj);
113       cardSequence = 3;
114       break;
115     case 3:
116       var k = InCardsIndex(player3, CardObj);
117       player3.splice(k, 0, CardObj);
118       cardSequence = 4;
119       break;
120     case 4:
121       var k = InCardsIndex(player4, CardObj);
122       player4.splice(k, 0, CardObj);
123       cardSequence = 1;
124       break;
125 }
126         
127 
128     if (compeleteCards.length == 0) {
129         window.clearTimeout(mytimer);
130     }
131     Show();
132 }
133 
134 //在此添加代码
135 function InCardsIndex(arr, obj) {
136   var len = arr.length;
137   if (len == 0) {
138       return 0;
139   } else if (len == 1) {
140     if (obj.number >= arr[0].number) {
141         return 1;
142     } else {
143         return 0;
144     }
145 }   else {
146     var backi = -1;
147     for (var i = 0; i < len; i++) {
148       if (obj.number <= arr[i].number) {
149         backi = i;
150         break;
151       }
152     }
153     if (backi == -1) {
154         backi = len;
155     }
156     return backi;
157 }   
158 }
159 document.getElementById("create").onclick = function() {
160     compeleteCards = CreatCompeleteCard();
161     Show();
162 };
163 document.getElementById("sort").onclick = function() {
164     SortCards();
165     Show();
166 };
167 document.getElementById("deal").onclick = function() {
168     DealCards();
169 }; 

短短的几个月,我就成了荷官。大宾似乎很看重我,闲着没事就教我一些赌博的出千方法。大概我有这方面的天赋,他只演示几次我就能掌握全部的要领。不过出千是个功夫活,讲究一个字——快!不是只看就能会的,那段日子里,我只要睁开眼睛,手里就总拿着扑克练。别看扑克只是一张张硬一点的小纸片,但那纸片快起来就成了刀片。为了练手法和速度,我的手被扑克割了无数小口子,出汗时伤口钻心般痛。也不知道练碎多少副扑克。我从大宾那里学会了很多,以至于最后扑克方面他没东西教我了,大宾就教我一些打麻将的出千方式。大宾出千的技术在那个年代应该是相当前卫的东西,似乎很少人会,不像现在这么普及。他林林总总教了很多,有几种千术现在很多人在用了:底抠:换出牌底下面倒数1-5张的任何牌,在别人看来我是从上面一张张地发牌。也有人会注意底牌,但只能看到最下面那张,所以,最底下那张我绝对不去动。底抠的前提是知道底下都是什么牌,需要哪张牌时就从下边直接拿出来发出去。中取:想要中间的任何牌,只要做个很小的边,就可以拿出来发。当然,前提也是知道那张牌是不是自己需要的,自己需要就发玲自己,配的是个烂牌的话就发给别人。收牌:把桌子上杂乱的牌迅速计算出哪些跟哪些应该相配,这些点数配完是什么顺序,再按场上人数计算配好的牌应该在谁手里。收的时候看似一把搂回去,其实已经把牌都编好了次序。洗牌:也叫假洗,就是在大家面前哗哗地洗牌,其实牌一点也没动。只要手法巧妙,看的人发现不了,在外人眼中我是正常哗哗地洗牌。偷牌:看中哪张牌,用手掌偷或者用手指头弹,弹的角度多种多样,可以弹到袖子里,也可以弹到自己面前的一叠钱里去。当着全场所有人的面把那张牌偷走,技术要过硬,反应要快。换牌:换牌的形式多种多样,可以换一张牌,也可以换很多牌,甚至可以当众人的面把整副扑克都换成另外一副一样的事先编辑好的牌。有的在胸前换,有的在袖子里换,也有的直接在手掌里换,还有在身边自己人牌里换的。边洗边编辑牌的顺序:配合收牌使用,计算场上的玩家人数,计算怎么样才能把好牌发到自己手里。比如说:一个2和一个7加起来是9点,场上四个玩家,需要发四门牌,我下一轮想要这两张牌配在一起,这样在洗牌的时候通过拇指的控制,在2和7之间摞三张牌,这样发牌的时候就可以很自然地把2和7发到一家去。具体发到哪一家,就在切牌上做文章了。编辑记号:边发牌边做一些别人不会发现的记号。发好了牌,有时候发现别人的牌里有自己想要的牌,就要跟场上同伴打掩护在他没看牌之前将牌换成别的牌,也可以通过记号知道别人家都是什么牌。还有一些利用工具达到换牌、偷牌、藏牌的技巧。有时你在赌桌上看到牌都是从顶上出去的,事实上它是从别的地方出来的;你听到牌哗哗地洗着,其实它没洗。老千的技法概括起来就是:力学+速度。现在很多人粗通一些基本千术,但在1995到2000年之间,凭这些应该可以叱咤一些小赌局了。那时候,还没出现什么老千扑克,高科技的赌博出千工具也很少见,主要是靠手来实现一切。有段时间电视上曾经播过一档劝赌的节目,节目里一个少两根手指头的瘸子,号称赌场高手,还有个公安局的人,在现场说法劝赌。记得节目主持人说这是一个什么赌王。看了所谓赌王的赌术表演,我是这样想的:尽是些小儿科的东西,竟然也敢上电视?难怪腿被人打断、手指头被人剁了去。他当时表演背面认牌,每次都能准确地说出底牌,惹得下边的观众掌声一片。其实他就是靠了一枚图钉,说穿了一钱不值。现实里赌博的也有右手中指戴一个平面的银戒指来达到发牌的时候看底牌的目的,道理也是一样的。他将顶面的牌推出一个边的时候,已经通过夹在手指中间的图钉的反光看到了底牌。记得他表演了洗牌,发牌就是三公,下次洗牌后发牌发出来是一家三个K、一家三个A,这个都是初级的东西。就是把三个K拿到牌的最上面,洗牌的时候把牌分成两份,三个K放在右手那叠的最上面。第一次洗牌的时候,前面洗是正常洗,右手剩下三张时先落一张K,同时左边留下的最后三张牌同时落下,再落下右面最后两张牌。然后第二次洗牌,也是分成两份,同样右手拿上半截的牌。前面正常洗,左边大拇指留三张,右手落下一个K,左边大拇指将留住的这三张牌落下,右手大拇指再放下最后一个K。这样需要发的牌都编辑完了。再简单地进行抽洗,其实不管怎么抽洗,上面那些牌是抽不乱的,都是在右手的大拇指和中指之间压着的。随便立个小拱桥,自己切牌的时候直接切到拱桥的位置以方便发出去三个K。也就是说K中间每次都编辑进去三张牌,发四家的话三个K肯定会发到一家去的。发一家三个K—家三个A,同样通过自己找牌插牌的方式将三个K和A先编辑好了顺序。估计他的手法洗不出三个K对三个A,才会去展开牌去插牌。然后故意洗了一下牌,其实上面他编辑好了的六张牌他根本就没洗。然后装模作样地倒腾了一下牌,也就是把下边的牌给倒到上面。倒到上面的同时他留了个缝隙。切牌的时候他就照这个缝隙切下去。然后再去发牌,其实还是编辑好的六张牌。还有一个曾被封为“中国赌神”的人,他的表演也没有特别神奇的地方。他表演背面认牌的功夫也利用了图钉,只是他藏在小指和无名指之间而已。除了图钉,还有其他东西做反光设备,比如镀银的打火机、墨镜、桌边的烟灰缸、浓茶、深色包装纸等,也是可以看到底牌的。还记得他说可以从一整副牌里挑出观众点出的任意牌,还可以发一手全黑牌。其实他手里拿的是老千扑克,从背面可以直接认出来,我注意到他发牌时很用心地去看牌的背面、主持人说那是随便在外面商场买的,我觉得纯是胡扯。随便拿副牌,让大家随便洗,他在不动牌的情况下全部发出四个A或者全部找出来黑桃,神仙也做不到。应该说主持人和老郑一起出千了,现场观众拿牌出来他肯定不敢玩发四个A的把戏了,我要是观众我就死逼着他拿我的扑克发个一色的出来,吓死他(当然,如果他手指里夹一个枚图钉也可以做到)。当然了他手里还是有点活的,比如他把第一张牌掀开,原来是个2,他慢动作去拿那张牌,拿出来翻过来却是个A。我发现,整副牌并不齐整,有错边,也就是说他拿了错边的牌。拿的一瞬间动作还是很快的,并不是他说的慢动作。那手法是老千行内很普及的东西,在外面散局上是没问题的,拿到大场子去比划,估计他也没这个胆量,我也不敢把这个手法拿到大的场子去。还有一项表演说白就是洗牌切牌,他随便拿出了张牌,给大家亮一下,然后放进牌里让大家随便洗乱,然后再发。他拿牌的时候把这张牌微微掐压了一下。这个牌再怎么洗还是有印迹的,因此他切牌很容易就能把这张牌切到,切完了这个牌就在牌底,通过一些小手法很容易给人造成以顶面的位置发牌的错觉。如果在上面,可以直接通过发第二张牌的时候留下这张牌,在需要的时候把它发出来。我注意过老郑洗牌,也是假洗,上面10来张牌不洗。他也拿着观众洗完的牌发13张一样花色的牌,我注意到在发牌之前他的手拿回去放在桌子下边,这是赌家的大忌,想早点死的赌徒可以在大场上这样做,保证你看不到明天的太阳。他应该把一整副扑克给换了,故意假洗几下再拿出来发四家牌,每家都是同一种花色,那是他提前编辑好了的一副牌。还有我看过他一下发三家Q三家K三家A,他让大家先拿牌随便洗。我也注意到他是把手先放在桌子下边的。后来镜头切换到观众洗牌的时候,就没盯着他,但是镜头拉回来的时候他的左手掌心是向下扣着的,那掌下应该是一副牌,就是他去拿牌的过程两副牌是重叠的。但是有个错开的位置,把下面原先人家洗好的牌在手掌的掩护下翻到上面去是很容易做到的,然后再把牌发在桌子上,放上的就是他换的牌,其实观众的牌已经被换成他编辑好了的牌。还有的就是应主持人要求全部发5、10、K,他的手也曾去了桌子下边,只是镜头摇走了。如果在他要发牌的时候忽然提出要求,再洗一下,我想他马上就会吐血。在大家面前把桌子上的牌换走,初级的老千都能做得到。我觉得换牌的整个过程,主持人应该都是知道的。我认为他的出发点是好的,劝诫大家别赌博。但是他所表演的那些东西看着很玄乎,但是拿到大场子上真的去赌,估计中国会诞生一个新瘸子。但是拿到一些小散局上,是没问题的。如果有人在他表演的时候跟他提一个要求,手绝对不可以放回桌子下边去。哪怕他去挠痒痒也不可以,那时候他绝对不会去表演迅速发出5、10、K的把戏。再后来有人说他被封为“中国的赌神”,我只能选择沉默。

         不要吐槽我这个傻逼的goto语句是多么的麻烦QAQ

poker.js文件:

        他在玩家阶段和电脑阶段加了一句

     function CreatCompeleteCard()
{}:创建一副扑克牌

         注意到这个while

话不多说,我们上代码:

        前两天帮同学做一个C++的作业 大致是这样的

  var compeleteCards = new
Array();

        其实一开始就想的有问题 一开始不知道怎么销掉已发出去的牌
就把注意力转移到了随机牌上 利用顺序发随机牌组来绕过发重复牌这个问题
殊不知可以用个很小的办法就可以解决

 

void shufflel()
{
     for(int i=0;i<52;++i)
             deck[i]=i+1;
     for(int i=0;i<52;++i)
     {
             int j=0;
             j=rand()%52;
             int temp=0;
             temp=deck[i];
             deck[i]=deck[j];
             deck[j]=temp;
     }
     return;
}

     function Show()
{}:展示扑克牌

       provide_cards(cards);
        color = type[0];                                           
            number = type[1];
        str_output += show_cards(color,number);
        total[0] += cards[color][number];
        cards[color][number] = 0;

图片 1

        最后的答案给的是这样的

 
2)实现纸牌的洗牌功能

        

当我们点击创建,会在牌堆创建一副完整的扑克牌带有花色和牌值:

        但他有个发牌程序

 

        感觉婶婶的被鄙视了= =

 点击洗牌按钮执行洗牌操作,将牌组的顺序打乱展示出来。

        每次发完牌后直接将发出去的牌定义成0
下次发牌的时候只要card[type[0]][type[1]]==0 就跳 不发

2)从功能上我们需要几个函数:

         这个比我的高效多了 先按顺序来给牌定个序 然后将第 i 项和第 j
项交换 因为 j 是随机rand出来的 就满足了洗牌的条件

图片 2

         最后一句= =

以上就是我们的JavaScript案例开发之扑克游戏,欢迎大家来浏览指正!

        所以我把这句改成了这样

 

        然后 那个同学还有一个同学 写了一个很有趣的随机洗牌算法
我觉得很好

 

        但是纠结的是怎么发牌
他题目上说的是编一个洗牌程序一个随机发牌函数
但我想他喵的要是随机发牌随机两次一样的牌怎么办 于是纠结在这里不可自拔
最后想的法子是先洗牌 然后按顺序发

     function SortCards()
{}:对扑克牌进行洗牌

j=rand()%52

 

        怎么说呢 在看到这个的时候 我只想说我擦

 

        设计一个21点的纸牌游戏 21点的游戏规则我就不做介绍了 先给人发牌
每发一次问一声还要不要 要是不要了给电脑发 电脑每次都跟人的点数比较
直到比人的点大或者撑死游戏结束 基本流程就是这样

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注