java代码实现斗地主发牌功能

 更新时间:2020年11月24日 10:33:04   作者:MK-T  
这篇文章主要介绍了java实现斗地主发牌功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了java实现斗地主发牌功能的具体代码,供大家参考,具体内容如下

实现斗地主发牌功能
共54张牌,地主比其他两名玩家多三张牌。

有一个card牌类和player玩家类,还有一个发牌类用于实现发牌的方法。
为了模拟每个玩家的牌都是随机的,我是这样想的:
1)初始化方法:用于将54张牌存到一个数组里,每张牌都一个唯一的序号。
2) 利用随机数,将每个序号打乱存到一个新数组里。
3)再根据序号取到初始化牌库数组内的牌,存到每个玩家的牌集合内。
附一个在老师指导下写的:斗地主发牌功能,自己还是有些没考虑周到。/_ \

代码如下:

牌类

public class Card {

 /**花色*/
 private String HuaSe;
 /**点数*/
 private String DianShu;
 /**序号*/
 private int XuHao;

 
 public Card(String huaSe, String dianShu, int xuHao) {
 super();
 HuaSe = huaSe;
 DianShu = dianShu;
 XuHao = xuHao;
 }

 public String getHuaSe() {
 return HuaSe;
 }

 public void setHuaSe(String huaSe) {
 HuaSe = huaSe;
 }

 public String getDianShu() {
 return DianShu;
 }

 public void setDianShu(String dianShu) {
 DianShu = dianShu;
 }

 public int getXuHao() {
 return XuHao;
 }

 public void setXuHao(int xuHao) {
 XuHao = xuHao;
 }

 @Override
 public String toString() {
 return "[" + HuaSe + DianShu + "]";
 }

}

玩家类

public class Player {

 /**玩家id*/
 private int id;
 /**玩家姓名*/
 private String name;
 /**是否是地主*/
 private boolean dizhu;
 /**牌的集合*/
 private ArrayList<Card> list;

 public Player(int id, String name, boolean dizhu) {
 super();
 this.id = id;
 this.name = name;
 this.dizhu = dizhu;
 }

 public int getId() {
 return id;
 }

 public void setId(int id) {
 this.id = id;
 }

 public String getName() {
 return name;
 }

 public void setName(String name) {
 this.name = name;
 }

 public boolean isDizhu() {
 return dizhu;
 }

 public void setDizhu(boolean dizhu) {
 this.dizhu = dizhu;
 }

 public ArrayList<Card> getList() {
 return list;
 }

 public void setList(ArrayList<Card> list) {
 this.list = list;
 }

 @Override
 public String toString() {
 return name + ", 牌:" + list ;
 }

}

发牌类: 这里还有许多缺陷 :例如地主是需要自己指定而不是随机的,在给每个人发牌时,可以利用remove()方法将已经发过的牌移除,这样可以节省很多重复代码。

public class SendCard {

 static ArrayList<Card> arrayList = new ArrayList<Card>();
 Random r = new Random();
 
 /**
 * 初始话牌库
 */
 public void init() {
 for (int i = 1; i < 14; i++) {
 arrayList.add(new Card("梅花", Integer.toString(i), i));
 arrayList.add(new Card("方块",Integer.toString(i),13 + i));
 arrayList.add(new Card("红心", Integer.toString(i), 26 + i));
 arrayList.add(new Card("黑桃", Integer.toString(i), 39 + i));
 }
 arrayList.add(new Card("","大王",53));
 arrayList.add(new Card("", "小王", 54));
 }

 /**
 * 发牌(默认p3为地主)
 * @param p1
 * @param p2
 * @param p3
 */
 public void send(Player p1,Player p2,Player p3) {
 ArrayList<Integer> intList = new ArrayList<Integer>();
 intList = fenpei(intList);

 //给p1发牌
 ArrayList<Card> clist = new ArrayList<Card>();
 for (int i = 0; i < 17; i++) {
 clist.add(arrayList.get(intList.get(i)));
 }
 p1.setList(clist);
 
 //给p2发牌
 clist = new ArrayList<Card>();
 for (int i = 17; i < 34; i++) {
 clist.add(arrayList.get(intList.get(i)));
 }
 p2.setList(clist);
 
 //给p3发牌
 clist = new ArrayList<Card>();
 for (int i = 34; i < 54; i++) {
 clist.add(arrayList.get(intList.get(i)));
 }
 p3.setList(clist);
 }
 
 /**
 * 将初始化牌库打乱后存入新数组
 * @param list
 * @return
 */
 public ArrayList<Integer> fenpei(ArrayList<Integer> list) {
 int index = 0;
 while (true) {
 int i = r.nextInt(54);
 for (Integer integer : list) {
 if (integer == i) {
 index = 1;
 break;
 }
 index = 0;
 }
 if(index == 0)
 list.add(i);
 if(list.size() == 54)
 break;
 }
 return list;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    Java Mybatis中的 ${ } 和 #{ }的区别使用详解

    这篇文章主要介绍了Mybatis中的 ${ } 和 #{ }的区别使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Springboot项目如何兼容老的Spring项目问题

    Springboot项目如何兼容老的Spring项目问题

    这篇文章主要介绍了Springboot项目如何兼容老的Spring项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 使用SpringBoot整合Jpa的过程详解

    使用SpringBoot整合Jpa的过程详解

    SpringBoot是一种快速开发框架,它简化了Java应用程序的开发过程,而Jpa是Java持久化规范的一种实现,将SpringBoot与Jpa整合可以更加方便地进行数据库操作,提高开发效率,本文将介绍如何使用Spring Boot整合Jpa,帮助读者快速上手并应用于实际项目中
    2023-12-12
  • springboot接口参数为List的问题

    springboot接口参数为List的问题

    这篇文章主要介绍了springboot接口参数为List的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • JVM的类加载过程详细说明

    JVM的类加载过程详细说明

    近来读了《深入理解JVM虚拟机》的部分内容,对JVM也慢慢有个整体的认识,今天就来分享一下我对JVM类加载过程的学习和理解,需要的朋友可以参考下
    2021-06-06
  • SpringBoot中的五种对静态资源的映射规则的实现

    SpringBoot中的五种对静态资源的映射规则的实现

    这篇文章主要介绍了SpringBoot中的五种对静态资源的映射规则的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • kafka安装部署超详细步骤

    kafka安装部署超详细步骤

    这篇文章主要介绍了kafka安装部署的详细步骤,主要应用场景是:日志收集系统和消息系统,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • 详解Java使用JMH进行基准性能测试

    详解Java使用JMH进行基准性能测试

    本文主要介绍了Java使用JMH进行基准性能测试,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 浅析Java ClassName.this中类名.this关键字的理解

    浅析Java ClassName.this中类名.this关键字的理解

    Java ClassName.this中类名.this关键字 的理解大家都了解多少,有不太了解的朋友可以参考下本文一起学习学习
    2016-05-05
  • Java实现超简单抖音去水印的示例详解

    Java实现超简单抖音去水印的示例详解

    抖音去水印方法很简单,以前一直没有去研究,以为搞个去水印还要用到算法去除,直到动手的时候才发现这么简单,不用编程基础都能做。所以本文将介绍一个超简单抖音视频去水印方法,需要的可以参考一下
    2022-03-03

最新评论