基于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(); } } }
阅读全文
0 0
- 基于JAVA集合写的一个梭哈游戏
- java--控制台梭哈游戏
- 疯狂Java讲义中的习题,设计一个控制台的梭哈游戏
- 利用java集合框架写的一个简单扑克游戏
- java梭哈的小游戏
- 简单的控制台梭哈游戏
- 操作集合的工具类:Collections (附带梭哈游戏实现)
- 一个小练习: 简易的梭哈游戏! 真的是非常简易~
- 用JAVA写的一个飞机游戏
- wikioi3258 梭哈游戏 模拟
- 梭哈纸牌初级游戏
- java 集合之基于ArrayList的洗牌比大小游戏
- 用JAVA+OPENGL写的一个3D坦克游戏
- 朋友写的一个中国象棋游戏,JAVA代码
- 【恶心容斥】梭哈游戏
- 以前写的一个游戏~
- java 实现一个基于控制台的 扫雷 游戏
- 基于Java语言框架SSM写的一个小博客
- 字符串反转
- 5-15 QQ帐户的申请与登陆
- 搜索 D
- Openstack : 13、openstack中关于路由相关操作命令
- 排序算法(堆排序,直接插入排序,折半插入排序,希尔排序)
- 基于JAVA集合写的一个梭哈游戏
- 登录窗口
- C++作业六
- lTE缩略语
- 计算器
- 最大似然估计
- ajax跨域处理
- Fragment碎片的生命周期
- 0015、node 之multer上传文件处理