SlideShare a Scribd company logo
1 of 5
程序实现题<br />编写程序模拟“斗地主”游戏的分牌过程,且输出每个人分配到扑克牌信息<br />扑克牌信息可用1-54之间的数字代替;<br />要求分配的扑克牌不能是连续性的<br />“斗地主”规则是:只有三个人参加,且预留底牌3张,由“地主”收底牌,默认第一个玩家为地主(也就是第一个玩家有20张牌,其它二玩家各17张牌)<br />思路<br />生成一幅牌, 将1 ~ 54之间的数字共54个放入一个数组中<br />对数组进行乱排序(模拟洗牌过程).<br />随机选出一位地主, 用一个大小为20的数组表示<br />从中取出所有数字分别放入3个新的子数组中, 其中1个包含20个数字, 其他2个各包含17个数字<br />实现<br />/**<br /> * 模拟实现斗地主发牌过程<br /> * <br /> * @author Sun<br /> * @version FightLandlord.java 2011-10-14 17:00:47<br /> */<br />public class FightLandlord {<br />    public static void main(String[] args) {<br />        // 构造一副新牌<br />        Stack<Integer> newPoker = new Stack<Integer>();<br />        for (int i = 1; i <= 54; i++) {<br />            newPoker.add(i);<br />        }<br />        // 洗牌<br />        Collections.shuffle(newPoker);<br />        // 玩家闪亮登场<br />        Map<Integer, List<Integer>> players = new HashMap<Integer, List<Integer>>();<br />        List<Integer> jobs = new ArrayList<Integer>();<br />        List<Integer> gates = new ArrayList<Integer>();<br />        List<Integer> page = new ArrayList<Integer>();<br />        players.put(0, jobs);<br />        players.put(1, gates);<br />        players.put(2, page);<br />        // 猥琐的地主<br />        int whoIsTheLord = (int) (Math.random() * 3);<br />        // 发牌, 每轮发3张<br />        for (int i = 0, length = newPoker.size() - 3; i < length; i+=3) {<br />            // 地主先抓牌<br />            for (int j = whoIsTheLord, count = 0; count < 3; count++) {<br />                players.get(j).add(newPoker.pop());<br />                // 谁下一个抓牌(保持抓牌顺序始终从地主开始)<br />                // 例如2是地主, 那么以后的抓牌顺序都是2, 0, 1<br />                j++;<br />                if (j > 2) {<br />                    // 确保抓了一圈牌<br />                    j = 0;<br />                }<br />            }<br />        }<br />        // 底牌给地主<br />        players.get(whoIsTheLord).add(newPoker.pop());<br />        players.get(whoIsTheLord).add(newPoker.pop());<br />        players.get(whoIsTheLord).add(newPoker.pop());<br />        // 测试<br />        System.out.println(quot;
哪个是地主?quot;
 + whoIsTheLord + quot;
quot;
);<br />        for (Integer p : jobs) {<br />            System.out.println(p);<br />        }<br />        System.out.println(quot;
=> 0, jobs: quot;
 + jobs.size() + quot;
quot;
);<br />        for (Integer p : gates) {<br />            System.out.println(p);<br />        }<br />        System.out.println(quot;
=> 1, gates: quot;
 + gates.size() + quot;
quot;
);<br />        for (Integer p : page) {<br />            System.out.println(p);<br />        }<br />        System.out.println(quot;
=> 2, page: quot;
 + page.size());<br />    }<br />}<br />输出<br />哪个是地主?<br />2<br />9<br />29<br />28<br />36<br />4<br />42<br />6<br />17<br />14<br />26<br />30<br />39<br />48<br />34<br />7<br />54<br />46<br />=> 0, jobs: 17<br />19<br />22<br />38<br />50<br />2<br />16<br />37<br />31<br />32<br />11<br />45<br />8<br />27<br />10<br />43<br />35<br />40<br />=> 1, gates: 17<br />3<br />47<br />24<br />1<br />21<br />23<br />20<br />49<br />25<br />12<br />41<br />53<br />18<br />51<br />13<br />52<br />5<br />15<br />33<br />44<br />=> 2, page: 20<br />
