斗地主发牌Java课程设计

斗地主发牌

Java课程设计
image-20201227160107684

Player类

public class Player {
    // 玩家姓名
    private String name1;
    private String name2;
    private String name3;
    //玩家积分
    private int grade;
    // 玩家类型:农民/地主
    private String type1="农民";
    private String type2="农民";
    private String type3="农民";

    public Player() { //无参构造方法
    }

    public Player(String name1, String name2, String name3) { //输入姓名的有参构造方法
        this.name1 = name1;
        this.name2 = name2;
        this.name3 = name3;
    }

    //get/set方法
    public String getName1() {
        return name1;
    }

    public void setName1(String name1) {
        this.name1 = name1;
    }

    public String getName2() {
        return name2;
    }

    public void setName2(String name2) {
        this.name2 = name2;
    }

    public String getName3() {
        return name3;
    }

    public void setName3(String name3) {
        this.name3 = name3;
    }

    public int getGrade() {
        return grade;
    }

    public void setGrade(int grade) {
        this.grade = grade;
    }

    public String getType1() {
        return type1;
    }

    public void setType1(String type1) {
        this.type1 = type1;
    }

    public String getType2() {
        return type2;
    }

    public void setType2(String type2) {
        this.type2 = type2;
    }

    public String getType3() {
        return type3;
    }

    public void setType3(String type3) {
        this.type3 = type3;
    }
}

Landlords类

import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class Landlords {
    public static void main(String[] args) {
        prin(); //调用选择页面方法
        Scanner sc = new Scanner(System.in);
        Player p = null;
        while (true) {
            System.out.println("请选择:");
            int i = sc.nextInt();
            if (i == 1) {
                 p = getplay(); //调用输入玩家姓名方法,并返回Player对象
                System.out.println("玩家已经准备完毕,请发牌!");
            } else if (i == 2) {
                fapoker(p); //调用 随机发牌方法
            } else if (i == 0) {
                System.exit(0); //结束程序
            }
        }
    }

    public static void fapoker(Player p) { // 随机发牌方法
        //创建一个集合来存牌
        ArrayList<String> Pokers = new ArrayList<>();
        //创建一个集合用来存储索引
        ArrayList<Integer> index = new ArrayList<>();
        String[] colors = {"♠","♥","♦","♣"};
        String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};

        int indexs=0;
        Pokers.add("大王");
        index.add(indexs); //存储到索引集合
        indexs++; //1
        Pokers.add("小王");
        index.add(indexs);
        indexs++; //2
        for (String number : numbers) {
            for (String color : colors) {
                Pokers.add(number+color); // 将组合好的牌存储
                index.add(indexs); //将索引存储
                indexs++;
            }
        }
        //洗牌
        //调用Collections工具类中的shuffle方法打乱索引
      Collections.shuffle(index);

        /*创建四个集合,三个用来存储玩家的牌,一个用来存储底牌*/
        ArrayList<Integer> name1 = new ArrayList<>();
        ArrayList<Integer> name2 = new ArrayList<>();
        ArrayList<Integer> name3 = new ArrayList<>();
        ArrayList<Integer> Dipai = new ArrayList<>();
//        /*随机抽一张明牌,不包括3张底牌*/
        double mp = (int) (Math.random() * 51+3); //随机生成 [3~54)
        for (int i = 0; i < index.size(); i++) {
            if (i <=2) { //底牌
                Dipai.add(index.get(i));
            } else if (i % 3 == 0) { //分牌给玩家
                name1.add(index.get(i));
                if (i == mp) { //比较明牌与玩家牌,相同则为地主,给该玩家三张底牌
                    getdipai(name1,Dipai);
                    p.setType1("地主");
                }
            } else if (i % 3 == 1) {
                name2.add(index.get(i));
                if (i == mp) { //
                    getdipai(name2, Dipai);
                    p.setType2("地主");
                }
            } else if (i % 3 == 2) {
                name3.add(index.get(i));
                if (i == mp) { //
                    getdipai(name3, Dipai);
                    p.setType3("地主");
                }
            }
        }
        //排序每个玩家的牌的索引
        Collections.sort(name1);
        Collections.sort(name2);
        Collections.sort(name3);

        //调用方法看牌
        lookPokers(p.getName1(), p.getType1(), name1,Pokers);
        lookPokers(p.getName2(), p.getType2(), name2,Pokers);
        lookPokers(p.getName3(), p.getType3(), name3,Pokers);
    }

    public static void lookPokers(String name, String type, ArrayList<Integer> index,ArrayList<String> poker) { //看牌方法
        System.out.println(type + "--" + name + "的牌是:");
        for (Integer i : index) {
            System.out.print(poker.get(i)+" ");
        }
        System.out.println();
    }

    public static void prin() { //选择页面框的方法
        System.out.println("***************************");
        System.out.println("*******   斗地主    ********");
        System.out.println("*******1、玩家进场 *********");
        System.out.println("*******2、随机发牌 *********");
        System.out.println("*******0、退出游戏 *********");
        System.out.println("***************************");
    }

    public static void getdipai(ArrayList<Integer> paly, ArrayList<Integer> list) { //遍历底牌集合 将底牌给地主的方法
        for (int s : list) {
            paly.add(s);
        }
    }

    public static Player getplay() { //输入玩家姓名的方法
        Scanner sc = new Scanner(System.in);
        System.out.println("输入第1个玩家:");
        String name1 = sc.next();
        System.out.println("输入第2个玩家:");
        String name2 = sc.next();
        System.out.println("输入第3个玩家:");
        String name3 = sc.next();

        Player player = new Player(name1, name2, name3);
        return player;
    }
}

运行效果

image-20201227170337153

  • 14
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值