如何简单编写斗地主发牌程序

我们先来看一看要求

 * 纸牌管理类

 * 斗地主游戏规则如下:

 * 1.有三名玩家,可从控制台赋值玩家姓名,玩家中会有牌类集合的属性,还有是否是地主的状态

 * 2.牌类有两个属性:花色和点数。花色有4种:黑红梅方(可用枚举)点数对应有13加上两张王牌(可用枚举)。

 * 3.扑克牌管理类:用于产生54张随即顺序的牌堆(牌类集合,54张牌不变,变得是顺序),给玩家发牌,并随机产生地主,把剩余3张底牌给地主,并展示三位玩家的手牌。同时把手牌信息存入文件中

一,首先创建纸牌类

可以利用数组,也可以利用集合

先把花色和数字定义好,然后把大小王添加进去,接着利用递归的方法,将花色和数字一一对应,这里要注意下标的问题

public class Playcard {
    public static void main(String[] args)throws IOException {

        ArrayList<Integer> numCards = new ArrayList<>();//numcards为下标的集合
        HashMap<Integer, String> cards = new HashMap<>();//cards为纸牌的集合,包括下标和纸牌数字花色
        String[] num = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        String[] colour = {"♠", "♦", "♣", "♥"};
        numCards.add(0);
        numCards.add(1);
        cards.put(0, "大王");
        cards.put(1, "小王");
        int a = 2;
        for (String s : colour) {
            for (String s1 : num) {
                numCards.add(a);
                cards.put(a, s + s1);
                a++;
            }
        }
        System.out.println("开始发牌");

二,下面把牌分成3份,先选出玩家和地主的牌,

for (int q = 0; q < 10; q++) {
    String b = "第" + (q + 1) + "次展示玩家和牌";
    StringBuilder s2 = new StringBuilder("");
    StringBuilder s3 = new StringBuilder("");
    StringBuilder s4 = new StringBuilder("");
    StringBuilder s5 = new StringBuilder("");
    System.out.println(b);
    Collections.shuffle(numCards);//shuffle()方法是打乱顺序,这里打乱下标的顺序
    ArrayList player1 = new ArrayList();
    ArrayList player2 = new ArrayList();
    ArrayList player3 = new ArrayList();
    ArrayList master = new ArrayList();
    for (int i = 0; i <= 53; i++) {//i为纸牌下标,遍历集合把牌分成三份
        if (i <= 2) {
            master.add(numCards.get(i));
        } else if (i % 3 == 1) {
            player1.add(numCards.get(i));
        } else if (i % 3 == 2) {
            player2.add(numCards.get(i));
        } else {
            player3.add(numCards.get(i));
        }
    }

三,展示玩家的牌和地主牌

String s6 = "1号玩家的牌为:";
System.out.println(s6);
for (int i = 0; i < player1.size(); i++) {
    System.out.println(cards.get(player1.get(i)));//cards调用get方法
    s2 = s2.append(cards.get(player1.get(i)));
}
String s7 = "2号玩家的牌为:";
System.out.println(s7);
for (int i = 0; i < player2.size(); i++) {
    System.out.println(cards.get(player2.get(i)));
    s3 = s3.append(cards.get(player2.get(i)));
}
String s8 = "3号玩家的牌为:";
System.out.println(s8);
for (int i = 0; i < player3.size(); i++) {
    System.out.println(cards.get(player3.get(i)));
    s4 = s4.append(cards.get(player3.get(i)));
}
String s9 = "地主玩家的牌为:";
System.out.println(s9);
for (int i = 0; i < master.size(); i++) {
    System.out.println(cards.get(master.get(i)));
    s5 = s5.append(cards.get(master.get(i)));
}
String s10 = b + "\n" + s6 + "\n" + s2 + "\n" + s7 + "\n" + s3 + "\n" + s8 + "\n" + s4 + "\n" + s9 + "\n" + s5 + "\n";//这里要注意换行,语句要注意一一对应
System.out.println("**************************");
System.out.println(s10);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值