定义一个Playing_Card类
public class Playing_Cards {
//定义字牌私有属性
private String size;//纸牌表面上数值大小:A,2,3,4,5,6,7,8,9,10,J,Q,K,🃏(小王),🃏(大王)
private String color;//纸牌花色:♥,♠,♣,♦
private int value;//纸牌真正的数值大小3<4<5<6<7<8<9<10<J<Q<K<A<2<🃏(小王)<🃏(大王)
//构造一个无参构造器
public Playing_Cards() {
}
//构造一个有参构造器
public Playing_Cards(String size, String color, int value) {
this.size = size;
this.color = color;
this.value = value;
}
//封装
public String getSize() {
return size;
}
public void setSize(String size) {
this.size = size;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
//toString方法
@Override
public String toString() {
// return "Playing_Cards{" +
// "size='" + size + '\'' +
// ", color='" + color + '\'' +
// ", value=" + value +
// '}';
//用自己的,返回值就是大小和花色
return size+color;
}
}
再建一个Application实现类
import java.util.*;
/**
* 类成员变量:首字母小写和驼峰原则:monthSalary,除了第一个单词意外,后面的单词首字母大写
* 局部变量:首字母小写和驼峰原则
* 常量:大写字母和下划线:PI_VALUE
* 类名:首字母大写和驼峰原则:Man,GoodMan
* 方法名:首字母小写和驼峰原则:run(),runRun()
* */
public class Application {
public static List<Playing_Cards> cards=new ArrayList<>();//用到多态,以Playing_Cards类作为约束类
static {//静态代码块,初始化值,优先级大于编写的程序方法等
String[] cardsizes={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//定义一个String类型的集合,用来存储纸牌的面值大小
String[] cardcolors={"♥","♠","♦","♣"};//定义一个集合存储纸牌的花色
int value=0;//定一个空变量,代表纸牌实际大小值
//定义一个循环,将两个集合里的数据组合在一起
for (String cardcolor : cardcolors) {
//遍历四个颜色后再遍历A-K这13张纸牌,将他们拼接起来
for (String cardsize : cardsizes) {
Playing_Cards playCards=new Playing_Cards(cardcolor,cardsize,value);//创建一个新的playCard对象,通过前面创建的有参构造器,将三个对象当作参数传进去
cards.add(playCards);//使用集合的add方法,将刚创建的playCard对象组合而成的信息添加到cards集合中去
}
}
//创建两个大小王对象,小王++value是上面循环结束后+1,大王这是小王这+1后再+1,这样确保小王的value大于上面任何数的value,而大王大于小王的vlaue
Playing_Cards smallKing=new Playing_Cards("","🃏(小)",++value);
Playing_Cards bigKing=new Playing_Cards("","🃏(大)",++value);
Collections.addAll(cards,smallKing,bigKing);//调用集合工具collection的addAll方法,将大小王添进去
//Collections.addAll(被添加的对象,添加对象,添加对象,添加对象...);
System.out.println("整合后:"+cards);//打印集合信息查看
}
//mian主方法
public static void main(String[] args) {
//洗牌,调用集合工具Collections里的shuffle方法(),随机排序
Collections.shuffle(cards);
System.out.println("洗牌后"+cards);
//创建三个集合对象,分别代表三个玩家,将玩家拿到的纸牌放在各自的集合中
List<Playing_Cards> plasyer1=new ArrayList<>();
List<Playing_Cards> plasyer2=new ArrayList<>();
List<Playing_Cards> plasyer3=new ArrayList<>();
//开始发牌,业务逻辑
for (int i = 0; i < cards.size()-3; i++) {//抽出地主三张底牌
Playing_Cards card=cards.get(i);//创建card对象,用来将遍历到的纸牌赋值给card: 相当于循环数组模式:int a=arr[i]
if(i%3==0){
plasyer1.add(card);//如果i除以3的余数为0,玩家1就添加card;余数为1就给玩家2添加,余数为2就给玩家3添加
}else if(i%3==1){
plasyer2.add(card);
}else if(i%3==2){
plasyer3.add(card);
}
}
//底牌三张,创建新的集合对象,调用集合的subList方法,截取数据(截取开始位置,截取截至位置);
List<Playing_Cards> lastthree=cards.subList(cards.size()-3,cards.size());
//根据纸牌的面值排序
sortCards(plasyer1);
sortCards(plasyer2);
sortCards(plasyer3);
System.out.println("玩家1:"+plasyer1);
System.out.println("玩家2:"+plasyer2);
System.out.println("玩家3:"+plasyer3);
System.out.println("**************抢地主*************");
System.out.println("几号玩家抢地主?");
Scanner scanner=new Scanner(System.in);
int order=scanner.nextInt();
switch (order){
case 1:
System.out.println("一号玩家抢地主!");
System.out.println("玩家1:"+plasyer1);
System.out.println("玩家1的底牌:"+lastthree);
break;
case 2:
System.out.println("二号玩家抢地主!");
System.out.println("玩家2:"+plasyer2);
System.out.println("玩家2的底牌:"+lastthree);
break;
case 3:
System.out.println("三号玩家抢地主!");
System.out.println("玩家3:"+plasyer1);
System.out.println("玩家3的底牌:"+lastthree);
break;
}
}
//定义公共方法,方便所有玩家可以调用
public static void sortCards(List<Playing_Cards> plasyer) {
Collections.sort(plasyer, new Comparator<Playing_Cards>() {
@Override
public int compare(Playing_Cards o1, Playing_Cards o2) {
return o2.getValue()-o1.getValue();
}
});
}
}
运行结果: