基于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;}//顺子(花色不想同但连续的牌)12345for(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 xKKKyelse 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 x1122else 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();}}}

基于JAVA集合写的一个梭哈游戏相关推荐

  1. 打怪游戏Java课程设计_java 课程设计大作业 写的一个RPG游戏(代码+文档)

    [实例简介] java 课程设计大作业 写的一个RPG游戏(代码+文档) java 课程设计大作业 写的一个RPG游戏(代码+文档) [实例截图] [核心代码] Rebellion-master ├─ ...

  2. 【java毕业设计】基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码)——推箱子游戏

    基于java+swing+Eclipse的推箱子游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+swing+Eclipse的推箱子游戏设计与实现,文章末尾附有本毕业设计的论文 ...

  3. java毕业设计——基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码)——打飞机游戏

    基于java+J2ME+sqlserver的打飞机游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+J2ME+sqlserver的打飞机游戏设计与实现,文章末尾附有本毕业设计的 ...

  4. 基于Java毕业设计写手管理平台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计写手管理平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计写手管理平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  5. 【java毕业设计】基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码)——坦克大战游戏

    基于java+Socket+Eclipse的坦克大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Eclipse的坦克大战游戏设计与实现,文章末尾附有本毕业设 ...

  6. 基于Java+Swing实现《扫雷》游戏

    基于Java+Swing实现<扫雷>游戏 一.系统介绍 二.功能展示 三.其他系统 四.获取源码 一.系统介绍 windows自带的游戏<扫雷>是陪伴了无数人的经典游戏,本程序 ...

  7. 基于Java+Swing+Socket实现泡泡堂游戏

    基于Java+Swing+Socket实现泡泡堂游戏 一.功能展示 1.游戏登陆 2.房间 3.对战 二.代码展示 三.其他系统 前言 <泡泡堂>是由韩国游戏公司Nexon开发的一款休闲游 ...

  8. 祖玛java代码_androidzuma 基于java开发的安卓祖玛龙珠游戏代码,可帮助 的 学习。 Develop 238万源代码下载- www.pudn.com...

    文件名称: androidzuma下载 收藏√  [ 5  4  3  2  1 ] 开发工具: Java 文件大小: 1174 KB 上传时间: 2013-11-27 下载次数: 1 提 供 者: ...

  9. 基于Java多线程的打怪升级类游戏设计与开发

    摘要:本文论述了通过JAVA多线程.基于JAVA Swing的GUI图形用户界面设计.IO输入输出流.JDBC技术,实现了游戏系统的UI设计.游戏数据的存储.关卡的设置.用户头像的上传与更改.游戏数据 ...

最新文章

  1. 在windows上的git bash中安装tree 和 linux tree命令使用
  2. Java基础05 实施接口
  3. js DOM Element属性和方法整理
  4. CTFshow php特性 web115
  5. ASP.NET Core Identity 迁移数据 - ASP.NET Core 基础教程 - 简单教程,简单编程
  6. 院士学术不端,怎么处理?文件来了:中国工程院院士失范行为处理办法
  7. linux系统子接口配置文件,Linux网卡绑定、子接口-IP别名
  8. html图片下方会有一像素,div里嵌套了img底部会有白块问题和图片一像素问题解决 - Macchiato...
  9. LMC555定时器延时测试
  10. 文字编辑软件的颠峰作品——Word发展历史全析
  11. 使用Nginx中遇到的一个小问题思考
  12. python如何下载安装spacy_Python spaCy
  13. Unity3D消耗CPU过高解决办法
  14. <华为VRP系统>ENSP模拟器安装:
  15. 首都师范 博弈论 2 4 2双寡头市场结构的古诺模型
  16. 2014年蓝桥杯c/c++B组省赛真题解析
  17. Pandas操作dataframe对所有列/行求和 ,对指定列/行求和,对某一列/行求和,并添加新的列/行
  18. WINCE 系统中的同步机制
  19. 基于Centos7.X的CS:GO社区服搭建
  20. LED流水灯切换中断的替代法

热门文章

  1. bzoj 4695 最假女选手
  2. 苹果手机可以分屏吗_苹果手机可以边打电话边录音吗
  3. JAVA四种内部类(详解)
  4. IAR for ARM 8.30安装
  5. css3动画(animation)效果1-漂浮的白云
  6. php 获取去年今日,【文字】去年今日(随笔)
  7. Windows IIS服务器建站/网站配置全图文流程(新手必备!) 一条龙
  8. 怎么去除目录前面的小黑点
  9. android.policy.jar t8830pro,华为t8830pro刷机教程
  10. 译文 | 创造性思维的脑暴如何激发?