使用Java集合实现麻将(准备牌、洗牌、发牌、看牌)
背景
完成麻将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 版权协议,转载请附上原文出处链接和本声明。