1.1案例介绍

按照斗地主的规则,完成洗牌发牌的动作。

具体规则:

1.组装54张扑克牌

2.将54张牌顺序打乱

3.三个玩家参与游戏,三人交替摸牌,,每人17张牌,最后三张留作底牌。

4.查看三人各自手中的牌(按照牌的大小排序)、底牌

手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3

1.2案例需求分析

准备牌:

完成数字与纸牌的映射关系:

使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。

洗牌:

通过数字完成洗牌发牌

发牌:

将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于牌底,剩余牌通过对3取模依次发牌。

存放的过程中要求数字大小与斗地主规则的大小对应。

将代表不同纸牌的数字分配给不同的玩家与底牌。

看牌:

通过Map集合找到对应字符展示。

通过查询纸牌与数字对应关系,由数字转成纸牌字符串再进行展示。

二、代码实现

实现方式一:

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
/** 斗地主洗牌发牌顺序*/
public class Poker {public static void main(String[] args) {//准备花色ArrayList<String> color=new ArrayList<String>();color.add("♠");color.add("♥");color.add("♦");color.add("♣");//准备数字ArrayList<String> number=new ArrayList<String>();Collections.addAll(number, "3","4","5","6","7","8","9","10","J","Q","K","A","2");//定义一个map集合,用来将数字与每一张牌进行对应HashMap<Integer, String> map=new HashMap<Integer,String>();int index =0;//加入大小王map.put(index++, "小?");map.put(index++,"大?");for (String thisNumber:number) {for (String thisColor:color) {map.put(index++,thisColor+thisNumber);}}//一副牌54张的牌ArrayList里边为0-53的数的新牌ArrayList<Integer> cards=new ArrayList<Integer>();for (int i =0;i<=53;i++) {cards.add(i);}//洗牌Collections.shuffle(cards);//创建三个玩家和底牌ArrayList<Integer> iPlayer=new ArrayList<Integer>();ArrayList<Integer> iPlayer2=new ArrayList<Integer>();ArrayList<Integer> iPlayer3=new ArrayList<Integer>();ArrayList<Integer> itCards=new ArrayList<Integer>();//遍历这副洗好的牌,遍历过程中,将牌发到三个玩家和底牌中for (int i=0;i<cards.size();i++) {if (i>=51) {itCards.add(cards.get(i));                } else {if(i%3==0) {iPlayer.add(cards.get(i)); } else if(i%3==1) {iPlayer2.add(cards.get(i));} else {iPlayer3.add(cards.get(i));}}}//对每个人手中的牌排序Collections.sort(iPlayer);Collections.sort(iPlayer2);Collections.sort(iPlayer3);//对应数字形式的每个人手中的牌,定义字符串形式的牌ArrayList<String> sPlayer=new ArrayList<String>();ArrayList<String> sPlayer2=new ArrayList<String>();ArrayList<String> sPlayer3=new ArrayList<String>();ArrayList<String> sCards=new ArrayList<String>();for (Integer key:iPlayer) {sPlayer.add(map.get(key));}for (Integer key:iPlayer2) {sPlayer2.add(map.get(key));}for (Integer key:iPlayer3) {sPlayer3.add(map.get(key));}for (Integer key:itCards) {sCards.add(map.get(key));}//看牌System.out.println(sPlayer);System.out.println(sPlayer2);System.out.println(sPlayer3);System.out.println(sCards);}}

实现方式二:

Card

package day03.collection;import lombok.AllArgsConstructor;
import lombok.Data;@Data
@AllArgsConstructor
public class Card implements Comparable<Card>{public static final int THREE = 0;public static final int FOUR = 1;public static final int FIVE =2;public static final int SIX = 3;public static final int SEVEN = 4;public static final int EIGHT =5;public static final int NINE = 6;public static final int TEN = 7;public static final int JACK =8;public static final int QUEEN = 9;public static final int KING = 10;public static final int ACE =11;public static final int TWO = 12;public static final int BLACK = 13;public static final int COLOR =14;// ---------public static final int HEART =0;public static final int SPADE = 1;public static final int DIAMOND = 2;public static final int CLUB =3;public static final int JOKER =4;public static final String[] RANK_NAMES = {"红桃","黑桃","方块","梅花",""};public static final String[] SUIT_NAMES = {"3","4","5","6","7","8","9","10","J","Q","K","A","2","小王","大王"};// 花色private int rank;// 点数private int suit;@Overridepublic String toString() {return RANK_NAMES[rank] +SUIT_NAMES[suit];}@Overridepublic int compareTo(Card o) {return this.suit-o.suit;}
}

Player

package day03.collection;import java.util.Arrays;public class Player {private String name;private Card[] cards;public Player(String name) {this.name = name;this.cards = new Card[]{};}public void addCard(Card card){cards = Arrays.copyOf(cards,cards.length+1);cards[cards.length-1] = card;}public String toString() {Arrays.sort(cards);return name+":"+Arrays.toString(cards);}
}

CardDemo

package day03.collection;import java.util.*;public class CardDemo {public static void main(String[] args) {List<Card> list = new ArrayList<>();for (int suit = Card.THREE;suit<=Card.TWO;suit++){list.add(new Card(Card.HEART,suit));list.add(new Card(Card.SPADE,suit));list.add(new Card(Card.DIAMOND,suit));list.add(new Card(Card.CLUB,suit));}list.add(new Card(Card.JOKER,Card.BLACK));list.add(new Card(Card.JOKER,Card.COLOR));System.out.println(list);Collections.shuffle(list);System.out.println(list);Player[] players = {new Player("张三"),new Player("李四"),new Player("王五")} ;Iterator<Card> iterator = list.iterator();int index = 0;while (iterator.hasNext()){Card card = iterator.next();players[index% players.length].addCard(card);iterator.remove();if (list.size()==3) break;index++;}System.out.println("底牌"+list);System.out.println(Arrays.toString(players));}
}

模拟斗地主洗牌发牌-JAVA相关推荐

