本篇简要介绍如何洗牌和发牌。

这2个算法都很简单,有兴趣的同学可以写得更好一点。

关键点说明

a.洗牌算法的思路就是,构造54张牌,打乱牌N次,这个算法可能不够随机。

b.发牌算法的思路就是,从洗好的牌中,按规律发给3个玩家,比如1好玩家就取第1、4、7等17张牌。

c.3个玩家,谁取到id为1的这张牌,谁就是“地主”。

1.初始化

 /**     * 初始化     */    private void deal() {        shuffle();        divide();    }

2.洗牌

   /**     * 洗牌     */    private void shuffle() {        for (int i = 0; i < 54; i++) {            Card card = new Card(i + 1);            allCards.add(card);        }        System.out.println("洗牌之前:");        CardUtil.printCards(allCards);        // 洗牌,交换1000次        for (int i = 0; i <= 1000; i++) {            Collections.shuffle(allCards);// 打乱牌的位置        }        System.out.println("洗牌之后:");        CardUtil.printCards(allCards);    }

3.发牌

//发牌    private void divide() {        // 1号玩家的牌        for (int j = 0; j < 17; j++) {            Card card = allCards.get(j * 3);            myCards.add(card);            if (myCards.get(j).id == 1) {                diZhu = 1;            }        }        // 2号玩家的牌        for (int j = 0; j < 17; j++) {            Card card = allCards.get(j * 3 + 1);            rightCards.add(card);            if (rightCards.get(j).id == 1) {                diZhu = 2;            }        }        // 3号玩家的牌        for (int j = 0; j < 17; j++) {            Card card = allCards.get(j * 3 + 2);            leftCards.add(card);            if (leftCards.get(j).id == 1) {                diZhu = 3;            }        }        for (int i = 51; i < 54; i++) {            Card card = allCards.get(i);            topCards.add(card);            Card card2 = new Card(card.id);            copyOfTopCards.add(card2);        }        CardUtil.sortCards(myCards);        CardUtil.sortCards(leftCards);        CardUtil.sortCards(rightCards);    }  

4.打印牌

 /**     * 打印牌     */    private void printCards() {        System.out.println("玩家1的牌:");        CardUtil.printCards(myCards);        System.out.println("玩家2的牌:");        CardUtil.printCards(leftCards);        System.out.println("玩家3的牌:");        CardUtil.printCards(rightCards);        System.out.println("底牌:");        CardUtil.printCards(topCards);    }

5.运行洗牌发牌程序

public static void main(String[] args) {        DealingDevice one = new DealingDevice();        one.printCards();        logger.info("没有排序的牌:");        ArrayList<Card> allCards2 = one.getAllCards();        CardUtil.printCards(allCards2);        logger.info("排序之后的牌:");        CardUtil.sortCards(allCards2);        CardUtil.printCards(allCards2);    }

6.程序运行结果

洗牌之前
方块A(A0.gif)    方块2(20.gif)    方块3(30.gif)    方块4(40.gif)    方块5(50.gif)    方块6(60.gif)    方块7(70.gif)    方块8(80.gif)    方块9(90.gif)    方块10(100.gif)    方块J(J0.gif)    方块Q(Q0.gif)    方块K(K0.gif)    梅花A(A1.gif)    梅花2(21.gif)    梅花3(31.gif)    梅花4(41.gif)    梅花5(51.gif)    梅花6(61.gif)    梅花7(71.gif)    梅花8(81.gif)    梅花9(91.gif)    梅花10(101.gif)    梅花J(J1.gif)    梅花Q(Q1.gif)    梅花K(K1.gif)    红桃A(A2.gif)    红桃2(22.gif)    红桃3(32.gif)    红桃4(42.gif)    红桃5(52.gif)    红桃6(62.gif)    红桃7(72.gif)    红桃8(82.gif)    红桃9(92.gif)    红桃10(102.gif)    红桃J(J2.gif)    红桃Q(Q2.gif)    红桃K(K2.gif)    黑桃A(A3.gif)    黑桃2(23.gif)    黑桃3(33.gif)    黑桃4(43.gif)    黑桃5(53.gif)    黑桃6(63.gif)    黑桃7(73.gif)    黑桃8(83.gif)    黑桃9(93.gif)    黑桃10(103.gif)    黑桃J(J3.gif)    黑桃Q(Q3.gif)    黑桃K(K3.gif)    小王XiaoWang(smallJoker.gif)    大王DaWang(bigJoker.gif)

洗牌之后
红桃7(72.gif)    红桃J(J2.gif)    方块J(J0.gif)    大王DaWang(bigJoker.gif)    黑桃5(53.gif)    梅花Q(Q1.gif)    黑桃2(23.gif)    梅花6(61.gif)    红桃2(22.gif)    方块K(K0.gif)    红桃5(52.gif)    红桃6(62.gif)    梅花4(41.gif)    黑桃K(K3.gif)    梅花J(J1.gif)    梅花9(91.gif)    红桃3(32.gif)    方块10(100.gif)    方块8(80.gif)    方块Q(Q0.gif)    黑桃10(103.gif)    黑桃9(93.gif)    红桃4(42.gif)    方块9(90.gif)    黑桃3(33.gif)    黑桃6(63.gif)    黑桃7(73.gif)    梅花K(K1.gif)    红桃8(82.gif)    梅花5(51.gif)    方块2(20.gif)    红桃9(92.gif)    红桃Q(Q2.gif)    小王XiaoWang(smallJoker.gif)    红桃A(A2.gif)    梅花A(A1.gif)    梅花8(81.gif)    方块5(50.gif)    方块4(40.gif)    方块3(30.gif)    方块6(60.gif)    黑桃4(43.gif)    黑桃J(J3.gif)    梅花3(31.gif)    梅花2(21.gif)    梅花7(71.gif)    方块7(70.gif)    方块A(A0.gif)    红桃K(K2.gif)    黑桃Q(Q3.gif)    红桃10(102.gif)    梅花10(101.gif)    黑桃8(83.gif)    黑桃A(A3.gif)

玩家1的牌
方块3(30.gif)    黑桃3(33.gif)    梅花4(41.gif)    梅花7(71.gif)    红桃7(72.gif)    方块8(80.gif)    梅花8(81.gif)    梅花9(91.gif)    黑桃9(93.gif)    黑桃J(J3.gif)    方块K(K0.gif)    梅花K(K1.gif)    红桃K(K2.gif)    方块2(20.gif)    黑桃2(23.gif)    小王XiaoWang(smallJoker.gif)    大王DaWang(bigJoker.gif)

玩家2的牌
方块 4(40.gif)    黑桃4(43.gif)    梅花5(51.gif)    红桃6(62.gif)    黑桃7(73.gif)    方块9(90.gif)    方块10(100.gif)    红桃10(102.gif)    黑桃10(103.gif)    方块J(J0.gif)    梅花J(J1.gif)    梅花Q(Q1.gif)    红桃Q(Q2.gif)    方块A(A0.gif)    梅花A(A1.gif)    梅花2(21.gif)    红桃2(22.gif)

玩家3的牌
梅花3(31.gif)    红桃3(32.gif)    红桃4(42.gif)    方块5(50.gif)    红桃5(52.gif)    黑桃5(53.gif)    方块6(60.gif)    梅花6(61.gif)    黑桃6(63.gif)    方块7(70.gif)    红桃8(82.gif)    红桃9(92.gif)    红桃J(J2.gif)    方块Q(Q0.gif)    黑桃Q(Q3.gif)    黑桃K(K3.gif)    红桃A(A2.gif)

底牌
梅花10(101.gif)    黑桃8(83.gif)    黑桃A(A3.gif)

红桃7(72.gif)    十月 11, 2013 1:16:41 下午 cn.fansunion.ddz.client.DealingDevice main
INFO: 没有排序的牌
红桃J(J2.gif)    方块J(J0.gif)    大王DaWang(bigJoker.gif)    黑桃5(53.gif)    梅花Q(Q1.gif)    黑桃2(23.gif)    梅花6(61.gif)    红桃2(22.gif)    方块K(K0.gif)    红桃5(52.gif)    红桃6(62.gif)    梅花4(41.gif)    黑桃K(K3.gif)    梅花J(J1.gif)    梅花9(91.gif)    红桃3(32.gif)    方块10(100.gif)    方块8(80.gif)    方块Q(Q0.gif)    黑桃10(103.gif)    黑桃9(93.gif)    红桃4(42.gif)    方块9(90.gif)    黑桃3(33.gif)    黑桃6(63.gif)    黑桃7(73.gif)    梅花K(K1.gif)    红桃8(82.gif)    梅花5(51.gif)    方块2(20.gif)    红桃9(92.gif)    红桃Q(Q2.gif)    小王XiaoWang(smallJoker.gif)    红桃A(A2.gif)    梅花A(A1.gif)    梅花8(81.gif)    方块5(50.gif)    方块4(40.gif)    方块3(30.gif)    方块6(60.gif)    黑桃4(43.gif)    黑桃J(J3.gif)    梅花3(31.gif)    梅花2(21.gif)    梅花7(71.gif)    方块7(70.gif)    方块A(A0.gif)    红桃K(K2.gif)    黑桃Q(Q3.gif)    红桃10(102.gif)    梅花10(101.gif)    黑桃8(83.gif)    黑桃A(A3.gif)

十月 11, 2013 1:16:41 下午 cn.fansunion.ddz.client.DealingDevice main
INFO: 排序之后的牌
方块3(30.gif)    梅花3(31.gif)    红桃3(32.gif)    黑桃3(33.gif)    方块4(40.gif)    梅花4(41.gif)    红桃4(42.gif)    黑桃4(43.gif)    方块5(50.gif)    梅花5(51.gif)    红桃5(52.gif)    黑桃5(53.gif)    方块6(60.gif)    梅花6(61.gif)    红桃6(62.gif)    黑桃6(63.gif)    方块7(70.gif)    梅花7(71.gif)    红桃7(72.gif)    黑桃7(73.gif)    方块8(80.gif)    梅花8(81.gif)    红桃8(82.gif)    黑桃8(83.gif)    方块9(90.gif)    梅花9(91.gif)    红桃9(92.gif)    黑桃9(93.gif)    方块10(100.gif)    梅花10(101.gif)    红桃10(102.gif)    黑桃10(103.gif)    方块J(J0.gif)    梅花J(J1.gif)    红桃J(J2.gif)    黑桃J(J3.gif)    方块Q(Q0.gif)    梅花Q(Q1.gif)    红桃Q(Q2.gif)    黑桃Q(Q3.gif)    方块K(K0.gif)    梅花K(K1.gif)    红桃K(K2.gif)    黑桃K(K3.gif)    方块A(A0.gif)    梅花A(A1.gif)    红桃A(A2.gif)    黑桃A(A3.gif)    方块2(20.gif)    梅花2(21.gif)    红桃2(22.gif)    黑桃2(23.gif)    小王XiaoWang(smallJoker.gif)    大王DaWang(bigJoker.gif)

相关阅读

斗地主算法的设计与实现

面向对象实现斗地主程序的核心算法,包括洗牌、发牌、判断牌型、比较牌的大小、游戏规则等。

原文参见: http://FansUnion.cn/articles/2735

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

斗地主算法的设计与实现 五 --洗牌和发牌相关推荐

  1. Java斗地主算法的设计与实现_斗地主算法的设计与实现–洗牌和发牌

    本篇将给出斗地主算法的源码,介绍斗地主这个项目的一些基本情况. 下载地址:http://download.csdn.net/detail/fansunion/6387589 特别说明:斗地主项目的主要 ...

  2. 斗地主算法的设计与实现(三)--如何比较两手牌的大小

    本篇主要讲解斗地主中如何比较两手牌的大小. 友情提示:本篇是接着以下两篇文章就讲解的,建议先看看下面这2篇. 斗地主算法的设计与实现--如何判断一手牌的类型(单,对子,三不带,三带一,四代二等) 斗地 ...

  3. java斗地主比大小_斗地主算法的设计与实现(三)--如何比较两手牌的大小

    本篇主要讲解斗地主中如何比较两手牌的大小. 友情提示:本篇是接着以下两篇文章就讲解的,建议先看看下面这2篇. 牌型比较 火箭最大:炸弹次之:再次是一般牌型(单牌.对牌.三张牌.三带一.单顺.双顺.三顺 ...

  4. 斗地主棋牌类游戏中的洗牌和发牌算法

    前言 洗牌和发牌是棋牌类游戏中,非常重要的两个关键节点,而这两个关键节点涉及的算法,很多同学非常感兴趣,今天,我们就以NodeJS环境为例,通过JS代码给大家解说洗牌和发牌算法. 一. 洗牌算法 1. ...

  5. 斗地主系列之洗牌和发牌

    1.一些说明: 大家都知道,斗地主的一副牌有54张,三位玩家,每位17张牌,3张底牌(17*3+3 = 54). 所以,我们定义一个List: List cards = new ArrayList&l ...

  6. 编程模拟洗牌和发牌过程c语言,洗牌发牌模拟系统课程设计报告.doc

    集美大学诚毅学院 <高级语言程序设计>课程设计 实验报告 题目:洗牌和发牌模拟 专业:计算机科学与技术 班级: 姓名: 成绩: 指导教师: 完成日期:2008 年 6月 26 日 一.目的 ...

  7. 洗牌、发牌算法 (打乱扑克牌顺序)

      #include <stdio.h> #include <stdlib.h> #include <time.h> int  d[6]; int  i,n,a,b ...

  8. Algorithm:C+语言实现之数组相关算法(和为定值的两个数、和为定值的m个数、荷兰国旗、长度为2n的洗牌算法、任意长度数组的洗牌算法)

    Algorithm:C+语言实现之数组相关算法(和为定值的两个数.和为定值的m个数.荷兰国旗.长度为2n的洗牌算法.任意长度数组的洗牌算法) 目录 数组 1.寻找和为定值的两个数 2.和为定值的m个数 ...

  9. Java中使用HashMap,TreeSet和List来实现模拟斗地主的洗牌和发牌的小例子

    模拟斗地主洗牌,发牌  使用HashMap,TreeSet和List来实现 效果如下图所示: 详细实现代码如下: package star.july.tags;import java.util.Arr ...

最新文章

  1. RabbitMQ 入门系列(11)— RabbitMQ 常用的工作模式(simple模式、work模式、publish/subscribe模式、routing模式、topic模式)
  2. codeforces round #576 div2 D Welfare State(线段树)[单点修改+区间修改]
  3. 陈程杰、夏瑞:数据分析工具TBtools介绍和操作视频+公众号/社群
  4. php判断版本根据版本调用不同,C#_C#自动判断Excel版本使用不同的连接字符串,用OLEDB通过设置连接字符串可 - phpStudy...
  5. MQTT再学习 -- 漫谈MQTT协议
  6. 《Flex 第一步》
  7. 你可能没看懂Supercell的新游戏
  8. 猴子吃桃问题(南阳ACM324)
  9. [C++11]委托构造函数
  10. vivo 5G手机日产量10万台 3月销量同比增长超10%
  11. 解决linux下javac -version和java -version版本显示不一致
  12. 关于Java中的final关键字
  13. atitit.404错误的排查流程总结
  14. 计算机图形学完整笔记(三):裁剪
  15. 基于R软件的网状meta分析
  16. mybatis源码详解
  17. iOS界面调试工具Reveal
  18. windows下解决弹窗广告
  19. 设置Windows控制台颜色
  20. 只会写代码,不如去种田

热门文章

  1. 中国军工电子行业运营模式及十四五发展规划咨询建议报告2022-2027年
  2. 2021年网络安全十大发展趋势预测
  3. 基金代销-业务流程及数据交换图
  4. 学习记录557@flowable流程回退与终止
  5. 由MAVEN入手浅谈项目构建与管理
  6. /proc/cpuinfo 文件详解
  7. 2020/09/29 鼠标移入 显示二维码或图片 移出隐藏
  8. 如何提取pcap文件中的TCP流
  9. 前后端配合实现大文件断点续传(前端逻辑)
  10. 说说 Redis pipeline