Java 两种方法实现斗地主洗牌、发牌、理牌操作
package com.zhong.collection.cardplay;
public 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 number + color;
}
}
- Pople.java (参与游戏的人,附带拿牌信息)
package com.zhong.collection.cardplay;
import java.util.ArrayList;
public class People {
private String name;
private ArrayList<Card> cards = new ArrayList<>();
public People() {
}
public People(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public ArrayList<Card> getCards() {
return cards;
}
public void setCards(ArrayList<Card> cards) {
this.cards = cards;
}
@Override
public String toString() {
return "People{" +
"name='" + name + '\'' +
", cards=" + cards +
'}';
}
}
- Room.java (房间和整个牌库信息 洗牌、发牌、理牌规则)
package com.zhong.collection.cardplay;
import java.util.*;
public class Room {
private ArrayList<Card> allCards= new ArrayList<>();
private List<Card> lessCards = new ArrayList<>();
public Room() {
String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
String[] color = {"♣","♥", "♠", "◇"};
int size = 2;
for (String n : number) {
size++;
for (String c : color) {
Card card = new Card(n, c, size);
allCards.add(card);
}
}
allCards.add(new Card("", "小王", size++));
allCards.add(new Card("", "大王", size));
System.out.println("----------------牌库信息----------------");
System.out.println(allCards);
System.out.println("----------------牌库信息----------------");
}
public People randomSendCards(People people) {
Random random = new Random();
ArrayList<Card> cards = new ArrayList<>();
for (int j = 0; j < 17; j++) {
int i = random.nextInt(allCards.size());
Card card = allCards.get(i);
cards.add(card);
allCards.removeIf(x-> x == card);
}
people.setCards(cards);
return people;
}
public void shuffleSendCards(People p1, People p2, People p3) {
Collections.shuffle(allCards);
ArrayList<Card> cards1 = new ArrayList<>();
ArrayList<Card> cards2 = new ArrayList<>();
ArrayList<Card> cards3 = new ArrayList<>();
for (int i = 0; i < allCards.size()-3; i++) {
if (i % 3 ==0){
cards1.add(allCards.get(i));
} else if (i % 3 ==1) {
cards2.add(allCards.get(i));
}else {
cards3.add(allCards.get(i));
}
}
p1.setCards(cards1);
p2.setCards(cards2);
p3.setCards(cards3);
List<Card> cards = allCards.subList(allCards.size() - 3, allCards.size());
lessCards.addAll(cards);
}
public List<Card> getLessCards() {
return lessCards;
}
public void sortCard(People people) {
people.getCards().sort((Comparator.comparingInt(Card::getSize)));
}
}
package com.zhong.collection.cardplay;
public class CardPlay {
public static void main(String[] args) {
Room room = new Room();
People people1 = new People("小钟");
People people2 = new People("小王");
People people3 = new People("小红");
System.out.println("--------------发牌2-----------");
room.shuffleSendCards(people1,people2,people3);
System.out.println("底牌: " + room.getLessCards());
System.out.println("--------------排序后的牌组-----------");
System.out.println("底牌: " + room.getLessCards());
room.sortCard(people1);
room.sortCard(people2);
room.sortCard(people3);
System.out.println(people1);
System.out.println(people2);
System.out.println(people3);
}
}