美文网首页
java实现斗地主

java实现斗地主

作者: 北欧大灰狼 | 来源:发表于2018-11-13 21:27 被阅读0次

package org.ddz.demo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Set;

public class CardsDemo {

//定义基本属性

List<String> cardList=new ArrayList<String>();  //随机牌的存储

private List<String> bottomCards=new ArrayList<>(); //底牌

private String dCard=null; //地主牌

private Random rm=new Random();  //随机数的实例

//玩家

private List<String> playA=new ArrayList<>();

private List<String> playB=new ArrayList<>();

private List<String> playC=new ArrayList<>();


//随机牌的组成
public Set<String> getCardSet(){
    
    
    Set<String> cardSet=new HashSet<>(); //随机的set牌组
    
    //牌面出现的次数
    Map<String, Integer> timesCounts=new HashMap<String, Integer>(); 
    
    List<String> cardColors=getCardColor(); //牌面颜色
    
    List<String> cardValues=getCardValue(); //牌面的值
    
    //如果牌面的值还存在,说明没有初始化好
    while(!cardValues.isEmpty()) {
        
        //获取牌面的颜色
        String cardColor=cardColors.get(rm.nextInt(cardColors.size()));
        
        //获取牌面的值
        String cardValue=cardValues.get(rm.nextInt(cardValues.size()));
        
        String card=cardColor+" "+cardValue; //随机获取一张牌
        
        if(cardSet.add(card)) {// 向牌组插入该牌 如果插入成功说明第一此插入 有效
            
            if(timesCounts.containsKey(cardValue)) {//如果不是第一此插入将该数的值计数+1
                
                timesCounts.put(cardValue, timesCounts.get(cardValue)+1);
                
                if(4==timesCounts.get(cardValue)) { //如果牌面值出现4次 用完了
                    
                    cardValues.remove(cardValue);  //删除掉 不在出现
                }
            }else {
                
                timesCounts.put(cardValue, 1); //否则第一次插入 置为1
            }
        }
    }
    
    cardSet.add("大王"); //大王
    
    cardSet.add("小王"); //小王
    
    return cardSet;
    
}

//获取牌面的值 没有大小王
public List<String> getCardValue(){
    
    List<String> cardValue=new ArrayList<>();
    
    cardValue.add("A");
    cardValue.add("2");
    cardValue.add("3");
    cardValue.add("4");
    cardValue.add("5");
    cardValue.add("6");
    cardValue.add("7");
    cardValue.add("8");
    cardValue.add("9");
    cardValue.add("10");
    cardValue.add("j");
    cardValue.add("Q");
    cardValue.add("K");
    
    return cardValue;
}

//牌面颜色
public List<String> getCardColor(){
    
    List<String> cardColor=new ArrayList<>();
    cardColor.add("黑桃");
    cardColor.add("红桃");
    cardColor.add("方片");
    cardColor.add("梅花");
    
    return cardColor;
    
}

public void playCard() {
    
    cardList=new ArrayList<>(getCardSet());
    
    //获取三张底牌
    
    while(bottomCards.size()<3) {
        
        bottomCards.add(cardList.remove(rm.nextInt(cardList.size())));
    }
    
    dCard=cardList.get(rm.nextInt(cardList.size())); //随机拿出一张牌作为地主牌
    
    System.out.println("地主牌为: "+dCard);
    
    //循环发牌给玩家 A  B  C
    
    int cardNum=cardList.size();
    
    System.out.println("发牌开始------------");
    
    for(int i=1;i<=cardNum;i++) {
        
        if(i%3==0) {
            
            playC.add(cardList.get(i-1));  //牌是玩家C的
        }else if(i%3==2) {
            
            playB.add(cardList.get(i-1)); //牌是玩家B的
            
        }else {
            
            playA.add(cardList.get(i-1)); 
        }
    }
    
    System.out.println("发牌结束");
    
    System.out.println("底牌为"+bottomCards);
    
    if(playA.contains(dCard)) {
        
        System.out.println("A玩家是地主");
        while(!bottomCards.isEmpty()) {
            
            playA.add(bottomCards.remove(0));
        }
    }else if(playB.contains(dCard)) {
        
        System.out.println("B玩家是地主");
        while(!bottomCards.isEmpty()) {
            
            playB.add(bottomCards.remove(0));
        }
    }else {
        
        System.out.println("C玩家是地主");
        while(!bottomCards.isEmpty()) {
                        
            playC.add(bottomCards.remove(0));
        }
    }
}

public void showCards(List<String> list) {
    
    System.out.print("【");
    
    int count=0;
    
    while(!(list.size()==1)) {
        
        count++;
        
        System.out.println(list.remove(0)+"、");
        
        if(count%6==0) {
            
            System.out.println();
        }
    }
    System.out.print(list.remove(0)+"】");
}

public static void main(String[] args) {
    
    CardsDemo cards=new CardsDemo();
    
    cards.playCard(); //发牌开始
    
    System.out.println("玩家A牌为");
    
    cards.showCards(cards.playA);
    
    System.out.println("玩家B牌为");
    
    cards.showCards(cards.playB);
    
    System.out.println("玩家C牌为");
    
    cards.showCards(cards.playC);
}

}

相关文章

网友评论

      本文标题:java实现斗地主

      本文链接:https://www.haomeiwen.com/subject/udrrfqtx.html