实现斗地主发牌功能

编程实现控制台版支持三人对战的斗地主游戏(暂时只能发牌)。

(1)首先准备 54 张扑克牌并打乱顺序。

(2)由三个玩家交替摸牌,每人 17 张扑克牌,最后三张留作底牌。

(3)查看三个玩家手中的扑克牌和底牌。

(4)其中玩家手中的扑克牌需要按照大小顺序打印,规则如下:

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

代码分段

定义一些等会要用到的变量

 	private String cardA;   //用户A
    private String cardB;   //用户B
    private String cardC;   //用户C
    private List A = new ArrayList();   //用户A的手牌
    private List B = new ArrayList();   //用户B的手牌
    private List C = new ArrayList();   //用户C的手牌
    private List safeCards = new ArrayList();//最后三张底牌
    private Map map = null; //空的扑克牌

用于生成扑克牌的方法。

	/**
     * 生成一副扑克牌
     * @return
     */
    public static Map playingCard(){
    
    
        String[] color = new String[]{
    
    "♠", "♥", "♣", "♦" };
        String[] num = new String[]{
    
    "2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        String[] ghost = new String[]{
    
    "大王","小王"};
        Map<Integer,String> map = new HashMap<>();
        map.put(0,ghost[0]);
        map.put(1,ghost[1]);
        int index = 2;
        //注入
        for (int i = 0; i < num.length; i++) {
    
    
            for (int j = 0; j < color.length; j++) {
    
    
                map.put(index,color[j]+num[i]);
                index++;
            }
        }
        return map;
    }

实现洗牌发牌功能,并把牌存进全局变量A、B、C数组里。

    /**
     * 实现洗牌发牌功能
     */
	public void Shuffle(){
    
    
        List<Integer> list = new ArrayList<>(map.keySet());
        Collections.shuffle(list);
        safeCards = new ArrayList<>(list.subList(list.size() - 3, list.size()));
        list.removeAll(safeCards);
        Iterator<Integer> iterator = list.iterator();
        int a;
        int b;
        int c;
        while(iterator.hasNext()) {
    
    
            a = iterator.next();
            b = iterator.next();
            c = iterator.next();
            A.add(a);
            B.add(b);
            C.add(c);
            System.out.println("给" + cardA + "发一张[" + map.get(a) + "]");
            System.out.println("给" + cardB + "发一张[" + map.get(b) + "]");
            System.out.println("给" + cardC + "发一张[" + map.get(c) + "]");
        }
        iterator = safeCards.iterator();
        System.out.print("剩余底牌[");
        while(iterator.hasNext()) {
    
    
            System.out.print(map.get(iterator.next()));
            if (iterator.hasNext()){
    
    
                System.out.print(",");
            }
        }
        System.out.println("]");
    }

把手牌list转换成String类型,便于查看(实现了排序功能)

 /**
     *  把手牌list转换成String类型,便于查看
     * @param list 用户的手牌
     * @param name 用户的名字
     * @return
     */
    public String show(List list,String name){
    
    
        Collections.sort(list);
        StringBuilder sb = new StringBuilder();
        sb.append(name + "[");
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
    
    
            sb.append(map.get(iterator.next()));
            if (iterator.hasNext()){
    
    
                sb.append(",");
            }
        }
        sb.append("]");
        return sb+"";
    }

查看玩家名字

	/**
     * getCardA、getCardB、getCardC查看玩家名字
     */
    public String getCardA() {
    
    
        return cardA;
    }

    public String getCardB() {
    
    
        return cardB;
    }

    public String getCardC() {
    
    
        return cardC;
    }

用于更换玩家

/**
     * setCardA、setCardB、setCardC 更换玩家
     * @param cardA
     */
    public void setCardA(String cardA) {
    
    
        System.out.println("一号玩家[" + this.cardA + "]更换[" + cardA + "]");
        this.cardA = cardA;
    }
    public void setCardB(String cardB) {
    
    
        System.out.println("二号玩家[" + this.cardB + "]更换[" + cardB + "]");
        this.cardB = cardB;
    }
    public void setCardC(String cardC) {
    
    
        System.out.println("三号玩家[" + this.cardC + "]更换[" + cardC + "]");
        this.cardC = cardC;
    }

