import java.util.*;
/**
* 模拟斗地主洗牌和发牌,同时对牌进行排序的代码实现
*
* @author Administrator
*
*/
public class Figure {
private static String pokerShape[] = { "方块", "梅花", "红心", "黑桃" };
private static String pokercoder[] = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
public static void main(String[] args) {
ArrayList<Poker> al = new ArrayList<>();
al.add(new Poker(160, "大王" ));
al.add(new Poker(150, "小王" ));
for (int i = 0; i < pokerShape.length; i++) {
int count = 2; // 指针
for (int j = 0; j < pokercoder.length; j++) {
al.add(new Poker(count++, pokerShape[i] + pokercoder[j] ));
}
}
Collections.shuffle(al);//洗牌
ArrayList< Poker>cards = new ArrayList<>();
ArrayList< Poker>playerOne = new ArrayList<>();
ArrayList< Poker>playerTwo = new ArrayList<>();
ArrayList< Poker>playerThree = new ArrayList<>();
//判断谁当地主 用随机数
for (int j = 0; j<54; j++) {
if (j<3) {
cards.add(al.get(j));
}else if (j%3==0) {
playerOne.add(al.get(j));
}else if (j%3==1) {
playerTwo.add(al.get(j));
}else {
playerThree.add(al.get(j));
}
}
//给地主牌
ArrayList<Poker> player;
if (randomNumber()==0) {
player=playerOne;
}else if (randomNumber()==1) {
player=playerTwo;
}else {
player=playerThree;
}
landlordPoker(player,cards);
getPoker(cards);
getPoker(playerOne);
getPoker(playerTwo);
getPoker(playerThree);
TreeSet<Poker> cardsTS = new TreeSet<Poker>(new MyCompare());// cards 底牌
TreeSet<Poker> playerOneTS = new TreeSet<>(new MyCompare());// playerOne 玩家1
TreeSet<Poker> playerTwoTS = new TreeSet<>(new MyCompare());// playerTwo 玩家2
TreeSet<Poker> playerThreeTS = new TreeSet<>(new MyCompare());// playerThree 玩家3
cardsTS.addAll(cards);
playerOneTS.addAll(playerOne);
playerTwoTS.addAll(playerTwo);
playerThreeTS.addAll(playerThree);
System.out.println("-------------------------------------------------------");
getPoker(cardsTS);
getPoker(playerOneTS);
getPoker(playerTwoTS);
getPoker(playerThreeTS);
System.out.println();
}
/**
* 把底牌给地主
* @param landlord 地主
* @param cards 底牌牌
*/
private static void landlordPoker(ArrayList<Poker> landlord , ArrayList<Poker> cards) {
for (Iterator<Poker> iterator = cards.iterator(); iterator.hasNext();) {
Poker poker = (Poker) iterator.next();
landlord.add(poker);
}
}
/**
* 看牌
* @param pokers 要看的牌
*/
private static void getPoker(ArrayList<Poker> pokers){
for (Iterator<Poker> iterator = pokers.iterator();iterator.hasNext();) {
Poker poker = iterator.next();
System.out.print(poker.getName() + " ");
}
System.out.print(" " );
System.out.println("共有"+pokers.size()+"张牌");
}
private static void getPoker(TreeSet<Poker> pokes) {
for (Iterator<Poker> iterator = pokes.iterator(); iterator.hasNext();) {
Poker poke = iterator.next();
System.out.print(poke.getName() + " ");
}
System.out.print(" " );
System.out.println("共有"+pokes.size()+"张牌");
}
/**
* 随机数用来产出地主的
*
* @return 0——one 1——two ?——Three
*/
private static int randomNumber() {
return (int) (Math.random() * 2);
}
}
import java.util.Comparator;
/**
* 自定义的排序方法
* @author Administrator
*
*/
public class MyCompare implements Comparator<Poker>{
@Override
public int compare(Poker o1, Poker o2) {
// TODO Auto-generated method stub
if (o1.getCode()-o2.getCode()==0)
return o1.getName().compareTo(o2.getName());
return o1.getCode()-o2.getCode();
}
}
/**
*
* @author Administrator
*
*/
public class Poker {
private String name;// 扑克牌名字,用来对牌排序
private int code;// 扑克牌序号,用来对牌排序
public Poker(int code, String name) {
this.name = name;
this.code = code;
}
// 下方get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public boolean equals(Object p) {
boolean isEquals = false;
if (this.name==p) {
isEquals=true;
}
return isEquals;
}
public int hashCode(){
return this.name.hashCode();
}
}