Java斗地主发牌

斗地主发牌流程设计

流程分析

  • 涉及知识点
    Java的数组操作
    “洗牌”算法的了解使用
    类和对象的创建使用
    数据的输入与输出
    ArrayList 的了解使用
  • 题目
    游戏至少由3个玩家进行,用一副54张牌(大小王),其中一方为地主,其余为农民,双方对战,闲出完牌的一方获胜。游戏所使用的扑克牌共分黑桃(♠)、红桃(♥)、梅花(♣)、方块(♦)四种花色
    发牌:一副牌54张,随机洗牌后,留三张底牌,其他发给三人,系统随机翻出一张 明牌,获得明牌的人为地主,并将三张底牌交给地主
  • 功能要求
    基础功能:
    1、为我那家创建Player嘞,并在类中创建构造方法,其中的 属性有:(1)姓名:(2)积分:(3)角色:(4)手牌
    2、在另外一个Landlords类中,创建三个Player对象,代表三个玩家,实现随机发牌功能,并显示手牌
    扩展功能:
    玩家手牌有序排列,从大到小不分花色

代码实现

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<>();
//        /*随机抽一张明牌*/
        double mp = (int) (Math.random() * 54); //随机生成 [0~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;
    }
}

运行效果:
Java斗地主发牌_第1张图片

你可能感兴趣的:(Java,java)