iShare 技术 爪哇斗地主 Sun
iShare 技术 爪哇斗地主 Sun
iShare 技术 爪哇斗地主 Sun
iShare 技术 爪哇斗地主 Sun

More Related Content

More from Jun Sun

如何解决mailto乱码的问题
如何解决mailto乱码的问题如何解决mailto乱码的问题
如何解决mailto乱码的问题Jun Sun
 
iShare 人生 程序员通关指南(暗黑版) 20111216 Sun
iShare 人生 程序员通关指南(暗黑版) 20111216 SuniShare 人生 程序员通关指南(暗黑版) 20111216 Sun
iShare 人生 程序员通关指南(暗黑版) 20111216 SunJun Sun
 
iShare 技术 GIS统一能力平台一统江湖
iShare 技术 GIS统一能力平台一统江湖iShare 技术 GIS统一能力平台一统江湖
iShare 技术 GIS统一能力平台一统江湖Jun Sun
 
GIS统一能力平台如何达到统一
GIS统一能力平台如何达到统一GIS统一能力平台如何达到统一
GIS统一能力平台如何达到统一Jun Sun
 
GIS平台系统架构 beta2 20110621
GIS平台系统架构 beta2 20110621GIS平台系统架构 beta2 20110621
GIS平台系统架构 beta2 20110621Jun Sun
 
标准化GIS平台
标准化GIS平台标准化GIS平台
标准化GIS平台Jun Sun
 
如果没有ArcGIS
如果没有ArcGIS如果没有ArcGIS
如果没有ArcGISJun Sun
 
OpenGeo Suite试用报告
OpenGeo Suite试用报告OpenGeo Suite试用报告
OpenGeo Suite试用报告Jun Sun
 
ArcGIS地图服务叠加原理
ArcGIS地图服务叠加原理ArcGIS地图服务叠加原理
ArcGIS地图服务叠加原理Jun Sun
 
ArcGIS REST Mapserver vs WFS
ArcGIS REST Mapserver vs WFSArcGIS REST Mapserver vs WFS
ArcGIS REST Mapserver vs WFSJun Sun
 
基于标准的GIS系统
基于标准的GIS系统基于标准的GIS系统
基于标准的GIS系统Jun Sun
 
编码规范
编码规范编码规范
编码规范Jun Sun
 

More from Jun Sun (12)

如何解决mailto乱码的问题
如何解决mailto乱码的问题如何解决mailto乱码的问题
如何解决mailto乱码的问题
 
iShare 人生 程序员通关指南(暗黑版) 20111216 Sun
iShare 人生 程序员通关指南(暗黑版) 20111216 SuniShare 人生 程序员通关指南(暗黑版) 20111216 Sun
iShare 人生 程序员通关指南(暗黑版) 20111216 Sun
 
iShare 技术 GIS统一能力平台一统江湖
iShare 技术 GIS统一能力平台一统江湖iShare 技术 GIS统一能力平台一统江湖
iShare 技术 GIS统一能力平台一统江湖
 
GIS统一能力平台如何达到统一
GIS统一能力平台如何达到统一GIS统一能力平台如何达到统一
GIS统一能力平台如何达到统一
 
GIS平台系统架构 beta2 20110621
GIS平台系统架构 beta2 20110621GIS平台系统架构 beta2 20110621
GIS平台系统架构 beta2 20110621
 
标准化GIS平台
标准化GIS平台标准化GIS平台
标准化GIS平台
 
如果没有ArcGIS
如果没有ArcGIS如果没有ArcGIS
如果没有ArcGIS
 
OpenGeo Suite试用报告
OpenGeo Suite试用报告OpenGeo Suite试用报告
OpenGeo Suite试用报告
 
ArcGIS地图服务叠加原理
ArcGIS地图服务叠加原理ArcGIS地图服务叠加原理
ArcGIS地图服务叠加原理
 
ArcGIS REST Mapserver vs WFS
ArcGIS REST Mapserver vs WFSArcGIS REST Mapserver vs WFS
ArcGIS REST Mapserver vs WFS
 
基于标准的GIS系统
基于标准的GIS系统基于标准的GIS系统
基于标准的GIS系统
 
