实验目的:

  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. 【Beta Scrum】冲刺! 2/5

    1. 今日完成情况 人员 学号 分工 是否完成 完成情况 胡武成 031502610 学习java后端登录验证方式,尝试编写登录api N 刚学会springmvc登录token拦截,准备明天登录注册 ...

  2. Beta冲刺! Day1 - 磨刀

    Beta冲刺! Day1 - 磨刀 今日已完成 晨瑶:罗列Beta计划.和新人交接.任务安排 昭锡:无 永盛:服务器出现一些 mysql 的问题,伟鹏的爬取脚本没办法远程链接到服务器,在修 立强:学习 ...

  3. Django 通过 session 保存个人信息

    通过 session 保存 个人 信息 登录的视图函数中: def login(request): ''' 登录 ''' err, user, pwd = '', '', '' if request. ...

  4. C#泛型约束where T : class 解释

    这是参数类型约束,指定T必须是Class类型. .NET支持的类型参数约束有以下五种:where T : struct                               | T必须是一个结构 ...

  5. 踏得网互联网新技术垂直搜索服务和分享 - HTML5动效/特效/动画搜索

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/iefreer/article/details/34917729 当前主流搜索引擎在解决互联网技术创意 ...

  6. python 打印 emoji

    python 打印 emoji 如需转发,请注明出处:小婷儿的python  https://www.cnblogs.com/xxtalhr/p/10486506.html 一.Unicode字符集: ...

  7. 【ZOJ 3463】Piano

    ZOJ 3463 题意:有一个钢琴,一个人把左手放在L位置上,右手放在R位置上,要弹某\(n\)个键,每个手最多能够得着9个位置,并且两只手不能交叉.把手移动的代价是大拇指移动的距离的平方根.问弹完这 ...

  8. storm集成kafka的应用,从kafka读取,写入kafka

    storm集成kafka的应用,从kafka读取,写入kafka by 小闪电 0前言 storm的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流 ...

  9. QT qss 初级介绍

    这篇文章来自于QT的帮助文档,你要是看了最新版的,会发现讲解得更棒.如果你的英文不是那么好,或者说看着头疼,那还是来看此篇吧. 在此之前说一个帮助文档的特别用法,绝不仅仅是搜单词,QT的文档非常强大的 ...

  10. Android Studio在华为真机上运行无法输出Debug日志解决

    这主要与华为手机本身的权限设置有关,解决办法请看链接地址 链接地址: https://blog.csdn.net/seafishyls/article/details/52198814