查看玩家的手牌

/**
     * getA、getB、getC 看扑克牌
     * getSafeCards 看底牌
     */
    public void getA() {
    
    
        System.out.println(show(A,cardA));
    }
    public void getB() {
    
    
        System.out.println(show(B,cardB));
    }
    public void getC() {
    
    
        System.out.println(show(C,cardC));
    }
    public void getSafeCards(){
    
    
        System.out.println(show(safeCards,"底牌"));
    }

构造方法:定义三个玩家,并获取一副新扑克牌

    /**
     * 构造方法定义三个玩家,并获取一副新扑克牌
     * @param cardA
     * @param cardB
     * @param cardC
     */
    public Test3(String cardA, String cardB, String cardC) {
    
    
        map = playingCard();    //生成一副新的扑克牌
        this.cardA = cardA;     //用户A取名
        this.cardB = cardB;     //用户B取名
        this.cardC = cardC;     //用户C取名
    }

代码总汇

功能类

package test3;

import java.util.*;

/**
 * @author cyh
 * @version 1.0
 * @date 2021/1/5 8:48
 */
public class Test3 {
    
    
    private String cardA;   //用户A
    private String cardB;   //用户B
    private String cardC;   //用户C
    private List A = new ArrayList();   //用户A的手牌
    private List B = new ArrayList();   //用户B的手牌
    private List C = new ArrayList();   //用户C的手牌
    private List safeCards = new ArrayList();//最后三张底牌
    private Map map = null; //空的扑克牌

    /**
     * 构造方法定义三个玩家,并获取一副新扑克牌
     * @param cardA
     * @param cardB
     * @param cardC
     */
    public Test3(String cardA, String cardB, String cardC) {
    
    
        map = playingCard();    //生成一副新的扑克牌
        this.cardA = cardA;     //用户A取名
        this.cardB = cardB;     //用户B取名
        this.cardC = cardC;     //用户C取名
    }

    /**
     * 生成一副扑克牌
     * @return
     */
    public static Map playingCard(){
    
    
        String[] color = new String[]{
    
    "♠", "♥", "♣", "♦" };
        String[] num = new String[]{
    
    "2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        String[] ghost = new String[]{
    
    "大王","小王"};
        Map<Integer,String> map = new HashMap<>();
        map.put(0,ghost[0]);
        map.put(1,ghost[1]);
        int index = 2;
        //注入
        for (int i = 0; i < num.length; i++) {
    
    
            for (int j = 0; j < color.length; j++) {
    
    
                map.put(index,color[j]+num[i]);
                index++;
            }
        }
        return map;
    }

    /**
     * 实现洗牌发牌功能
     */
    public void Shuffle(){
    
    
        List<Integer> list = new ArrayList<>(map.keySet());
        Collections.shuffle(list);
        safeCards = new ArrayList<>(list.subList(list.size() - 3, list.size()));
        list.removeAll(safeCards);
        Iterator<Integer> iterator = list.iterator();
        int a;
        int b;
        int c;
        while(iterator.hasNext()) {
    
    
            a = iterator.next();
            b = iterator.next();
            c = iterator.next();
            A.add(a);
            B.add(b);
            C.add(c);
            System.out.println("给" + cardA + "发一张[" + map.get(a) + "]");
            System.out.println("给" + cardB + "发一张[" + map.get(b) + "]");
            System.out.println("给" + cardC + "发一张[" + map.get(c) + "]");
        }
        iterator = safeCards.iterator();
        System.out.print("剩余底牌[");
        while(iterator.hasNext()) {
    
    
            System.out.print(map.get(iterator.next()));
            if (iterator.hasNext()){
    
    
                System.out.print(",");
            }
        }
        System.out.println("]");
    }

