ShowHand

实验目的:

  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

时间: 2024-10-07 16:27:13

ShowHand的相关文章

C++ ShowHand

[内容] 模拟一个梭哈(Show hand) 牌戏,可以洗牌(shuffle).发牌(Deal).算牌型(GetType). 程序为控制台类型,输入Y发牌,输入N退出,不区大小写.输入Y后,先洗牌,把洗过的57张牌都打印出来,再随机抽 5 张,显示它们的牌型和大小. 打印时,牌的表示方法如下: 数字在前,花色在后. 2到9,用对应的数字表示:10 用 T 表示:JQKA就用对应的字母表示 花色:Club(草花) < Diamond(方块) < Heart(红桃) < Spade (黑桃)

实验二:关于梭哈游戏的代码的测试

实验二:关于梭哈游戏的代码的测试 一.题目简介 Github基本源代码控制方法 利用Junit4进行程序模块的测试,回归测试 编码规范的考量 C/Java等基本程序设计语言的运用. (考虑到有些同学的基础参差不齐) 实现纸牌游戏梭哈 二.个人github地址 https://github.com/qingfengsuixin/test/blob/master/ShowHand 三.所设计的模块测试用例.测试结果截图: package com.langsin.text2; import java.

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

一,题目简介: 1.创建一副扑克牌 7------k 加入到集合对象中2.对扑克牌洗牌3.定义参与游戏的玩家的人,通过键盘输入,限定人数2-54.人数符合要求继续执行,不符合退出5.对玩家发牌,每个人发五张,对玩家的牌排序 GitHub链接地址: https://github.com/GY1/test/blob/master/ShowHand(%E6%A2%AD%E5%93%88%E6%B8%B8%E6%88%8F) 梭哈游戏 源代码: package com.langsin.Collectio

第八章.Java集合

Java集合类是一种特别有用的工具类,可用于存储数量不等的对象.Java集合大致可分为Set.List.Queue和Map四种体系 Set代表无序.不可重复的集合 List代表有序.重复的集合 Map代表具有映射关系的集合 Java5又增加了Queue代表一种队列集合 java集合概述: 为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),java提供了集合类. 集合类主要负责保存.盛装其他数据,因此,集合类也被称为容器类.所有的集合类都在java.util包下,后来为了处

Java学习笔记(二)

1. Java抽象类: 抽象类和抽象方法都必须用abstract修饰,而且抽象方法不能有方法体 抽象类不能被实例化,即便这个抽象类没有包含抽象方法 抽象类的构造器不能用于创建实例,只能用于被其子类调用 含有抽象方法的类(包括直接定义一个抽象方法:继承了一个抽象父类但没有完全实现父类包含的抽象方法:以及实现了一个接口,但没有完全实现接口包含的抽象方法三种情况)只能被定义为抽象类 注意: abstract修饰的方法只能被子类复写并实现,而final修饰的方法不允许子类复写,故abstract和fin

走近抽象类与抽象方法

一.定义 MSDN:抽象类是一些留有部分或全部成员未实现的类,以便可以由派生类来提供实现.在C#中,当一个类被abstract关键字修饰,我们就称之为抽象类. 二.抽象类的特点 1.抽象类不能被实例化. 1-1 ? 1 2 3 4 public abstract class People {       protected abstract void Speak(string s); } 1-2 ? 1 People p = new People(); 当我们试图执行1-2的代码时,编译器提示如

Java 集合补充

集合大致可以分List,Set,Queue,Map四种体系. 集合和数组不一样,数组元素可以是基本类型的值,也可以是对象(的引用变量),集合里只能保存对象(的引用变量). 访问:如果访问List集合中的元素可以根据元素的索引,访问Map集合中的元素可以根据元素的key,访问Set集合中的元素只能根据元素本身来访问. Collection操作: public class CollectionTest { public static void main(String[] args) { Collec

cmake交叉编译的使用

2019-12-14     10:51:06 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程).本文主要如何利用cmake实现交叉编译.在Linux中有在X_86上和ARM上运行的可执行程序.对应的就有不同的编译方式,X_86上通常都是gcc编译代码,ARM上通常都是交叉编译的方式.下面来介绍cmake在linux交叉编译的使用. 1.编写交叉编译的配置文件 文件命名为toolchain.cmake,配置文件中主要是对编译器的说明,指明编译器的sysr

7.8 操作集合的工具类:Collections

目录 一.排序操作 二.查找和替换功能 三.同步控制 四.设置不可变集合 五.Java 9新增的不可变集合 一.排序操作 Collections提供了如下常用类方法用于对List集合进行排序: ★void reverse(List list):反转指定的List集合中的元素顺序. ★void shuffle(List list):对Lsit集合中的元素进行随机排序(shuffle方法模仿了"洗牌"动作). ★void sort(List list):根据元素的自然顺序对指定集合元素按升