基于JAVA集合写的一个梭哈游戏

来源:互联网 发布:便宜好用的香水知乎 编辑:程序博客网 时间:2024/05/16 02:36

基于JAVA集合写的一个梭哈游戏。

游戏思路:
1,首先使用一个List数组保存一副无序的扑克牌(使用集合工具类)
2,使用一个Map集合和TreeSet集合保存玩家手上的手牌
3,使用一个Map集合保存玩家手牌所对应的分数
4,从写Comparator接口里面的compare函数,并且是TreeSet使用这种排序,
对玩家手上的牌进行大小排序
5,利用梭哈的游戏规则,进行玩家手牌分数自定义。

package com.langxikeji.Set;import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Scanner;import java.util.TreeSet;public class ShowHand {    //储存一幅扑克牌    public static List<String>puke =new ArrayList<>();    //保存玩家的对应的扑克牌    public static Map<String,TreeSet<String>>map=new HashMap<>();    //储存玩家的总分    public static Map<String,Double>sumScore=new HashMap<>();    //添加一幅扑克牌,并且随机打乱    public static boolean flag=true;    public static void countPuke(){        String []num={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};        String []color={"红桃","梅花","方块","黑桃"};        for(int i=0;i<num.length;i++){            for(int j=0;j<color.length;j++){                puke.add(color[j]+num[i]);            }        }        Collections.shuffle(puke);        System.out.println("一副随机的扑克牌:");        System.out.println(puke);        System.out.println("---------------------");    }    //给每位玩家发牌    public static void fapai(){        for(int i=0;i<5;i++){            for(String key:map.keySet()){                String puke1 = puke.remove(0);                map.get(key).add(puke1);            }        }        for(String key:map.keySet()){            System.out.println("玩家名称"+key+":"+map.get(key));        }    }    //控制台输入参与游戏的玩家        public static void joinplayer(){            System.out.println("请输入玩家的姓名,相邻名字请用空格( )隔开!");            Scanner sc = new Scanner(System.in);            String str=sc.nextLine();            String [] name=str.split(" ");            if(!(name.length>=2&&name.length<=5)){                 System.out.println("参加游戏的人数不符合规则,程序退出");                flag=false;                return;            }            //对玩家手牌进行排序            Comparator<String>comp=new Comparator<String>(){                public int compare(String str1,String str2){                    int num1=getNum(str1.substring(2));                    int num2=getNum(str2.substring(2));                    if(num1>num2){                        return 1;                    }else if(num1<num2){                        return -1;                    }else{                        int type1=getType(str1.substring(0,2));                        int type2=getType(str2.substring(0,2));                        if(type1>type2){                            return 1;                        }else{                            return -1;                        }                    }                }            };            for(int i=0;i<name.length;i++){                map.put(name[i],new TreeSet<String>(comp));            }        }    //把扑克牌的点数全部换成数字,便于比较大小    public static int getNum(String num){        if("A".equals(num)){            return 1;        }else if("J".equals(num)){            return 11;        }else if("Q".equals(num)){            return 12;        }else if("K".equals(num)){            return 13;        }else{            return Integer.parseInt(num);        }    }    //把扑克牌的花色全部换成数字,便于比较    public static int getType(String Type){        if("黑桃".equals(Type)){            return 4;        }else if("红桃".equals(Type)){            return 3;        }else if("梅花".equals(Type)){            return 2;        }else{            return 1;        }     }    public static void getScore(){     double winnerScore=0;     String winner=null;     for(String key:map.keySet()){         TreeSet<String>set=map.get(key);         double score=score(set);         sumScore.put(key, score);         for(String key1:sumScore.keySet()){             if(sumScore.get(key1)>winnerScore){                 winnerScore=sumScore.get(key1);                 winner=key1;             }         }     }      System.out.println("-------------------------------");     for(String key:sumScore.keySet()){     System.out.println("玩家名称"+key+":"+map.get(key)+"分数是:"+sumScore.get(key));     }     System.out.println("获胜者是:"+winner+","+"分数是:"+winnerScore);    }     public static double score(TreeSet<String>set){         double score=0;         String [] pukepai=set.toArray(new String[set.size()]);         //同花大顺>同花顺         for(int i=0;i<pukepai.length;i++){             int num1=getNum(pukepai[i].substring(2));             int num2=getNum(pukepai[i+1].substring(2));             int type1=getType(pukepai[i].substring(0, 2));             int type2=getType(pukepai[i+1].substring(0, 2));              if(num1-num2!=1&&type1!=type2){                 flag=false;                 break;             }         }         if(flag){             score=6.0+getNum(pukepai[4].substring(2))*0.01;             return score;         }        //顺子(花色不想同但连续的牌)12345         for(int i=0;i<pukepai.length;i++){             int num1=getNum(pukepai[i].substring(2));             int num2=getNum(pukepai[i+1].substring(2));             if(num1-num2!=1){                 flag=false;                 break;             }         }         if(flag){             score=3.5+getNum(pukepai[4].substring(2))*0.01;             return score;         }         //取出扑克牌的数字         int point1=getNum(pukepai[0].substring(2));         int point2=getNum(pukepai[1].substring(2));         int point3=getNum(pukepai[2].substring(2));         int point4=getNum(pukepai[3].substring(2));         int point5=getNum(pukepai[4].substring(2));         //取出扑克牌的花色         int type1=getType(pukepai[0].substring(0,2));          int type2=getType(pukepai[1].substring(0,2));         int type3=getType(pukepai[2].substring(0,2));         int type4=getType(pukepai[3].substring(0,2));         int type5=getType(pukepai[4].substring(0,2));         //(炸弹)11112 12222 (四条)         if(point1==point2&&point2==point3&&point3==point4||point2==point3&&point3==point4&&point4==point5){             score=5.0+getNum(pukepai[2].substring(2))*0.01;             return score;         }         //满堂红11122  11222(三条+一对)         else if(point1==point2&&point2==point3&&point4==point5||point1==point2&&point3==point4&&point4==point5){             score=4.5+getNum(pukepai[2].substring(2))*0.01;                     return score;         }         //同花(花色相同)         else if(type1==type2&&type2==type3&&type3==type4&&type4==type5){             score=4.0+getNum(pukepai[4].substring(2))*0.01;             return score;         }         //三条 111xy xyKKK xKKKy         else if(point1==point2&&point2==point3||point2==point3&&point3==point4||point3==point4||point4==point5){             score=3.0+getNum(pukepai[2].substring(2))*0.01;             return score;         }         //两对 1122x 11x22 x1122         else if(point1==point2&&point3==point4||point1==point2&&point4==point5||point2==point3&&point3==point4){             score=2.5+getNum(pukepai[3].substring(2))*0.01;             return score;         }         //一对 11xyz x11yz xy11z xyz11(未判断如果两人的扑克牌对子相同的牌面最大值)         else if(point1==point2){             score=2+getNum(pukepai[0].substring(2))*0.01;             return score;         }         else if(point2==point3){             score=2+getNum(pukepai[1].substring(2))*0.01;             return score;         }         else if(point3==point4){             score=2+getNum(pukepai[2].substring(2))*0.01;             return score;         }         else if(point4==point5){             score=2+getNum(pukepai[3].substring(2))*0.01;             return score;         }else{             score=1+getNum(pukepai[4].substring(2))*0.01;             return score;         }     }   public static void main(String []args){       countPuke();       joinplayer();       if(flag){           fapai();           getScore();       }       }       }
原创粉丝点击