斗牛

相信大数人都玩过斗牛,今天我们来用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);
	}
}

在实现类中没有比玩家的大小。
测试结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值