使用Java集合实现麻将(准备牌、洗牌、发牌、看牌)

ArrayList简单实现麻将且排序

背景

完成麻将1-9 的**洗牌发牌操作**(不包括:东西南北风、中发白)
麻将牌型科普:
1、条子:1-9每个数字*4 = 36张
2、万子:1-9每个数字*4 = 36张
3、筒子:1-9每个数字*4 = 36张
总计:36+36+36 = 108张
要求:每人发13张随即牌,**考虑排序问题**

实现业务逻辑

1、欢迎用户,且让用户执行洗牌操作指令
2、洗牌
3、发牌
4、将发到每位玩家手中的麻将进行排序
5、将每位玩家手中的牌进行遍历

案例代码

  • 麻将类
package com.rxx.day12_27;
import java.util.Objects;

public class Majiang implements Comparable<Majiang>{
    private String color;//花色
    private String num;//数字
    private Integer index;//个数
	
	//无参构造器
    public Majiang() {
    }
	//有参构造器
    public Majiang(String color, String num,Integer index) {
        this.color = color;
        this.num = num;
        this.index = index;
    }
	
	//比较器:重写Comparable接口中的compareTo方法,定义麻将排序比较规则
    @Override
    public int compareTo(Majiang o) {
        return this.index - o.index;
    }
	//  get/set方法
    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public Integer getIndex() {
        return index;
    }

    public void setIndex(Integer index) {
        this.index = index;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Majiang majiang = (Majiang) o;
        return Objects.equals(color, majiang.color) &&
                Objects.equals(num, majiang.num) &&
                Objects.equals(index, majiang.index);
    }

    @Override
    public int hashCode() {
        return Objects.hash(color, num, index);
    }

    @Override
    public String toString() {
        return num +  "-" + color;
    }
}
  • 麻将业务类
package com.rxx.day12_27;

import java.util.*;

public class MajiangDemo {
   //构建Scanner对象
   public static Scanner sc = new Scanner(System.in);
   //构建四位麻将玩家
   public static List<Majiang> list_one,list_two,list_three,list_four;
   public static void main(String[] args) {
       //1、欢迎玩家开始洗牌操作
       welcome();
       //2、用户输入指令
       String xp = sc.nextLine();
       if ("xp".equalsIgnoreCase(xp)) {
           //3、洗牌操作
           List<Majiang> cardList = shuffleCards();
           System.out.println(cardList);
           //4、发牌操作
           playingMaJiang(cardList);
           //5、麻将排序
           maJiangCollection();
           //6、输出四位玩家手中的麻将
           printAllMJ();
       }
   }
   //封装:输出每位玩家手中的牌
   public static void printAllMJ(){
       System.out.println("东号玩家牌型为:" + list_one);
       System.out.println("南号玩家牌型为:" + list_two);
       System.out.println("西号玩家牌型为:" + list_three);
       System.out.println("北号玩家牌型为:" + list_four);
   }
   //封装:将四个人手中的麻将排序
   public static void maJiangCollection(){
       Collections.sort(list_one);
       Collections.sort(list_two);
       Collections.sort(list_three);
       Collections.sort(list_four);
   }

   //封装:发麻将
   public static void playingMaJiang(List<Majiang> cardList){
       list_one = cardList.subList(0, 13);
       list_two = cardList.subList(13, 26);
       list_three = cardList.subList(26, 39);
       list_four = cardList.subList(39, 52);
   }

   //封装欢迎
   public static void welcome(){
       System.out.println("欢迎来到欢乐菠菜娱乐中心");
       System.out.println("请选择您的方位:1-东方;2-南方;3-西方;4-北方");
       int direction= Integer.parseInt(sc.nextLine());
       //根据方位判定玩家今日的胜率
       System.out.println("祝您今天财源广进---->");
       System.out.println("请输入'xp'后,按回车开始进行洗牌发牌操作...");
   }

   //封装:洗牌操作
   public static List<Majiang> shuffleCards(){
       //1.定义返回牌型集合
       List<Majiang> list = new ArrayList<>();
       //2.定义花色
       String[] color = {"条","筒","万"};
       //3.定义字符
       String[] num = {"一", "二", "三", "四", "五", "六", "七", "八","九"};
       //4.给每个牌一个数字方便后期排序
       int index=0;
       //4.定义随机数
       Random r = new Random();
       for(int i=0;i<color.length;i++){
               for(int j=0;j<num.length;j++){
               //每个牌型四张牌,但是index不一样
               list.add(new Majiang(color[i],num[j],index++));
               list.add(new Majiang(color[i],num[j],index++));
               list.add(new Majiang(color[i],num[j],index++));
               list.add(new Majiang(color[i],num[j],index++));
           }
       }
       //使用经典Collections.shuffle打乱顺序
       Collections.shuffle(list);
       return list;
   }
}

谢谢大家阅读,若有误之处,欢迎大家指正……


版权声明:本文为weixin_47891374原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>