相信大数人都玩过斗牛,今天我们来用java实现简单的斗牛
牌类:
public Card(Integer type, Integer num) {
super();
this.type = type;
this.num = num;
if(num>10) {
this.point=10;
}else {
this.point = num;
}
}
public Integer getType() {
return type;
}
public void setType(Integer type) {
this.type = type;
}
public Integer getNum() {
return num;
}
public void setNum(Integer num) {
this.num = num;
}
public Integer getPoint() {
return point;
}
public void setPoint(Integer point) {
this.point = point;
}
@Override
public String toString() {
StringBuffer buffer=new StringBuffer();
switch (type) {
case 1:
buffer.append("♦");
break;
case 2:
buffer.append("♣");
break;
case 3:
buffer.append("♥");
break;
case 4:
buffer.append("♠");
break;
}
switch (num) {
case 1:
buffer.append("A");
break;
case 11:
buffer.append("J");
break;
case 12:
buffer.append("Q");
break;
case 13:
buffer.append("K");
break;
default:
buffer.append(num);
break;
}
return buffer.toString();
}
玩家类:
public class Player {
private String playerName;// 玩家姓名
private List<Card> cards;// 玩家牌手牌
private String niuType;// 牛几
private Integer niuTtpeN;
private List<Card> douCards;// 在有牛的情况下的比牌
private Card maxCard;// 最大的牌
public Player(String playerName) {
super();
this.playerName = playerName;
this.cards = new ArrayList<>();
this.douCards = new ArrayList<>();
}
public String getPlayerName() {
return playerName;
}
public void setPlayerName(String playerName) {
this.playerName = playerName;
}
public List<Card> getCards() {
return cards;
}
public void setCards(List<Card> cards) {
this.cards = cards;
}
public void addCard(Card card) {
this.cards.add(card);
}
public String getNiuType() {
return niuType;
}
public void setNiuType(String niuType) {
this.niuType = niuType;
}
public List<Card> getDouCards() {
return douCards;
}
public void setDouCards(List<Card> douCards) {
this.douCards = douCards;
}
public Card getMaxCard() {
return maxCard;
}
public void setMaxCard(Card maxCard) {
this.maxCard = maxCard;
}
public void addDouCard(Card card) {
this.douCards.add(card);
}
@Override
public String toString() {
return playerName + ":" + cards + ",牛型:" + niuType + ",最大牌:" + maxCard + ",牛牌:" + douCards;
}
游戏类:
public class NiuTypeJudgeLogic {
public static void judgeNiuType(Player player) {
//先将牌进行排序(从小到大)
Collections.sort(player.getCards(), new Comparator<Card>() {
@Override
public int compare(Card card1, Card card2) {
int diff = card1.getNum() - card2.getNum();
if (diff > 0) {
return 1;
}else if (diff < 0) {
return -1;
}else {
//牌大小相同时判断花色
return card1.getType()-card2.getType();
}
}
});
//是否是牛
getNiuniuCount(player);
}
private static void getNiuniuCount(Player player){
List<Card> cards = player.getCards();//得到玩家手上的牌
//总点数
Integer cardsTotalPoint = 0;
//计算总点数
for(Card card:cards){
cardsTotalPoint += card.getPoint();
}
//计算余数
Integer lave = cardsTotalPoint % 10;
for(int i = 0; i < cards.size()-1; i++){
for(int j = i + 1; j < cards.size(); j++){
//取出二张牌看是否与余数相等
if((cards.get(i).getPoint() + cards.get(j).getPoint()) % 10 == lave){
//此处是有牛,找出另外三张牌
if(i!=0&&j!=0){
player.addDouCard(cards.get(0));
}
if(i!=1&&j!=1){
player.addDouCard(cards.get(1));
}
if(i!=2&&j!=2){
player.addDouCard(cards.get(2));
}
if(i!=3&&j!=3){
player.addDouCard(cards.get(3));
}
if(i!=4&&j!=4){
player.addDouCard(cards.get(4));
}
//设置牛几
player.setNiuType(getCount(lave));
//最大的牌
player.setMaxCard(cards.get(4));
return;
}
}
}
//其他情况为无牛
player.setNiuType("无牛");
//无牛取最大的牌
player.setMaxCard(cards.get(4));
}
private static String getCount(Integer lave){
//lang 为几,则牛几,为0时为牛牛
switch (lave) {
case 0:
return "牛牛";
case 1:
return "牛一";
case 2:
return "牛二";
case 3:
return "牛三";
case 4:
return "牛四";
case 5:
return "牛五";
case 6:
return "牛六";
case 7:
return "牛七";
case 8:
return "牛八";
case 9:
return "牛九";
default:
return "无牛";
}
}
实现类:
public class Test {
private static final Integer number=(int)(Math.random()*7)+4;//定义玩游戏的人数(最多10人,最少4人)
private static List<Player> playerList=new ArrayList<>();//玩家列表
private static int index;
//初始化玩家
static {
index = 0;
for(int i=1;i<=number;i++) {
playerList.add(new Player("玩家"+i));
}
}
public static void main(String[] args) {
List<Card> cardList=new ArrayList<>();
//1.创建一副52张的牌
for(int i=1;i<=4;i++) {
for(int j=1;j<=13;j++) {
cardList.add(new Card(i, j));
}
}
//2.洗牌
shuffle(cardList);
//定义一个队列进行管理牌
List<Card> cards=new ArrayList<Card>();
for (Card c : cardList) {
cards.add(c);
}
//3.发牌,根据人数
for(int i=1;i<=5;i++) {
for(int j=0;j<playerList.size();j++) {
playerList.get(j).addCard(cardList.get(index++));
}
}
//4.判断牛型
for(Player player:playerList) {
NiuTypeJudgeLogic.judgeNiuType(player);
}
for (Player player : playerList) {
System.err.println(player);
}
}
public static void shuffle(List<Card> cardList) {
Random r = new Random();
int n=0;
Card card =null;
for (int i = 0; i < 200; i++) {
n = r.nextInt(cardList.size());
card = cardList.remove(n);
n =r.nextInt(cardList.size());
cardList.add(n, card);
}
}
在实现类中没有比玩家的大小。
测试结果: