斗地主算法的设计与实现(五)--洗牌和发牌

news/2023/12/10 16:26:52

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

这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://my.oschina.net/FansUnion/blog/409564


https://dhexx.cn/news/show-915536.html

相关文章

【博客之星】帮我投一票吧,谢谢

只希望喜欢我博客的朋友、同学&#xff0c;能帮我投一票。 如果票已经投完&#xff0c;可以让你的好友帮我投一票。 谢谢&#xff01; 如果让我说三句“拉票宣言”的话。 我想说&#xff0c; 1.博客中的每一个评论&#xff0c;我几乎都及时回复了。 2.每一个关注我的人&#xf…

模块介绍

day14 一、生成器表达式&#xff1a; 形如各种生成式&#xff0c;但是包含在小括弧内&#xff0c;得到的是一个生成器。 # g(i for i in range(10) if i > 5) #形如列表生成式&#xff0c;但是用小括号包含的称为生成器表达式&#xff0c;得到的g是一个生成器&#xff08;…

promise.prototypr.then()

Promise 实例具有then 方法&#xff0c;也就是说&#xff0c;then 方法是定义在原型对象 Promise .prototype上的。它的作用是为Promise实例添加状态改变时的回调函数。 then方法的第一个参数是resolved状态的回调函数&#xff0c;第二个参数是rejected状态的回调函数。 then方…

从零开始——Ubuntu系统安装redis和phpredis

在我们部署redis之前&#xff0c;先了解下redis到底是个啥东西。 redis是一个key-value存储系统。和Memcached类似&#xff0c;它支持存储的value类型相对更多&#xff0c;包括string(字符串)、 list(链表)、set(集合)和zset(有序集合)。这些数据类型都支持push/pop、add/remov…

设计模式实战13--行为型--策略模式

策略模式&#xff08;Strategy&#xff09;定义&#xff1a;策略模式定义了一系列的算法&#xff0c;并将每一个算法封装起来&#xff0c;而且使它们还可以相互替换。 策略模式让算法独立于使用它的客户而独立变化。 策略模式结构图&#xff1a; 策略模式解析&#xff1a; Cont…

pat -1004(树的遍历)

题目链接&#xff1a;https://pintia.cn/problem-sets/994805342720868352/problems/994805521431773184 思路&#xff1a; &#xff08;1&#xff09;用vector记录每个非叶子节点的子节点 &#xff08;2&#xff09;通过dfs记录每一层的节点的个数&#xff0c;并记录最高层的节…

探索ORACLE之RMAN_07非一致性恢复(集合)

探索ORACLE之RMAN_07非一致性恢复&#xff08;集合&#xff09; 作者&#xff1a;吴伟龙 Name&#xff1a;Prodence Woo QQ&#xff1a;286507175 msn:hapy-wuweilonghotmail.com 在前面的议题中实际上已经对rman的备份恢复做了个比较完整的介绍&#xff0c;谈到了数据库&…

用CIFilter生成QRCode二维码图片

用CIFilter生成QRCode二维码图片 CIFilter不仅仅可以用来做滤镜,它还可以用来生成二维码. CIFilterEffect.h CIFilterEffect.m // // CIFilterEffect.h // CIFilter // // Created by YouXianMing on 14-5-9. // Copyright (c) 2014年 Y.X. All rights reserved. //#impor…

个性化注册表单

在线演示 本地下载 转载于:https://www.cnblogs.com/qixidi/p/10070874.html

习题3-5 三角形判断 (15分)

习题3-5 三角形判断 (15分) 输入格式: 输入在一行中顺序给出六个[−100,100]范围内的数字&#xff0c;即三个点的坐标 输出格式: 若这3个点不能构成三角形&#xff0c;则在一行中输出“Impossible”&#xff1b;若可以&#xff0c;则在一行中输出该三角形的周长和面积&#…