PokerCard
/**
* 扑克
* 花色:♠ ♣ ♦ ♥
* 牌号:A 2 3 4 5 6 7 8 9 J Q K
* 大王,小王
*/
public class PokerCard {
private String color;//花色
private String cardNum;//牌号
private int rank;//
public PokerCard(String color, String cardNum, int rank) {
this.color = color;
this.cardNum = cardNum;
this.rank = rank;
}
@Override
public String toString() {
return (color==null?"":color)+""+cardNum+"["+rank+"]";
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getCardNum() {
return cardNum;
}
public void setCardNum(String cardNum) {
this.cardNum = cardNum;
}
public int getRank() {
return rank;
}
public void setRank(int rank) {
this.rank = rank;
}
}
Poker
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
/**
* 扑克
* 花色:♠ ♣ ♦ ♥
* 牌号:A 2 3 4 5 6 7 8 9 J Q K
* 大王,小王
*/
public class Poker {
//一副牌
private List<PokerCard> pokerList;
public List<PokerCard> getPokerList() {
return pokerList;
}
public void setPokerList(List<PokerCard> pokerList) {
this.pokerList = pokerList;
}
//无参构造。初始化一副牌
public Poker() {
String[]colors={"♠","♣","♦","♥"};
pokerList =new ArrayList<>();
//接下来生成牌
// 大小王
PokerCard pc1=new PokerCard("", "大王",1);
pokerList.add(pc1);
PokerCard pc2=new PokerCard("", "小王",2);
pokerList.add(pc2);
//2牌的四种花色
for (int i = 0 ; i < colors.length; i++) {//四种花色
PokerCard pc=new PokerCard(colors[i], "2",3);
pokerList.add(pc);
}
//A牌的四种花色
for (int i = 0 ; i < colors.length; i++) {//四种花色
PokerCard pc=new PokerCard(colors[i], "A",4);
pokerList.add(pc);
}
//JQK牌的四种花色
for (int i = 0 ; i < colors.length; i++) {//四种花色
PokerCard pc=new PokerCard(colors[i], "K",5);
pokerList.add(pc);
}
for (int i = 0 ; i < colors.length; i++) {//四种花色
PokerCard pc=new PokerCard(colors[i], "Q",6);
pokerList.add(pc);
}
for (int i = 0 ; i < colors.length; i++) {//四种花色
PokerCard pc=new PokerCard(colors[i], "J",7);
pokerList.add(pc);
}
/**
* 3-10的牌
* 3牌3 15
* 4牌4 14
* 5牌5 13
* 6牌6 12
* 7牌7 11
* 8牌8 10
* 9牌9 9
* 10牌10 8
*/
//3-10的牌
for (int i = 3,i2=15; i <=10 ; i++,i2--) {
//2-10牌的四种花色
for (int j = 0; j < colors.length; j++) {
PokerCard pc=new PokerCard(colors[j], i+"",i2);
pokerList.add(pc);
}
}
}
//洗牌
public void shuffle(){
System.out.println("-->开始洗牌--");
Collections.shuffle(this.pokerList);
System.out.println("-->洗牌中--");
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("-->洗牌结束...");
}
//发牌
/**
* 三个人斗地主
* 三个人
* 底牌三张
*/
public void licensing(){
//4个新的集合,3个是玩家的手牌,1个是底牌
List<PokerCard> p1=new ArrayList<>();
List<PokerCard> p2=new ArrayList<>();
List<PokerCard> p3=new ArrayList<>();
List<PokerCard> p0=new ArrayList<>();//底牌
//遍历元素,发牌
for (int i = 0; i < this.pokerList.size()-3; i++) {
//如何让三个人依次拿牌 三个人,当做3进制:0 1 2
if (i%3==0){
p1.add(this.pokerList.get(i));
}else if (i%3==1){
p2.add(this.pokerList.get(i));
}else if (i%3==2)
p3.add(this.pokerList.get(i));
}
p0.add(this.pokerList.get(this.pokerList.size()-1));
p0.add(this.pokerList.get(this.pokerList.size()-2));
p0.add(this.pokerList.get(this.pokerList.size()-3));
//显示牌
sort(p1);
System.out.print("玩家1手牌["+p1.size()+"张]:");
for (int i = 0; i < p1.size(); i++) {
System.out.print(p1.get(i)+" ");
}
System.out.println();
sort(p2);
System.out.print("玩家2手牌["+p2.size()+"张]:");
for (int i = 0; i < p2.size(); i++) {
System.out.print(p2.get(i)+" ");
}
System.out.println();
sort(p3);
System.out.print("玩家3手牌["+p3.size()+"张]:");
for (int i = 0; i < p3.size(); i++) {
System.out.print(p3.get(i)+" ");
}
System.out.println();
//打印底牌
sort(p0);
System.out.print("底牌["+p0.size()+"张]:");
for (int i = 0; i < p0.size(); i++) {
System.out.print(p0.get(i)+" ");
}
}
/**
* 给牌顺序(大牌在左)
*/
public void sort(List<PokerCard> list){
//冒泡排序:相邻两个元素比较j vs j+1
for (int i = 0; i < list.size()-1-i; i++) {
for (int j = 0; j < list.size()-1-j; j++) {
if (list.get(j).getRank()>list.get(j+1).getRank()){
PokerCard temp=list.get(j);
list.set(j, list.get(j+1));//把j+1位置的元素,设置到了j的位置
list.set(j+1, temp);
}
}
}
}
}
测试类
import java.util.Collections;
import java.util.Comparator;
public class Test {
public static void main(String[] args) {
Poker poker=new Poker();
poker.shuffle();//洗牌
System.out.println(poker.getPokerList());
PokerCardComparator pokerCardComparator= new PokerCardComparator();
Collections.sort(poker.getPokerList(),pokerCardComparator);
System.out.println(poker.getPokerList());
poker.licensing();//发牌,并显示
}
}
/**
* 自定义比较器类
*/
class PokerCardComparator implements Comparator<PokerCard> {
@Override
public int compare(PokerCard o1, PokerCard o2) {
int n = o1.getRank()-o2.getRank();
return n;
}
}
运行结果
-->开始洗牌--
-->洗牌中--
-->洗牌结束...
[♥10[8], ♠K[5], ♣Q[6], ♦4[14], ♠J[7], ♠Q[6], ♦2[3], ♦J[7], ♥Q[6], ♠6[12], ♠4[14], ♥4[14], ♦7[11], ♥A[4], 小王[2], ♥2[3], ♦Q[6], ♦8[10], ♥3[15], ♣7[11], ♠10[8], ♣4[14], ♣A[4], ♣9[9], ♥J[7], ♥K[5], ♦6[12], ♥8[10], ♦10[8], ♣10[8], ♠2[3], ♥5[13], ♣K[5], ♦K[5], ♣3[15], ♣J[7], ♣8[10], ♦9[9], ♦5[13], ♣5[13], ♠8[10], 大王[1], ♥6[12], ♠A[4], ♥7[11], ♦3[15], ♠7[11], ♠9[9], ♣2[3], ♠5[13], ♥9[9], ♦A[4], ♣6[12], ♠3[15]]
[大王[1], 小王[2], ♦2[3], ♥2[3], ♠2[3], ♣2[3], ♥A[4], ♣A[4], ♠A[4], ♦A[4], ♠K[5], ♥K[5], ♣K[5], ♦K[5], ♣Q[6], ♠Q[6], ♥Q[6], ♦Q[6], ♠J[7], ♦J[7], ♥J[7], ♣J[7], ♥10[8], ♠10[8], ♦10[8], ♣10[8], ♣9[9], ♦9[9], ♠9[9], ♥9[9], ♦8[10], ♥8[10], ♣8[10], ♠8[10], ♦7[11], ♣7[11], ♥7[11], ♠7[11], ♠6[12], ♦6[12], ♥6[12], ♣6[12], ♥5[13], ♦5[13], ♣5[13], ♠5[13], ♦4[14], ♠4[14], ♥4[14], ♣4[14], ♥3[15], ♣3[15], ♦3[15], ♠3[15]]
玩家1手牌[17张]:大王[1] ♥2[3] ♥A[4] ♦A[4] ♣K[5] ♠Q[6] ♠J[7] ♣J[7] ♦10[8] ♦9[9] ♦8[10] ♠8[10] ♥7[11] ♦6[12] ♥5[13] ♠5[13] ♥4[14]
玩家2手牌[17张]:小王[2] ♠2[3] ♣A[4] ♠K[5] ♦K[5] ♥Q[6] ♦J[7] ♥10[8] ♣10[8] ♠9[9] ♥8[10] ♦7[11] ♠7[11] ♥6[12] ♦5[13] ♦4[14] ♣4[14]
玩家3手牌[17张]:♦2[3] ♣2[3] ♠A[4] ♥K[5] ♣Q[6] ♦Q[6] ♥J[7] ♠10[8] ♣9[9] ♥9[9] ♣8[10] ♣7[11] ♠6[12] ♣6[12] ♣5[13] ♠4[14] ♥3[15]
底牌[3张]:♠3[15] ♦3[15] ♣3[15]
Process finished with exit code 0