本篇章仅利用了ArrayList集合的知识,还包括一些简单的collections的方法
斗地主的规则不再赘述,下面简单介绍一下代码。
包括两个类(有参 、无参、get、set)和一个函数
1、Room 房间类
包括一个 List<Card> allCards 的属性:代表牌库。
public static class Room{
private List<Card> allCards = new ArrayList<>(); //一副牌
public Room() {
//做出54张牌,存入集合allCards
//a、点数:个数确定了,类型确定
String[] numbers = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
//b、花色:个数确定了,类型确定
String[] colors = {"♠","♥","♣","♦"};
int size = 0;
for (int i = 0; i < numbers.length; i++) {
size++;
for (int j = 0; j < colors.length; j++) {
//得到一张牌
Card card = new Card(numbers[i],colors[j],size);
allCards.add(card); //存入牌
}
}
Card card1 = new Card("","🃏",++size); //大王
Card card2 = new Card("","¥",++size); //小王
Collections.addAll(allCards,card1,card2);
System.out.println("一副新牌:" + allCards);
}
public void start(){
//1、洗牌
Collections.shuffle(allCards);
System.out.println("洗牌后:" + allCards);
//2、发牌 三个玩家A B C
List<Card> A = new ArrayList<>();
List<Card> B = new ArrayList<>();
List<Card> C = new ArrayList<>();
List<Card> D; //底牌
//发牌的具体方法
for (int i = 0; i < allCards.size() - 3; i++) {
Card card = allCards.get(i);
if(i % 3 == 0){
A.add(card);
} else if (i % 3 == 1) {
B.add(card);
} else if (i % 3 == 2) {
C.add(card);
}
}
//subList 用于截取从a ~ b的信息
D = allCards.subList(allCards.size() - 3,allCards.size()); //52,53,54
System.out.println("---------------发牌----------------");
System.out.println("A" + A);
System.out.println("B" + B);
System.out.println("C" + C);
//3、排序
sordCards(A);
sordCards(B);
sordCards(C);
System.out.println("---------------给手牌排序----------------");
System.out.println("A" + A);
System.out.println("B" + B);
System.out.println("C" + C);
//4、抢地主
//假设 B 抢到了 //这里可以自行用控制台输入,但是需要修改部分代码
B.addAll(D);
sordCards(A);
sordCards(B);
sordCards(C);
System.out.println("----------------假设B抢到了地主---------------");
System.out.println("A" + A);
System.out.println("B" + B);
System.out.println("C" + C);
System.out.println(D);
}
//自定义排序规则
private void sordCards(List<Card> cards) {
Collections.sort(cards, new Comparator<Card>() {
@Override
public int compare(Card o1, Card o2) {
//也可以升序
return o2.getSize() - o1.getSize(); //降序排序
}
});
}
}
2、Card牌类
包括数字(String number)、花色(String color)、大小(int size)三种属性。
public static class Card{
private String number; //数字
private String color; //花色
private int size; //大小
public Card() {
}
public Card(String number, String color, int size) {
this.number = number;
this.color = color;
this.size = size;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
//用于直接调用对象就可以输出具体内容,否则输出的是地址,内容可以自定义
@Override
public String toString() {
return color + number ;
}
}
3、m4()方法 用于封装所有代码,可以在测试类中直接调用该函数。
public static void m4(){
/*
//目标:斗地主游戏的案例开发
业务需求分析:
业务:总共有54张牌
点数:“3”,“4”,“5”,“6”,“7”,“8”,“9”,“10”,“J”,“Q”,“K”,“1”,“2”
花色:“♠”,“♥”,“♣”,“♦”
大小王:“🃏”,“¥”
点数分别要组成四种花色,大小王各一张
斗地主:发出51张牌,剩下3张作为底牌
*/
Room room = new Room();
room.start();
}
4、玩家也可以单独设置为一个类