  1. java中Map集合、模拟斗地主洗牌发牌、JDK9对集合添加的优化

    1.1 Map集合概述 Map集合概述 Map==>映射(一个对应一个) Map是一个接口,只要实现了该接口的类都是双列集合. 双列集合每次存储元素时都需要存储两个元素,一个元素称为键,一个元素 ...

  2. 【JAVASE】模拟斗地主洗牌发牌

    1.案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 组装54张扑克牌 54张牌顺序打乱 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 查看三人各自手中的牌(按照牌的大 ...

  3. Java实现模拟斗地主洗牌发牌

    按照斗地主的规则,完成洗牌发牌看牌的动作.最终结果预计为: 具体规则: 1.组装54张扑克牌 2.将54张扑克牌顺序打乱 3.三个玩家参与游戏,三人交替摸牌,每人17张,最后三张做底牌 4.查看三人手 ...

  4. 18.集合框架(Map集合,HashMap和Hashtable的区别,Collections(集合工具类),集合练习,模拟斗地主(洗牌,发牌,看牌))

    1.Map集合概述和特点 1.需求:    根据学号获取学生姓名 2.Map接口概述     查看API可以知道:     将键映射到值的对象     一个映射不能包含重复的键     每个键最多只能 ...

  5. java使用集合模拟斗地主洗牌发牌案例

    package com.itheima.模拟斗地主.斗地主版本2;import java.util.ArrayList; import java.util.Collections; import ja ...

  6. 斗地主洗牌发牌——排序版

    文章目录 前言 一.知识点 二.使用步骤 2.完整代码 感谢您的阅读,不足之处欢迎指正 前言 Java实现模拟斗地主洗牌发牌操作,留下三张底牌,对发到手的纸牌排序. 一.知识点 主要使用HashMap ...

  7. Java——集合(模拟斗地主洗牌和发牌进行排序)

    //改进版,没有进行按牌的地位从小到大排序 package com.yy.test;import java.util.ArrayList; import java.util.Collections;p ...

  8. java集合框架的练习之斗地主洗牌发牌的模拟(升级版)

    首先,奉上java集合框架的练习之斗地主洗牌发牌的模拟(初级版)的链接:http://blog.csdn.net/striner/article/details/78489306 初级版只具有洗牌发牌 ...

  9. Java实现模拟斗地主洗牌、发牌、看牌并排序

    1.模拟斗地主洗牌.发牌.看牌 /* * 模拟斗地主洗牌.发牌.看牌*/package PokerDemo;import java.util.ArrayList; import java.util.C ...

最新文章

  1. 自学python有哪些方向-Python新手入门应该注意的一些问题以及学习方向
  2. 设置sqlplus环境变量
  3. C语言如何使用其他文件定义的结构体?(C++报错:无法转换到不完整的类【需在头文件中定义结构体??】)
  4. Apache Hadoop 3.0.0 GA版正式发布,可以部署到线上
  5. 百度研究院商业智能实验室招聘研究实习生!
  6. bert 多义词_BERT之后,GLUE基准升级为SuperGLUE:难度更大
  7. 使用IPFS集群搭建创建私有IPFS网络
  8. 使用Metal打造令人惊叹的游戏效果
  9. String与字节数组转换
  10. 【C++】字体文件解析(FreeType)
  11. Android 项目之电话拨号器
  12. 正确理解文件与目录的可读、可写、可执行权限
  13. 热敏电阻(NTC)的基本参数及其应用
  14. 【DirectX 2D游戏编程基础】DirectX精灵的创建
  15. 服务器虚拟化技术主要有什么优势
  16. [转载]通过 call gate 访问目标 code segment
  17. 【一】软件测试的起源与发展介绍
  18. Fping命令批量ping地址
  19. 08.音频系统:第003课_Linux音频驱动程序:第002节_ASoC音频驱动框架
  20. 微软抄袭 AppGet 始末,开源普法任重道远

热门文章

  1. java批量下载demo_OBS JAVA SDK 实践8:批量下载文件(e.g 下载文件夹)
  2. 怎样才能在PDF上写字?
  3. 一个人做饭简单食谱_通过这5条简单食谱学习SQL
  4. [绍棠] 应用内支付(IAP)详解
  5. selenium入门教程 hello world
  6. vivado工程打包
  7. js 获取url参数问题
  8. 分支限界法求解电路布线问题
  9. Raid及其常见级别详解(附简单案例)
  10. linux文件向磁带备份,如何在Linux系统上进行快速磁带备份