实验目的:

  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. 修改Github上提交日志

    bash: git rebase -i HEAD~5:假定你要修改的日志位于当前版本(HEAD)的前4次提交中. vi: pick -> reword:在自动打开的vi编辑器中,上下选择你要修改 ...

  2. 17秋 软件工程 团队第五次作业 Alpha Scrum2

    17秋 软件工程 团队第五次作业 Alpha Scrum2 今日完成的任务 杰麟:Java后端的学习: 世强:登录和注册接口编写: 港晨:完成数据库表的设计: 树民.陈翔:完成超级管理员后端框架. 其 ...

  3. 【学习笔记】cache/buffer

    cache 是为了弥补高速设备和低速设备的鸿沟而引入的中间层,最终起到**加快访问速度**的作用.buffer 的主要目的进行流量整形,把突发的大数量较小规模的 I/O 整理成平稳的小数量较大规模的 ...

  4. 添加xmlns:android="http://schemas.android.com/apk/res/android"的意思

    http://www.cnblogs.com/lovely/archive/2013/01/17/2865192.html xmlns:android="http://schemas.and ...

  5. Unity手游之路手游代码更新策略探讨

    版权声明: https://blog.csdn.net/janeky/article/details/25923151 这几个月公司项目非常忙.加上家里事情也多,所以blog更新一直搁置了. 近期在项 ...

  6. 【Java多线程】线程状态、线程池状态

    线程状态: 线程共包括以下5种状态.1. 新建状态(New) 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread().2. 就绪状态(Runnable) 也 ...

  7. 【洛谷】【二分查找】P1102 A−B数对

    [题目描述:] 给出一串数以及一个数字 C ,要求计算出所有 A−B=C 的数对的个数.(不同位置的数字一样的数对算不同的数对) [输入格式:] 第一行包括 2 个非负整数 N 和 C ,中间用空格隔 ...

  8. Java关于远程调试程序教程

    本节尝试一下Java远程调试的东西,记录一遍简单入门的东西.也就算是使用记录吧! 写一个简单程序打成jar丢到远程服务器运行,模拟远程Server在运行.就拿Java调用shell脚本提交作业程序为例 ...

  9. fibonacci数列的性质和实现方法

    fibonacci数列的性质和实现方法 1.gcd(fib(n),fib(m))=fib(gcd(n,m)) 证明:可以通过反证法先证fibonacci数列的任意相邻两项一定互素,然后可证n>m ...

  10. (java项目)坦克大战 2.0

    这个版本,只能算是一个雏形,把最基本的东西给完成了,不过,后面可添加的也不多.有一点,还是想去实现,那就是敌方坦克自己寻找对手!也就是游戏AI. emmm, 什么时候可以了解一下这个AI.顺便学学py ...