编码规范
编码规范编码规范
编码规范
 

iShare 技术 爪哇斗地主 Sun

  • 1. 程序实现题<br />编写程序模拟“斗地主”游戏的分牌过程,且输出每个人分配到扑克牌信息<br />扑克牌信息可用1-54之间的数字代替;<br />要求分配的扑克牌不能是连续性的<br />“斗地主”规则是:只有三个人参加,且预留底牌3张,由“地主”收底牌,默认第一个玩家为地主(也就是第一个玩家有20张牌,其它二玩家各17张牌)<br />思路<br />生成一幅牌, 将1 ~ 54之间的数字共54个放入一个数组中<br />对数组进行乱排序(模拟洗牌过程).<br />随机选出一位地主, 用一个大小为20的数组表示<br />从中取出所有数字分别放入3个新的子数组中, 其中1个包含20个数字, 其他2个各包含17个数字<br />实现<br />/**<br /> * 模拟实现斗地主发牌过程<br /> * <br /> * @author Sun<br /> * @version FightLandlord.java 2011-10-14 17:00:47<br /> */<br />public class FightLandlord {<br /> public static void main(String[] args) {<br /> // 构造一副新牌<br /> Stack<Integer> newPoker = new Stack<Integer>();<br /> for (int i = 1; i <= 54; i++) {<br /> newPoker.add(i);<br /> }<br /> // 洗牌<br /> Collections.shuffle(newPoker);<br /> // 玩家闪亮登场<br /> Map<Integer, List<Integer>> players = new HashMap<Integer, List<Integer>>();<br /> List<Integer> jobs = new ArrayList<Integer>();<br /> List<Integer> gates = new ArrayList<Integer>();<br /> List<Integer> page = new ArrayList<Integer>();<br /> players.put(0, jobs);<br /> players.put(1, gates);<br /> players.put(2, page);<br /> // 猥琐的地主<br /> int whoIsTheLord = (int) (Math.random() * 3);<br /> // 发牌, 每轮发3张<br /> for (int i = 0, length = newPoker.size() - 3; i < length; i+=3) {<br /> // 地主先抓牌<br /> for (int j = whoIsTheLord, count = 0; count < 3; count++) {<br /> players.get(j).add(newPoker.pop());<br /> // 谁下一个抓牌(保持抓牌顺序始终从地主开始)<br /> // 例如2是地主, 那么以后的抓牌顺序都是2, 0, 1<br /> j++;<br /> if (j > 2) {<br /> // 确保抓了一圈牌<br /> j = 0;<br /> }<br /> }<br /> }<br /> // 底牌给地主<br /> players.get(whoIsTheLord).add(newPoker.pop());<br /> players.get(whoIsTheLord).add(newPoker.pop());<br /> players.get(whoIsTheLord).add(newPoker.pop());<br /> // 测试<br /> System.out.println(quot; 哪个是地主?quot; + whoIsTheLord + quot; quot; );<br /> for (Integer p : jobs) {<br /> System.out.println(p);<br /> }<br /> System.out.println(quot; => 0, jobs: quot; + jobs.size() + quot; quot; );<br /> for (Integer p : gates) {<br /> System.out.println(p);<br /> }<br /> System.out.println(quot; => 1, gates: quot; + gates.size() + quot; quot; );<br /> for (Integer p : page) {<br /> System.out.println(p);<br /> }<br /> System.out.println(quot; => 2, page: quot; + page.size());<br /> }<br />}<br />输出<br />哪个是地主?<br />2<br />9<br />29<br />28<br />36<br />4<br />42<br />6<br />17<br />14<br />26<br />30<br />39<br />48<br />34<br />7<br />54<br />46<br />=> 0, jobs: 17<br />19<br />22<br />38<br />50<br />2<br />16<br />37<br />31<br />32<br />11<br />45<br />8<br />27<br />10<br />43<br />35<br />40<br />=> 1, gates: 17<br />3<br />47<br />24<br />1<br />21<br />23<br />20<br />49<br />25<br />12<br />41<br />53<br />18<br />51<br />13<br />52<br />5<br />15<br />33<br />44<br />=> 2, page: 20<br />