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;
 }
}

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

(0)

相关推荐

  • java模拟实现斗地主发牌小程序

    一副扑克有54张牌:大小王+4*13,接下来我们来模拟一下斗地主的发牌过程 首先,我们需要买牌,新买来的牌都是按顺序摆放的,因此下一步是洗牌,最后就是发牌了,不过发牌的时候要注意还要在最后留三张底牌. 主要使用的类有 ArrayList:用来存储扑克,Collections用来洗牌. import java.util.ArrayList; import java.util.Collections; /* * 模拟斗地主发牌 一共54张牌 * 买牌 * 洗牌 * 发牌 * */ public cl

  • java实现斗地主游戏

    感想: 第一次写博客,感觉编辑器挺复杂厉害的,感觉自己的内容挺简单的.有什么问题请多多指教! 思路: 1.创建一个扑克牌的实体类Poker,设置了四个参数:花色.数字.牌值(判断大小).是否地主牌,实现getset方法和构造方法: 2.创建一个玩家的实体类Player,设置了四个参数: 初始牌集合,排序后牌集合,牌值集合,是否地主,实现getset方法和构造方法: 3.洗牌:循环嵌套花色数组跟数字数组生成52个Poker,手动加入大小王Poker,放进map(int,Poker)里面,利用Col

  • java实现斗地主发牌系统

    本文实例为大家分享了java实现斗地主发牌系统的具体代码,供大家参考,具体内容如下 玩家类 package com.softeem.example; import java.util.ArrayList; import java.util.List; /** * 玩家类 * */ public class Player { private String name; //名字 private boolean landowner; //是否地主 private List<Card> cards =

  • Java实现斗地主案例

    本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下 import java.util.ArrayList; import java.util.Collections; public class DemoPoker { public static void main(String[] args) { /** *一.准备牌 普通牌:2 A K...3 花色:♥ ♠ ♣ ♦ 王牌:大王 小王 创建一个集合,把牌组装之后存进去 */ String[] numbers = {"2&

  • Java实现斗地主最简代码实例

    案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌). 具体代码实现步骤: 扑克牌准备操作 import java.util.ArrayList; import java.util.Collections; import java.util.List; public class PokerGame { public static void main(String[] args) {

  • vpn连接程序hta版实现代码(修改)

    复制代码 代码如下: <HTA:APPLICATION ID="MySampleHTA" Caption="yes" SCROLL="auto" border="none" borderStyle="static" SINGLEINSTANCE="yes" maximizebutton="no" BORDER="no" icon="

  • 详解java_ 集合综合案例:斗地主

    案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 案例分析 1.准备牌: 牌可以设计为一个ArrayList,每个字符串为一张牌. 每张牌由花色数字两部分组成,我们可以使用花色 集合与数字集合嵌套迭代完成每张牌的组装. 牌由Collections类的shuffle方法进行随机排序. 2.发牌 将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌. 3.看

  • Java实现斗地主简化版

    本文实例为大家分享了Java实现斗地主的具体代码,供大家参考,具体内容如下 package com.westos.chinesePoker; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.TreeSet; /*

  • Java实现简单的斗地主游戏

    本文实例为大家分享了Java实现斗地主游戏的具体代码,供大家参考,具体内容如下 原理图: 斗地主过程: 1.组合牌  * 2.洗牌  * 3.发牌  * 4.看牌 代码实现: package itcast.demo6; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; public class DouDiZhu { public static void main(String[]

  • java实现模仿斗地主发牌

    本文实例为大家分享了java斗地主发牌的具体代码,供大家参考,具体内容如下 分析 这是一个模仿斗地主发牌的例子: 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 用0~53分别对应相应的花色和牌面值: 用shuffle随机打乱排序好的数字,起到洗牌的作用: 使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌. 实现方式 准备牌: 牌可以设计为一个ArrayList,每个字符串为一张牌. 每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每

随机推荐