实验目的:

  1. Github基本源代码控制方法
  2. 利用Junit4进行程序模块的测试,回归测试
  3. 编码规范的考量
  4. C/Java等基本程序设计语言的运用。

实验过程:

import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.Scanner; import java.util.TreeSet;

public class ShowHand {    private List<String> pukeList = new ArrayList<String>();  private Map<String,TreeSet<String>> map = new HashMap<String,TreeSet<String>>();  private Map<String,Double> sorceMap = new HashMap<String,Double>();  private boolean flag = true;  //1、创建扑克牌  private void createPuke(){   String[] point = {"7","8","9","10","J","Q","K"};   String[] type = {"黑桃","红桃","梅花","方块"};   for(int i=0;i<type.length;i++){    for(int j=0;j<point.length;j++){     this.pukeList.add(type[i]+point[j]);    }   }  }  //2、对扑克牌进行洗牌  private void sortedPuke(){   Random rand = new Random();   for(int i=0;i<100;i++){    int index1 = rand.nextInt(this.pukeList.size());    int index2 = rand.nextInt(this.pukeList.size());    String temp = this.pukeList.get(index1);    this.pukeList.set(index1, this.pukeList.get(index2));    this.pukeList.set(index2, temp);   }   System.out.println(this.pukeList);  }  //3、创建参加游戏的人  private void createPlayer(){   System.out.println("请输入参与游戏的玩家的名称,中间使用空格隔开:");   Scanner scan = new Scanner(System.in);   String players = scan.nextLine();   String[] data = players.split(" ");   if(data.length<2 || data.length>5){    System.out.println("参与游戏的玩家人数不符合要求,程序终止执行!");    flag = false;    return;   }   Comparator<String> comp = new Comparator<String>() {    @Override    public int compare(String str1, String str2) {     int point1 = getPoint(str1.substring(2));     int point2 = getPoint(str2.substring(2));     if(point1>point2){      return 1;     }else if(point1<point2){      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<data.length;i++){    map.put(data[i], new TreeSet<String>(comp));   }  }    private int getPoint(String point){   if("J".equals(point)){    return 11;   }else if("Q".equals(point)){    return 12;   }else if("K".equals(point)){    return 13;   }else{    return Integer.parseInt(point);   }  }    private int getType(String type){   if("黑桃".equals(type)){    return 1;   }else if("红桃".equals(type)){    return 2;   }else if("梅花".equals(type)){    return 3;   }else{    return 4;   }  }  //4、给玩家发牌  private void showPuke(){   for(int i=0;i<5;i++){    for(String key : map.keySet()){     String puke = this.pukeList.remove(0);     map.get(key).add(puke);    }   }     }  //5、计算玩家的分数  private void getSorce(){   String winner = null;   double winnerSorce = 0;   for(String key : map.keySet()){    TreeSet<String> set = map.get(key);    String[] pukes = set.toArray(new String[set.size()]);    double sorce = this.sorce(set);    this.sorceMap.put(key, sorce);    System.out.println("玩家"+key+"的牌为:"+this.map.get(key)+"分值为:"+sorce);    for(String key1:sorceMap.keySet()){     if(sorceMap.get(key1)>winnerSorce){      winnerSorce=sorceMap.get(key1);      winner=key1;     }    }   }   System.out.println("获胜者是: "+winner+"    分数是:"+winnerSorce);  }    private double sorce(TreeSet<String> set){   double sorce = 0;   boolean flag = true;   String[] pukes =  set.toArray(new String[set.size()]);   for(int i=0;i<pukes.length-1;i++){    int point1 = this.getPoint(pukes[i].substring(2));    int point2 = this.getPoint(pukes[i+1].substring(2));    if(point1-point2!=-1){     flag = false;     break;    }   }   if(flag){    sorce = 5.0 + this.getPoint(pukes[4].substring(2)) * 0.01;    return sorce;   }   int point1 = this.getPoint(pukes[0].substring(2));   int point2 = this.getPoint(pukes[1].substring(2));   int point3 = this.getPoint(pukes[2].substring(2));   int point4 = this.getPoint(pukes[3].substring(2));   int point5 = this.getPoint(pukes[4].substring(2));   if (point1==point4||point2==point5) {    sorce=4.0+point4*0.01;    return sorce;   }   if (point1==point3||point2==point4||point3==point5) {    sorce=3.0+point3*0.01;    return sorce;   }   if (point1==point2&&point3==point4) {    sorce=2.0+point3*0.01+point1*0.0001+point5*0.000001;    return sorce;   }   if (point2==point3&&point4==point5) {    sorce=2.0+point5*0.01+point2*0.0001+point1*0.000001;    return sorce;   }   if (point1==point2&&point4==point5) {    sorce=2.0+point5*0.01+point1*0.0001+point3*0.000001;    return sorce;   }   if (point1==point2) {    sorce=1.0+point1*0.01+point5*0.0001+point4*0.000001+point3*0.00000001;    return sorce;   }   if (point2==point3) {    sorce=1.0+point2*0.01+point5*0.0001+point4*0.000001+point1*0.00000001;    return sorce;   }   if (point3==point4) {    sorce=1.0+point3*0.01+point5*0.0001+point2*0.000001+point1*0.00000001;    return sorce;   }   if (point4==point5) {    sorce=1.0+point4*0.01+point3*0.0001+point2*0.000001+point1*0.00000001;    return sorce;   }   return sorce=point5*0.01+point4*0.0001+point3*0.000001+point2*0.000001+point1*0.00000001;  }       public void init(){   this.createPuke();   this.sortedPuke();   this.createPlayer();   if(flag){    this.showPuke();    this.getSorce();   }  }    public static void main(String[] args) {   new ShowHand().init();  } }

GitHub地址:https://github.com/y415562509/Text/blob/master/ShowHand

实验结果:

心得体会:

我感觉我收获颇丰23333333

ShowHand的更多相关文章

