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美元 ...
随机推荐
- 4、爬虫之mongodb
mongodb 简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之间的产品 ...
- JAVA基础-栈与堆,static、final修饰符、内部类和Java内存分配
Java栈与堆 堆:顺序随意 栈:后进先出(Last-in/First-Out). Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new.newarray.anewarray和mu ...
- 如何取得select结果数据集的前10条记录。postgresql
我用的是POSTGRESQL.select name from t_personal order by personal_id desc 我想取得上面结果数据的,前10条记录.SQL语句怎么改. 我记 ...
- Properties集合_练习
定义功能:获取一个应用程序 运行次数,如果超过5次,给出使用次数已到请注册的提示,并不要再运行程序 思路: 1.定义计数器:每次程序启动都需要计数一次,并且是在原有的次数上进行计数. 2.计数器就 ...
- golang []byte和string相互转换
测试例子 package main import ( "fmt" ) func main() { str2 := "hello" ...
- go标准库的学习-mime/multipart
参考:https://studygolang.com/pkgdoc 导入方式: import "mime/multipart" multipart实现了MIME的multipart ...
- ethereum/EIPs-1193 Ethereum Provider JavaScript API 如metamask更新后的接口
eip title author discussions-to status type category created requires 1193 Ethereum Provider JavaScr ...
- P1006 传纸条-洛谷luogu-dp动态规划
题目描述 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个mm行nn列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运 ...
- 【UOJ 17】飞扬的小鸟
UOJ 17 题意:在\(n\times m\)的网格中有一些柱子,它们可以通过的区间是\((L_i,R_i)\),位置在\(P_i\).在第i个位置点击一次会使高度增加\(X_i\),不点击会使高度 ...
- coredns CrashLoopBackOff 报错
1.kubectl logs -f coredns-99b9bb8bd-47mvf -n kube-system .:53 2018/09/22 07:39:37 [INFO] CoreDNS-1.2 ...