资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
题目:洗扑克牌并发牌给玩家,最后整理题目分析题目分析将将54张扑克牌统一编号为:张扑克牌统一编号为:0,1,2,52,53,然后随机地从中一一抽,然后随机地从中一一抽取一张牌,并依次放起,形成新的序列。具体取一张牌,并依次放起,形成新的序列。具体还要解决四个问题:还要解决四个问题: 如何存储如何存储54张扑克牌;张扑克牌; 在此基础上如何随机洗牌;在此基础上如何随机洗牌; 确定庄家,发牌给各玩家,并将底牌给该确定庄家,发牌给各玩家,并将底牌给该庄家;庄家; 整理玩家的牌并打印输出。整理玩家的牌并打印输出。问题分析1. 扑克牌的存储扑克牌的存储在计算机高级语言中,允许用一个名字来命名一组依次存放的同类型数据,并把这样的数据类型称为数组数组。例如,可以把54张扑克牌用数组pk来存储,pk代表了54个扑克数据的整体,也代表了54个变量。问题分析设想,用三位整数表示每张扑克牌,其中第一位设想,用三位整数表示每张扑克牌,其中第一位设想,用三位整数表示每张扑克牌,其中第一位设想,用三位整数表示每张扑克牌,其中第一位表示牌种类,后两位表示牌号,例如:表示牌种类,后两位表示牌号,例如:表示牌种类,后两位表示牌号,例如:表示牌种类,后两位表示牌号,例如:101101,113113,分别表示红桃尖、,分别表示红桃尖、,分别表示红桃尖、,分别表示红桃尖、红桃红桃红桃红桃K K;201201,213213,分别表示方块尖、,分别表示方块尖、,分别表示方块尖、,分别表示方块尖、方块方块方块方块K K;301301,313313,分别表示梅花尖、,分别表示梅花尖、,分别表示梅花尖、,分别表示梅花尖、梅花梅花梅花梅花K K;401401,413413,分别表示黑桃尖、,分别表示黑桃尖、,分别表示黑桃尖、,分别表示黑桃尖、黑桃黑桃黑桃黑桃K K;501501,502502,分别表示大、小王。,分别表示大、小王。,分别表示大、小王。,分别表示大、小王。于是,于是,于是,于是,5454张扑克牌可以用整数表示张扑克牌可以用整数表示张扑克牌可以用整数表示张扑克牌可以用整数表示, ,存储存储存储存储5454张扑张扑张扑张扑克牌的数组克牌的数组克牌的数组克牌的数组pkpk可以用如下的声明语句建立:可以用如下的声明语句建立:可以用如下的声明语句建立:可以用如下的声明语句建立:intint pk=new int54pk=new int54; ;问题分析数组可以用括在花括弧中的数据序列进行初始数组可以用括在花括弧中的数据序列进行初始数组可以用括在花括弧中的数据序列进行初始数组可以用括在花括弧中的数据序列进行初始化。如数组化。如数组化。如数组化。如数组pkpk的初始化语句为:的初始化语句为:的初始化语句为:的初始化语句为:intint pk54=501,502, pk54=501,502, 101,102,103,104,105,106,107,108,109,101,102,103,104,105,106,107,108,109,110,111,112,113,110,111,112,113,201,202,203,204,205,206,207,208,209,201,202,203,204,205,206,207,208,209,210,211,212,213,210,211,212,213,301,302,303,304,305,306,307,308,309,301,302,303,304,305,306,307,308,309,310,311,312,313,310,311,312,313,401,402,403,404,405,406,407,408,409,401,402,403,404,405,406,407,408,409,410,411,412,413;410,411,412,413;问题分析2. 随机洗牌算法随机洗牌算法501501 502502 1011014124124064060 01 12 252525353pkpk下标下标pkpk元素值元素值413413r r(a)初始化后的)初始化后的pk数组数组406406 502502 1011014124125015010 01 12 252525353pkpk下标下标pkpk元素值元素值413413r r(b)在)在pk0到到pk53之间找一个随机元素与之间找一个随机元素与pk0对调对调413413 1011014124124064061 12 25252r rpkpk下标下标pkpk元素值元素值5025024064060 0(c)在)在pk1到到pk53之间找一个随机元素与之间找一个随机元素与pk1对调对调在在0到到53之间产生一个之间产生一个随机数随机数r=46(r=(int)(Math.random()*53) ) ,将,将pk0与与pkr交换交换在到在到53之间产生一个之间产生一个随机数随机数r=53( =(int)(Math.random()*(53-1)+1),将),将pk1与与pkr交换交换问题分析在在i到到53之间产生一个随机数之间产生一个随机数r(r= =(int)(Math.random()* (53-i)+i),),将将pki与与pkr交换;交换;直到前直到前53张牌被全部交换。张牌被全部交换。问题分析四位玩家分到的牌用二维数组存储: int card=new int4; 其中数组的第二维列数不事先定义。问题分析3、确定庄家,并将底牌给该庄家、确定庄家,并将底牌给该庄家用用int p=(int)(Math.random()* 4); p=0,p=0,则表示坐东的玩家为庄家,将底牌则表示坐东的玩家为庄家,将底牌则表示坐东的玩家为庄家,将底牌则表示坐东的玩家为庄家,将底牌6 6张给他张给他张给他张给他 p=1, p=1,则表示坐南的玩家为庄家,将底牌则表示坐南的玩家为庄家,将底牌则表示坐南的玩家为庄家,将底牌则表示坐南的玩家为庄家,将底牌6 6张给他张给他张给他张给他 p=2, p=2,则表示坐西的玩家为庄家,将底牌则表示坐西的玩家为庄家,将底牌则表示坐西的玩家为庄家,将底牌则表示坐西的玩家为庄家,将底牌6 6张给他张给他张给他张给他 p=3, p=3,则表示坐北的玩家为庄家,将底牌则表示坐北的玩家为庄家,将底牌则表示坐北的玩家为庄家,将底牌则表示坐北的玩家为庄家,将底牌6 6张给他张给他张给他张给他问题分析确定数组card0, card1, card2, card3的长度,代表各玩家手上牌的数量:for(int i=0;icard.length;i+) if(i=p) cardi=new int18; else cardi=new int12;问题分析发牌过程:发牌过程: 将前将前4848张牌分别给四位玩家,最后六张最后底牌给张牌分别给四位玩家,最后六张最后底牌给庄家。庄家。 for(int i=0;i4;i+) for(int i=0;i4;i+) for(int j=0;j12;j+) for(int j=0;j0;k-) for(int k=6;k0;k-) cardi18-k=pk54-k; cardi18-k=pk54-k; 问题分析4、整理玩家的牌并打印输出整理玩家的牌并打印输出对对card0, card1, card2, card3的数组元素分别进行从大到小进行排序最后对二维数组card打印输出即为各位玩家手上的牌。注意:用cardij/100判断花色 用cardij%100判断牌的大小Questions?
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号