扑克模拟,牌型判断java版
Card类
package com.company; public class Card {
private String color;
private Integer value;
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public Integer getValue() {
return value;
}
public void setValue(Integer value) {
this.value = value;
}
public String ToString()
{
String strValue = "";
switch(value)
{
case 1:
{
strValue = "A";
break;
}
case 11:
{
strValue = "J";
break;
}
case 12:
{
strValue = "Q";
break;
}
case 13:
{
strValue = "K";
break;
}
default:
strValue = value.toString();
break;
}
return color+strValue;
} }
Poke类
package com.company; import java.sql.Connection;
import java.util.*; /**
* Created by ttc on 2017/6/30.
*/
public class Poke {
String[] colors = {"红桃","黑桃","方片","草花"};
Integer[] values = {1,2,3,4,5,6,7,8,9,10,11,12,13};
Card[] cards = new Card[52];// public void makeCards()
{
//生成52张扑克,印刷扑克
int index = 0;
for(int i = 0; i < 4; i++) {
for (int j = 0; j < 13; j++) {
cards[index] = new Card();
cards[index].setValue(values[j]);
cards[index].setColor(colors[i]);
index++;
}
}
return;
} public void outputCards()
{
int index2 = 0;
for(Card card : cards)
{
if(index2 % 13 == 0)
System.out.println(); System.out.print(card.toString()+" ");
index2++;
}
}
///5--25
//5+(0--20)
//Random r = new Random();
//int n = 5 + r.nextInt(20);//生成一个0,到n之间的随机数,不包括n,包括0
public void shuffle()
{
Random random = new Random();
for(int n = 0; n < 52; n++)
{
int index = random.nextInt(n+1);//n之前的某张牌
//交换cards[n]<---->cards[index];
Card cardTemp = cards[n];
cards[n] = cards[index];
cards[index] = cardTemp;
}
} //一手牌
public Card[] getOneHands()
{
Card[] cardHands = new Card[5];
// cardHands[0] = cards[0];
// cardHands[1] = cards[13];
// cardHands[2] = cards[26];
// cardHands[3] = cards[39];
// cardHands[4] = cards[1];
for(int i = 0; i < 5; i++)
{
cardHands[i] = cards[i];
}
return cardHands;
} public void judgeHandType(Card[] hands)
{
boolean bIsSameColor = false;
boolean bIsShunzi = false;
//先判断这手牌是不是同花
Set<String> colorSets = new HashSet<String>();
for(int i = 0; i < hands.length; i++)
{
colorSets.add(hands[i].getColor());
}
if(colorSets.size()==1)
{
bIsSameColor=true;
//System.out.println("同花");
} Set<Integer> valueSets = new HashSet<Integer>();
List<Integer> valueLists = new ArrayList<Integer>();
for(int i = 0; i < hands.length; i++)
{
valueSets.add(hands[i].getValue());
valueLists.add(hands[i].getValue());
} Collections.sort(valueLists);//排序
int diff = valueLists.get(4) - valueLists.get(0); if(diff == 4 && valueSets.size() == 5)
{
bIsShunzi = true;
//System.out.println("顺子");
} if(bIsSameColor&&bIsShunzi)
{
System.out.println("同花顺");
}
else if(bIsSameColor)
{
System.out.println("同花");
}
else if(bIsShunzi)
{
System.out.println("顺子");
}
else if(valueSets.size() == 5)//这5张牌不是顺子,并且值都不同
{
System.out.println("杂牌");
}
else if(valueSets.size() == 4)
{
System.out.println("一对");
}
else
{
//map的key保存的是牌的值,map的值保存的是同样值的牌的列表
Map<Integer,List<Card>> map = new HashMap<Integer,List<Card>>();
//将一手牌的数据,从数组结构,转变成map结构 for(int i = 0; i < hands.length; i++)
{
Card card = hands[i];
//看card这张牌的值是否在map的key中存在
if(map.containsKey(card.getValue()))//如果存在
{
List<Card> lst = map.get(card.getValue());
lst.add(card);
}
else//不存在
{
List<Card> lst = new ArrayList<Card>();
lst.add(card);
map.put(card.getValue(),lst);
} } if(map.size() == 2)//4带1,3带2
{
boolean bIsFourWithOne = false;
for(Map.Entry<Integer,List<Card>> entry : map.entrySet())
{
//entry的值是一个List
if(entry.getValue().size() == 4)
{
bIsFourWithOne = true;
break;
}
}
if(bIsFourWithOne == true)
{
System.out.println("四带一");
}
else
{
System.out.println("三带二");
}
}
else if(map.size() == 3)//221,311
{
boolean bIsThreeOneOne = false;
for(Map.Entry<Integer,List<Card>> entry : map.entrySet())
{
//entry的值是一个List
if(entry.getValue().size() == 3)
{
bIsThreeOneOne = true;
break;
}
}
if(bIsThreeOneOne == true)
{
System.out.println("三条");
}
else
{
System.out.println("两对");
}
}
} return;
} }
Main类
package com.company; import java.util.Scanner; public class Main { public static void main(String[] args) {
// write your code here
Poke poke = new Poke();
poke.makeCards();
poke.outputCards();
poke.shuffle();
System.out.println("\n洗牌以后");
poke.outputCards(); Card[] hands = poke.getOneHands();
System.out.println();
for(int i = 0; i< 5; i++)
{
System.out.println(hands[i]);
}
System.out.println("\n牌型是:");
poke.judgeHandType(hands); }
}
扑克模拟,牌型判断java版的更多相关文章
- 蓝桥杯省赛 牌型种数java
小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张.这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺 ...
- (转)牛牛牌型判定(五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛>没牛)
牌型大小: 五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛(牛987654321) > 没牛,K > Q > J ……2 > A, 黑 ...
- 【教程】模拟登陆百度之Java代码版
[背景] 之前已经写了教程,分析模拟登陆百度的逻辑: [教程]手把手教你如何利用工具(IE9的F12)去分析模拟登陆网站(百度首页)的内部逻辑过程 然后又去用不同的语言: Python的: [教程]模 ...
- java 牌型种数
牌型种数 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得 ...
- java实现第六届蓝桥杯牌型整数
牌型整数 题目描述 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- 第6届蓝桥杯javaA组第7题,牌型种数,一道简单的题带来的思考
题目: 小明被劫持到X赌城,被迫与其他3人玩牌. 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张. 这时,小明脑子里突然冒出一个问题: 如果不考虑花色,只考虑点数,也不考虑自己得到 ...
- 编写你的第一个 Java 版 Raft 分布式 KV 存储
前言 本文旨在讲述如何使用 Java 语言实现基于 Raft 算法的,分布式的,KV 结构的存储项目.该项目的背景是为了深入理解 Raft 算法,从而深刻理解分布式环境下数据强一致性该如何实现:该项目 ...
- 剑指offer(java版)【转】
面试题 2 :实现单例模式 1. 饿汉式单例类 public class SingletonClass { private static final SingletonClass instance=n ...
随机推荐
- 金中欢乐赛 A题
题目传送门 这道题就贪心.... 正的一坨和负的一坨间隔 #include<cstdio> #include<cstring> #include<algorithm> ...
- bzoj 1412 最小割 网络流
比较明显的最小割建模, 因为我们需要把狼和羊分开. 那么我们连接source和每个羊,流量为inf,代表这条边不能成为最小割中的点,同理连接每个狼和汇,流量为inf,正确性同上,那么对于每个相邻的羊和 ...
- LeetCode189:Rotate Array
Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...
- SpringMvc基础知识(二) springmvc和mybatis整合
1 springmvc和mybatis整合 1.1 需求 使用springmvc和mybatis完成商品列表查询. 1.2 整合思路 springmvc+mybaits的系统架构: 第一步:整合dao ...
- Oracle基础 09 概要文件 profile
--创建 profile 概要文件create profile profile123 limit failed_login_attempts 2; --修改用户的 profile 文件alter u ...
- Java坦克大战 (三) 之可完全控制坦克朝八个方向运动
本文来自:小易博客专栏.转载请注明出处:http://blog.csdn.net/oldinaction 在此小易将坦克大战这个项目分为几个版本,以此对J2SE的知识进行回顾和总结,希望这样也能给刚学 ...
- python--celery
有些时候我们的一些任务比较耗时,比如我们写了一个网站,用户注册的时候需要发送邮件.但是发送邮件的过程比较耗时,用户必须要等到我们将邮件发送成功之后才会得到响应.那么有没有一种办法,当用户点击发送邮件的 ...
- 基于Docker 搭建 wordpress
在Docker中,一般遵循一个Docker只运行一个应用,这样方便维护. 首先需要将centos 镜像pull到本地,并搭建本地yum仓库 yum仓库地址:http://192.168.2.11:80 ...
- Python 进阶 之 else块 巧(慎)用
Python 的 else 模块和其他语言的else模块相比有那么一丢丢的特殊用法,有些用法虽然不推荐用,但是别人如果用了,最起码能看懂是不是? 1:快捷返回值: 格式: value1 if expr ...
- Codeforces #432 Div2 D
#432 Div2 D 题意 给出一些数字,如果这些数字的的 \(gcd\) 不为1则称这些数字 \(good\). 可以有两种操作: 花费 x 删掉一个数 花费 y 将一个数加 1 问使这些数 \( ...