    /**
     *  把手牌list转换成String类型,便于查看
     * @param list 用户的手牌
     * @param name 用户的名字
     * @return
     */
    public String show(List list,String name){
    
    
        Collections.sort(list);
        StringBuilder sb = new StringBuilder();
        sb.append(name + "[");
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
    
    
            sb.append(map.get(iterator.next()));
            if (iterator.hasNext()){
    
    
                sb.append(",");
            }
        }
        sb.append("]");
        return sb+"";
    }

    /**
     * getA、getB、getC 看扑克牌
     * getSafeCards 看底牌
     */
    public void getA() {
    
    
        System.out.println(show(A,cardA));
    }
    public void getB() {
    
    
        System.out.println(show(B,cardB));
    }
    public void getC() {
    
    
        System.out.println(show(C,cardC));
    }
    public void getSafeCards(){
    
    
        System.out.println(show(safeCards,"底牌"));
    }

    /**
     * getCardA、getCardB、getCardC查看玩家名字
     */
    public String getCardA() {
    
    
        return cardA;
    }

    public String getCardB() {
    
    
        return cardB;
    }

    public String getCardC() {
    
    
        return cardC;
    }

    /**
     * setCardA、setCardB、setCardC 更换玩家
     * @param cardA
     */
    public void setCardA(String cardA) {
    
    
        System.out.println("一号玩家[" + this.cardA + "]更换[" + cardA + "]");
        this.cardA = cardA;
    }
    public void setCardB(String cardB) {
    
    
        System.out.println("二号玩家[" + this.cardB + "]更换[" + cardB + "]");
        this.cardB = cardB;
    }
    public void setCardC(String cardC) {
    
    
        System.out.println("三号玩家[" + this.cardC + "]更换[" + cardC + "]");
        this.cardC = cardC;
    }
}

实习类

package test3;

import java.util.Scanner;

/**
 * @author cyh
 * @version 1.0
 * @date 2021/1/5 10:17
 */
public class Test3Test {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc =new Scanner(System.in);
        System.out.println("-------------------");
        System.out.println("[欢迎来到拉勾博彩平台]");
        System.out.println("[请输入参加玩家的名字]");
        Test3 t = new Test3(sc.next(),sc.next(),sc.next());
        System.out.println("[ 三位玩家名字分别是 ]");
        System.out.println("[ 玩家一:" + t.getCardA() + " ]");
        System.out.println("[ 玩家二:" + t.getCardB() + " ]");
        System.out.println("[ 玩家三:" + t.getCardC() + " ]");
        System.out.println("-------------------");
        System.out.println("-------------------");
        commence:while (true){
    
    
            System.out.println("[需要更换玩家请按E ]");
            System.out.println("[不需要请输入任意键]");
            if("e".equalsIgnoreCase(sc.next())){
    
    
                System.out.println("[请输入更换的位置]");
                System.out.println("[  输入整数数字  ]");
                int opt = sc.nextInt();
                opt:while (true){
    
    
                    switch (opt){
    
    
                        case 1:
                            System.out.println("[ 正在更换玩家一 ]");
                            System.out.println("[ 原来的用户名:" + t.getCardA() + " ]");
                            System.out.println("[输入更换的用户名]");
                            t.setCardA(sc.next());
                            break opt;
                        case 2:
                            System.out.println("[ 正在更换玩家二 ]");
                            System.out.println("[ 原来的用户名:" + t.getCardB() + " ]");
                            System.out.println("[输入更换的用户名]");
                            t.setCardB(sc.next());
                            break opt;
                        case 3:
                            System.out.println("[ 正在更换玩家三 ]");
                            System.out.println("[ 原来的用户名:" + t.getCardC() + " ]");
                            System.out.println("[输入更换的用户名]");
                            t.setCardC(sc.next());
                            break opt;
                        default:
                    }
                }
            }else {
    
    
                break commence;
            }
        }
        System.out.println("------------游戏开始------------");
        t.Shuffle();
        System.out.println("------------发牌结束------------");
        t.getA();
        t.getB();
        t.getC();
        t.getSafeCards();
    }
}

效果图

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Guai_Ka/article/details/112217155
今日推荐