ShowHand
实验目的:
- Github基本源代码控制方法
- 利用Junit4进行程序模块的测试,回归测试
- 编码规范的考量
- 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的更多相关文章
- Java中List、Collections实现梭哈游戏
package ch8; import java.util.*; /** * Created by Jiqing on 2016/11/27. */ public class ShowHand { / ...
- 使用ML.NET实现德州扑克牌型分类器
导读:ML.NET系列文章 本文将基于ML.NET v0.2预览版,重点介绍提取特征的思路和方法,实现德州扑克牌型分类器. 先介绍一下德州扑克的基本牌型,一手完整的牌共有五张扑克,10种牌型分别是: ...
- 软件工程实践作业2 --梭哈游戏(java) 实践报告
一,题目简介: 1.创建一副扑克牌 7------k 加入到集合对象中2.对扑克牌洗牌3.定义参与游戏的玩家的人,通过键盘输入,限定人数2-54.人数符合要求继续执行,不符合退出5.对玩家发牌,每个人 ...
- Java 集合补充
集合大致可以分List,Set,Queue,Map四种体系. 集合和数组不一样,数组元素可以是基本类型的值,也可以是对象(的引用变量),集合里只能保存对象(的引用变量). 访问:如果访问List集合中 ...
- 第八章.Java集合
Java集合类是一种特别有用的工具类,可用于存储数量不等的对象.Java集合大致可分为Set.List.Queue和Map四种体系 Set代表无序.不可重复的集合 List代表有序.重复的集合 Map ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 对博弈活动中蕴含的信息论原理的讨论,以及从熵角度看不同词素抽象方式在WEBSHELL文本检测中的效果区别
1. 从赛马说起 0x1:赛马问题场景介绍 假设在一场赛马中有m匹马参赛,令第i匹参赛马获胜的概率为pi,如果第i匹马获胜,那么机会收益为oi比1,即在第i匹马上每投资一美元,如果赢了,会得到oi美元 ...
随机推荐
- row_number() over() 一句话概括,以及max()函数的一种查询分组中最大值的用法
row_number() over(partition by col1 order by col2) 根据COL1分组可能会有多个组,每组组内根据COL2进行排序.每组内都有自动生成的序号,从1开始, ...
- Pair Programming 2
学生-社团匹配程序 项目流程: 1. 分析讨论 2. 分工合作 3. 代码规范 4. 编码实现 5. 模块结合 6. 测试修改 7. 数据样例 8. 心得体会 9. GitHub链接 结对队友:陈文举 ...
- Alpha冲刺博客汇总(麻瓜制造者)
目录 Alpha冲刺报告 Github项目地址 测试报告与用户反馈博客地址 课程展示博客地址 事后诸葛亮 Alpha冲刺报告 Alpha冲刺报告(1/12)(麻瓜制造者) Alpha冲刺报告(2/12 ...
- ASP.NET WebAPI 双向token实现对接小程序登录逻辑
最近在学习用asp.net webapi搭建小程序的后台服务,因为基于小程序端和后台二者的通信,不像OAuth(开放授权),存在第三方应用.所以这个token是双向的,一个是对用户的,一个是对接口的. ...
- St_geometry 初始用
数据准备 点表 CREATE TABLE point_stgeom tablespace UBOSS_STS_WAREHOUSE as select car_number, longid, latid ...
- 虚拟DOM与DOM diff算法
虚拟DOM是什么? 一个虚拟DOM(元素)是一个一般的js对象, 准确的说是一个对象树(倒立的) 虚拟DOM保存了真实DOM的层次关系和一些基本属性,与真实DOM一一对应,如果只是更新虚拟DOM, 页 ...
- Linux(CentOS)上配置 SFTP(附解决Write failed: Broken pipe Couldn't read packet: Connection reset by peer)
#创建sftp组: groupadd sftp #创建一个用户sftpuser: useradd -g sftp -s /bin/false sftpuser #提示: /etc/group 文件包含 ...
- js MD5加密处理
关于MD5: MD5.js是通过前台js加密的方式对用户信息,密码等私密信息进行加密处理的工具,也可称为插件. 在本案例中 可以看到MD5共有6种加密方法: 1, hex_md5(value) 2, ...
- Spark笔记-DataSet,DataFrame
DataSet:面向对象的,从JVM进行构建,或从其它格式进行转化 DataFrame:面向SQL查询,从多种数据源进行构建,或从其它格式进行转化 RDD DataSet DataFrame互转 1. ...
- arcgis_js_api_3.12的project实践
esri.config.defaults.geometryService = new esri.tasks.GeometryService("http://localhost:6080/ar ...