一、创建Card类,定义单张扑克的属性(点数,花色),行为(比较大小),以及比较大小的规则
import java.util.Comparator;
public class Card {
public String Suit;// 花色
public String Rank;// 点数
public Card(String Suit,String Rank){
super();
this.Suit = Suit;
this.Rank = Rank;
}
@Override
public String toString() {
return Suit+Rank;
}
public static Comparator<Card> comparator = new Comparator<Card>() {
@Override
public int compare(Card o1, Card o2) {
Poker comparePokerTemp = new Poker();
if(o1==null&&o2==null)
return 0;
int bigger = comparePokerTemp.Rank.indexOf(o1.Rank) - comparePokerTemp.Suit.indexOf(o2.Suit);
if(bigger==0){
bigger = comparePokerTemp.Rank.indexOf(o1.Rank) - comparePokerTemp.Suit.indexOf(o2.Suit);
}
return bigger;
}
};
}
二、创建Poker类,定义一副扑克牌,采用List集合框架
import java.util.ArrayList;
import java.util.List;
public class Poker {
public List<String> Suit = new ArrayList<>(); //花色共4种
public List<String> Rank = new ArrayList<>(); //点数3.4.5····2共13种
public List<Card> pokerList = new ArrayList<>(); //扑克中的扑克牌共52张,没有王牌
public Poker() {
Suit.add("HEART");
Suit.add("SPADE");
Suit.add("DIAMOND");
Suit.add("CLUB");
Rank .add("3");
Rank .add("4");
Rank .add("5");
Rank .add("6");
Rank .add("7");
Rank .add("8");
Rank .add("9");
Rank .add("10");
Rank .add("J");
Rank .add("Q");
Rank .add("K");
Rank .add("A");
Rank .add("2");
for (int Suit = 0; Suit < 4; Suit++) {
for (int Rank = 0; Rank < 13; Rank++) {
Card mCard = new Card(this.Suit.get(Suit),this.Rank.get(Rank));
pokerList.add(mCard);
}
}
}
//打印扑克牌
public void printPokerCard(){
for (int i = 0; i < this.pokerList.size(); i++) {
System.out.print(this.pokerList.get(i).toString()+" ");
}
System.out.println("");
}
}
三、创建Player类,定义玩家属性(id,名字,手牌)
import java.util.ArrayList;
import java.util.List;
public class Player {
public int id;
public String name;
public List<Card> playerCard; //玩家手牌
public Player(int id,String name) {
this.id = id;
this.name = name;
this.playerCard = new ArrayList<>();
}
@Override
public String toString() {
return this.name;
}
}
四、创建Game类,对玩家抽取扑克牌并比较大小
import java.util.*;
public class Game {
Poker mPoker = new Poker();
Poker dealedPoker = new Poker();
Scanner scanner = new Scanner(System.in);
int surplusCards = 51; //剩余牌数
int dealCardCount; //将要抽取的手牌数量
Player player1, player2;
// 创建玩家
public void creatPlayer() {
System.out.print("请输入第一名玩家ID: ");
int inputId = scanner.nextInt();
System.out.print("请输入第一名玩家昵称: ");
String inputName = scanner.next();
player1 = new Player(inputId, inputName);
System.out.print("请输入第二名玩家ID: ");
inputId = scanner.nextInt();
System.out.print("请输入第二名玩家昵称: ");
inputName = scanner.next();
player2 = new Player(inputId, inputName);
}
// 抽取手牌和洗牌,采用comparator规则排序
public void pullAndShuffleCard() {
player1.playerCard.addAll(dealCard(dealCardCount));
System.out.println("玩家一抽取手牌是:");
for (Card c : player1.playerCard) {
System.out.print(c.toString() + " ");
}
player2.playerCard.addAll(dealCard(dealCardCount));
System.out.println("\n玩家二抽取的手牌是:");
for (Card c : player2.playerCard) {
System.out.print(c.toString() + " ");
}
}
// 玩家连续抽取dealCoun张牌,返回多张卡牌(用List盛装)
//@param dealCount
//@return
public List<Card> dealCard(int dealCount) {
Random random = new Random();
List<Card> playCard = new ArrayList<>();
do {
Card card = dealedPoker.pokerList.get(random.nextInt(surplusCards--));
playCard.add(card);
dealCount--;
dealedPoker.pokerList.remove(card);
} while (dealCount > 0);
return playCard;
}
//两玩家的最大牌做比较,决出胜负,采用comparator规则排序
public void compareMaxCard(){
List<Card> biggerPlayerCard = new ArrayList<>(2);
biggerPlayerCard.add(player1.playerCard.get(player1.playerCard.size()-1));
biggerPlayerCard.add(player2.playerCard.get(player2.playerCard.size()-1));
Collections.sort(biggerPlayerCard,Card.comparator);
if(player1.playerCard.contains(biggerPlayerCard.get(1))){
System.out.println("\n 所以"+player1.toString()+" 获胜。");
}else{
System.out.println("\n 所以"+player2.toString()+" 获胜。");
}
}
}
运行结果: