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);
}
}
网友评论