在这里值模拟得到斗地主的洗牌,发牌,看牌的功能
先来个Card里来定义一张牌
public class Card {
// 每一张牌都是由点数和花色组成的(除大小王外)
private String color;
private String point;
public Card(String color, String point) {
super();
this.color = color;
this.point = point;
}
@Override
public String toString() {
return color + point;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public String getPoint() {
return point;
}
public void setPoint(String point) {
this.point = point;
}
}
然后在来一个比较器,便于每个人在看牌的时候牌都是排好序的
import java.util.Comparator;
public class ListCompare implements Comparator<Card> {
@Override
public int compare(Card o1, Card o2) {
// TODO Auto-generated method stub
//先比较点数,点数如果比不出来,则比较花色
if(o1.getPoint().equals(o2.getPoint())) {
return getColors(o1)-getColors(o2);
}else {
return getPoint(o1)-getPoint(o2);
}
}
//穿进去一张牌,取他点数对应的一个数字,方便排序
public static int getPoint(Card o1) {
int count=0;
switch (o1.getPoint()) {
case "J":
count =11;
break;
case "Q":
count =12;
break;
case "K":
count =13;
break;
case "A":
count =14;
break;
case "2":
count =15;
break;
case "S":
count =30;
break;
case "M":
count =40;
break;
default:
count=Integer.parseInt(o1.getPoint());
}
return count;
}
public int getColors(Card o1) {
int count=0;
switch (o1.getColor()) {
case "♣":
count=4;
break;
case "♥":
count=3;
break;
case "♠":
count=2;
break;
default:
count=1;
break;
}
return count;
}
}
主函数和操作类
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 模拟斗地主 洗牌 发牌 看牌
*
* @author lenovo
*
*/
public class Test {
String[] player = new String[3];// 存放玩家,一共三个人
String[] color = { "♣", "♠", "♥", "♦" };// 定义花色
// 定义一个数组用于存放底牌
Card[] bottomCard = new Card[3];
// 定义点数
String[] point = { "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A" };
// 定义一个牌盒集合,存放所有的牌
List<Card> cards = new ArrayList<Card>();
// 定义一个map集合,用于存放每个玩家的牌
Map<String, List<Card>> maps = new HashMap<String, List<Card>>();
// 定义3个list集合存放每个玩家手中的牌
List<Card> playerCard1 = new ArrayList<Card>();
List<Card> playerCard2 = new ArrayList<Card>();
List<Card> playerCard3 = new ArrayList<Card>();
ListCompare l = new ListCompare();
// 1.添加玩家
public void addPlayer(String... names) {
/**
* 本次只需要三个玩家,加入的玩家大于3则只取前三个,小于3则给添加一个电脑玩家
*/
// 给定的人数大于3个
if (names.length >= player.length) {
// 将names的前三个值赋给player数组
for (int i = 0; i < player.length; i++) {
player[i] = names[i];
}
} else {
// 如果names里的内容少于3个,则给其添加电脑,达到3人
for (int i = 0; i < names.length; i++) {
player[i] = names[i];
}
// 此时play集合里的元素还没有满
for (int i = names.length; i < player.length; i++) {
player[i] = "电脑" + (int) (Math.random() * 10000);
}
}
}
// 2.洗牌
public void mixCard() {
// A:先将牌全部放到牌盒中,然后打乱顺序
for (int i = 0; i < color.length; i++) {
for (int j = 0; j < point.length; j++) {
cards.add(new Card(color[i], point[j]));
}
}
// 最后将大小王放进牌盒中
cards.add(new Card("大王", "S"));
cards.add(new Card("小王", "M"));
// 利用collections里的方法,将集合里的顺序进行打乱
Collections.shuffle(cards);
}
// 3.发牌
public void sendCard() {
// A:先发底牌
bottomCard[0] = cards.get(cards.size() - 1);
bottomCard[1] = cards.get(cards.size() - 2);
bottomCard[2] = cards.get(cards.size() - 3);
for (int i = 0; i < cards.size() - 3; i += 3) {
playerCard1.add(cards.get(i));
playerCard2.add(cards.get(i + 1));
playerCard3.add(cards.get(i + 2));
}
Collections.sort(playerCard1, l);
Collections.sort(playerCard2, l);
Collections.sort(playerCard3, l);
maps.put(player[0], playerCard1);
maps.put(player[1], playerCard2);
maps.put(player[2], playerCard3);
}
// 4.看牌
public void showCard() {
Set<String> ks = maps.keySet();
for (String m : ks) {
System.out.println(m + "---" + maps.get(m));
}
System.out.println("---------");
System.out.println(
"底牌\t" + bottomCard[0].toString() + "\t" + bottomCard[1].toString() + "\t" + bottomCard[2].toString());
}
public static void main(String[] args) {
Test t = new Test();
t.addPlayer("张三");
t.mixCard();
t.sendCard();
t.showCard();
}
}