list下的简易扑克牌游戏

来源:互联网 发布:苏客会孵化器知乎 编辑:程序博客网 时间:2024/05/29 20:05
public class PokerGame {
//定义三个用户
String[] names={"张三","李四","王五"};
//在一局中所有牌的数量
List<String> cards = new ArrayList<String>();
private String[] types = {"♠","♥","♣","♦"};
private String[] values = {"8","9","10","J","Q","K","A"};
//定义所有玩家手上的扑克牌
private Map<String,Set<String>> playerCards = new HashMap<String,Set<String>>();

/*
* 初始化扑克
*/
void poker(){
//首先将牌放到集合中去
for(String type : types){
for(String value : values){
this.cards.add(type+value);
}
}
Collections.shuffle(cards);//shuffle()对collection中的数据进行随机排序
}
/*
* 初始化玩家
*/
void user(){
for(int i=0;i<names.length;i++){
playerCards.put(names[i],sequence() );
}
}



/*
* 建一个自定义的Set集合,用于存放扑克牌,按照指定顺序排放
*/
private Set<String> sequence(){
//自定义排序器,让扑克牌按照我们的方式进行排放
Comparator<String>  comp = new Comparator<String>(){
/**
* 扑克牌的大小及排放规则,
* 花色按照黑桃、红桃、梅花、方片,排序,
* 大小1、2、3、4、5、6、7、8、9、10、J、Q、K  
* */
public int compare(String s1, String s2) {
int num1 =getSize(s1.charAt(1));
int num2 =getSize(s2.charAt(1));
if(num1>num2){
return 1;
}else if(num1<num2){
return -1;
}else{
int type1 = getType(s1.charAt(0)); 
int type2 = getType(s2.charAt(0)); 
if(type1>type2){
return -1;
}else{
return 1;
}
}
}

};
Set<String> set = new TreeSet<String>(comp);
return set;
}
/*
* 初始化牌
*/
public void deliverCard(){
for(int i=0;i<5;i++){
for(int j=0;j<names.length;j++){
playerCards.get(this.names[j]).add(cards.get(0));
cards.remove(0);
}
}
}
/*
* 对每个人的牌进行打印
*/
public void print(){
for(int i=0;i<this.names.length;i++){
System.out.println(names[i]+"\t"+playerCards.get(this.names[i]));
}
}
/*
* 对每个人的牌进行比较
*/

Object[][] st=new Object[3][5];//放player姓名和所属扑克
public void compare(){
for(int i=0;i<this.names.length;i++){
   st[i]=playerCards.get(this.names[i]).toArray();
}
for(int i=1;i<this.names.length;i++){
for(int j=4;j>0;j--){
int num1 = this.getSize(((String) st[0][j]).charAt(1));
int num2 = this.getSize(((String) st[i][j]).charAt(1));
if(num1==num2){
int type1 = this.getType(((String) st[0][j]).charAt(0)); 
int type2 = this.getType(((String) st[i][j]).charAt(0)); 
if(type1<type2){
st[0]=st[i];
names[0]=names[i];
break;
}
}
else if(num1<num2){
st[0]=st[i];
names[0]=names[i];
break;
}
}
}
System.out.println("============恭喜恭喜=============");
System.out.println("扑克牌赢家是:\t"+names[0]);
}

/**
* 判断牌的点数大小
* */
private int getSize(char c){
switch (c) {
case '8':
return 8;
case '9':
return 9;
case '0':
return 10;
case 'J':
return 11;
case 'Q':
return 12;
case 'K':
return 13;
case 'A':
return 14;
default:
return 10;
}
}


/**
 * 判断牌的花色
 * */
private int getType(char c){
switch (c) {
case '♠':
return 1;
case '♥':
return 2;
case '♣':
return 3;
default:
return 4;
}
}




public static void main(String[] args) {
PokerGame pg=new PokerGame();
pg.user();
pg.poker();
pg.sequence();
pg.deliverCard();
pg.print();
pg.compare();
}
}
原创粉丝点击