  1. Java中List、Collections实现梭哈游戏

    package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ShowHand { / ...

  2. 使用ML.NET实现德州扑克牌型分类器

    导读:ML.NET系列文章 本文将基于ML.NET v0.2预览版,重点介绍提取特征的思路和方法,实现德州扑克牌型分类器. 先介绍一下德州扑克的基本牌型,一手完整的牌共有五张扑克,10种牌型分别是: ...

  3. 软件工程实践作业2 --梭哈游戏(java) 实践报告

    一,题目简介: 1.创建一副扑克牌 7------k 加入到集合对象中2.对扑克牌洗牌3.定义参与游戏的玩家的人,通过键盘输入,限定人数2-54.人数符合要求继续执行,不符合退出5.对玩家发牌,每个人 ...

  4. Java 集合补充

    集合大致可以分List,Set,Queue,Map四种体系. 集合和数组不一样,数组元素可以是基本类型的值,也可以是对象(的引用变量),集合里只能保存对象(的引用变量). 访问:如果访问List集合中 ...

  5. 第八章.Java集合

    Java集合类是一种特别有用的工具类,可用于存储数量不等的对象.Java集合大致可分为Set.List.Queue和Map四种体系 Set代表无序.不可重复的集合 List代表有序.重复的集合 Map ...

  6. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  7. 对博弈活动中蕴含的信息论原理的讨论,以及从熵角度看不同词素抽象方式在WEBSHELL文本检测中的效果区别

    1. 从赛马说起 0x1:赛马问题场景介绍 假设在一场赛马中有m匹马参赛,令第i匹参赛马获胜的概率为pi,如果第i匹马获胜,那么机会收益为oi比1,即在第i匹马上每投资一美元,如果赢了,会得到oi美元 ...

随机推荐

  1. VRS的GPS/BDS双系统网元固定存在的问题

    问题如下:部分网元固定卫星数少于2个. 另外:北方xinkong的网元组网也存在问题

  2. Arcgis10.3在添加XY数据时出现问题

    准备通过excel表格(xls格式)中的经纬度生成点数据,但是选择数据的时候报错:连接到数据库失败,常规功能故障,外部表不是预期的格式.如下图所示: 解决方法: 将xls格式的表格另存为csv格式,重 ...

  3. (9)Python循环结构

  4. Color the ball HDU - 1556 (非线段树做法)

    题意:在1到n的气球中,在不同的区域中涂颜色,问每个气球涂几次. #include<cstdio>int num[100010];int main(){ int n, x, y;; whi ...

  5. Qt+QGis二次开发:创建临时图层并添加要素

    开发环境:Win10 + VS2010 + Qt 4.8.6 + QGis 2.14.4 其实本文实现的功能类似于QGis中“添加文本数据图层”的一个简化版,本文不会涉及到对话框的使用,不通过与用户互 ...

  6. Vue2 第三天学习

    个人小总结:1年多没有写博客,感觉很多知识点生疏了,虽然工作上能解决问题,但是当别人问到某个知识点的时候,还是迷迷糊糊的,所以坚持写博客是硬道理的,因为大脑不可能把所有的知识点记住,有可能某一天忘了, ...

  7. PAT A1149 Dangerous Goods Packaging (25 分)——set查找

    When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...

  8. git速度太慢

    适用各种操作系统,本次测试于ubuntu,下载速度从二十几k提高到二百多k 1.查找域名对应的ip地址,并修改hosts文件 nslookup github.global.ssl.fastly.Net ...

  9. luogu P4403 [BJWC2008]秦腾与教学评估

    题目 一道神奇的题qwq 首先看题很容易想到把所有的点存下来然后暴力枚举...于是RE 20分 所以要找一种不用开那么大的数组的解法(然而我自己是不可能想出来的qwq 注意一个地方,人数为奇数的位置“ ...

  10. java StringBuilder和StringBuffer 用法

    可变的字符串,兄弟关系StringBuilder:效率高,安全性低StringBuffer:效率低,安全性高 StringBuilder 的常用方法的使用,StringBuffer用法一样. publ ...