简单的扑克牌游戏 梭哈:
  梭哈用的是扑克牌共52张牌,因为不容易出好牌,也有去掉 234567 的简易玩法,规则玩法花样很多。
  在这里我们采用:52 张牌,3 个人,一人 5 张牌,按规则对牌面大小进行比较 ,这样的方式进行游戏。

牌型比较:
同花顺>四条>满堂红>同花>顺子>三条>二对>单对>散牌。
数字比较:
A>K>Q>J>10>9>8 >7>6>5>4>3>2
花式比较:
黑桃>红桃>草花>方块

1 创建一张牌

将具体的扑克牌抽象,使用主要的信息就可以了,主要依据花色和点数就可以进行游戏。注意,花色和点数用 String 来设置。

public class Card {// 花色public String suit;// 点数public String rank;public Card(String suit, String rank) {this.suit = suit;this.rank = rank;}@Overridepublic String toString() {return "[" + this.suit + this.rank + "]";}
}

2 创建一副牌

4 种花色( ♥ , ♦ , ♣ , ♠ ) * 13个点数( 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , J , Q , K , A ),以及大鬼小鬼。

// 给定扑克牌的花色
public static final String[] suits = {"♥","♦","♣","♠"};
// 给定扑克牌的点数
public static final String[] rank = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
// 创建一副牌
private static List<Card> buyPoker() {List<Card> poker = new ArrayList<>();for (int i = 0; i < suits.length; i++) {for (int j = 0; j < rank.length; j++) {poker.add(new Card(suits[i],rank[j]));}}poker.add(new Card("","big Joker"));poker.add(new Card("","small Joker"));return poker;
}

3 洗牌

洗牌思路:
从最后开始循环,每取到一个元素,就将这个元素与它之前的、随机的一个元素进行交换,直到循环到第一个元素。

// 因为是可变对象,所以不用返回值,就可以修改到 List
private static void shuffle(List<Card> poker) {Random random = new Random();for (int i = poker.size() - 1; i > 0 ; i--) {// 获取 0 ~ i 的随机数作为位置int pos = random.nextInt(i);swap(poker,i,pos);}
}private static void swap(List<Card> poker, int i, int pos) {Card tmp = poker.get(i);poker.set(i,poker.get(pos));poker.set(pos,tmp);
}

4 发牌 / 展示手牌

因为梭哈中不用大小鬼,我们在发牌时,去掉大小鬼,然后三个玩家一人发 5 张扑克牌,按规则比大小。

  public static void main(String[] args) {// 1.创建一副牌List<Card> poker = buyPoker();// 2.洗牌shuffle(poker);
//        System.out.println(poker);// 3.发牌// 三个玩家,每个人手中发五张牌
//        List<Card> player1 = new ArrayList<>();
//        List<Card> player2 = new ArrayList<>();
//        List<Card> player3 = new ArrayList<>();// 可以把上面三个人放到一个 List 中// plays 类型仍然是 List, 泛型参数是 List<Card>// 每个元素就是一个 List<Card>List<List<Card>> players = new ArrayList<>();// 每次 add 的元素都是一个 ArrayList<Card> 类型players.add(new ArrayList<>());players.add(new ArrayList<>());players.add(new ArrayList<>());for (int i = 0; i < 5; i++) {for (int j = 0; j < 3; j++) {// 获得要发的牌:// remove 移除第一张牌,就像发牌时从最上面开始发// 该方法会返回要移除的元素的值Card top = poker.remove(0);if (top.rank.equals("big Joker") || top.rank.equals("small Joker")) {top = poker.remove(0);}// 找到人:// 发给第 j 个人List<Card> player = players.get(j);// 把牌给到人player.add(top);}}// 4. 展示手牌,按照一定规则比较大小for (int i = 0; i < players.size(); i++) {List<Card> player = players.get(i);System.out.println("玩家" + i + "的手牌是:" + player);}}

Java顺序表 实现扑克牌游戏简单 (梭哈 / 斗牛)相关推荐

  1. Java顺序表就地逆置_顺序表的就地逆置问题

    问题描述:编写一个顺序表的成员函数,实现对顺序表就地逆置的操作.所谓逆置,就是把(a1,a2,a3,...,an)变成(an,an-1,..,a2,a1):所谓就地,即逆置后的数据元素仍在原来顺序表的 ...

  2. JAVA顺序表的简单实现

    import java.util.Scanner;class DATA{ //模拟一个班级的学生记录String key;String name;int age;}class SLType{stati ...

  3. java 顺序表的实现_顺序表的简单实现(Java)

    采用Java实现数据结构中的顺序表 /** *Apr 15, 2013 *Copyright(c)JackWang *All rights reserve *@Author JackWang */ p ...

  4. 线性表练习扑克牌游戏(炸金花)

    数据结构是很重要的,一个好的程序员语法可以略微不好但是数据结构绝对是一个可以拉开优略程序员的一个分水岭,我写了一个关于炸金花的小练习巩固线性表的知识如果大家对线性表不是很熟悉,我可以尽快带大家写一遍根 ...

  5. 数据结构之静态顺序表(含游戏菜单)

    目录 一.什么是顺序表? 二.静态顺序表和动态顺序表的不同点 三.什么是静态顺序表 四:函数接口实现 1.初始化结构体 2.打印数据 3.头插数据 4.尾插数据 5.头删数据 6.尾删数据 附:原码链 ...

  6. Java实验-02 模拟扑克牌游戏的洗牌

    结合面向对象设计原则,分析和设计模拟扑克牌游戏的洗牌过程. 编程定义一个表示扑克牌的类 Poke,用 suit 来表示扑克牌的花色,用 face 来表示扑克牌的 牌面值,每副牌为 52 张,不考虑包含 ...

  7. Java实现王者荣耀小游戏(简单版,带有图片资源)

    这周是实践周,要写期末大作业.参考http://[[尚学堂]在家打王者,不如自己开发王者_开发Java游戏项目[王者荣耀]24小时搞定!!!腾讯游戏_java项目_java游戏开发_java实战项目_ ...

  8. 【Java】24点扑克牌游戏

    [Charloe原创] [前言] 这是学Java以来写的第一个比较有意思的东西--GUI界面的24点扑克牌游戏.大概是这个样子: [功能介绍] 一.随机生成四张扑克牌,按下Refresh按钮可以刷新牌 ...

  9. 数据结构之动态顺序表(含游戏菜单)

    上一篇文章我们谈了数据结构的静态顺序表,以及实现了静态顺序表,具体可以看我的上一篇文章->>>数据结构之静态顺序表. 我们可以知道,静态顺序表的缺点是:  因为使用的是定长数组,所以 ...

最新文章

  1. uni-app 封装企业微信config
  2. 设计模式--装饰模式
  3. 滑动listview隐藏和显示顶部布局
  4. Bootstrap 按钮下拉菜单
  5. 35岁程序员惨遭裁员,找了6份兼职,晒出收入网友:“打工皇帝”
  6. 后端怎么接收map_史上最全,C++后端开发面试题与知识点汇总
  7. 电子设计竞赛应该如何准备?
  8. MOSSE相关滤波算法学习笔记
  9. 人机工程学/人因工程学的定义
  10. 敏捷-年金、净现值NPV、IRR、现值PV、终值FV、EAR概念与案例(转)
  11. 实验吧 因缺思汀的绕过 By Assassin(with rollup统计)
  12. python macd底背离_MACD的“底背离”狠不狠?回测告诉你结果
  13. #483(div.2) B. Minesweeper
  14. 浅谈对工厂方法模式的理解
  15. Java打造RPC框架(二):11个类实现简单Java RPC
  16. global全局对象
  17. 数据结构----二叉树
  18. php订阅号发送消息,php实现微信公众号主动推送消息
  19. pg数据库百分比处理
  20. 能ping通百度,但是上不了网的解决方法

热门文章

  1. antv g2 x轴两边留边距
  2. 使用maven-sql-plugin实现持续数据库集成(CDBI) [ 光影人像 东海陈光剑 的博客 ]
  3. 问题:MongoDB C# driver异常:Truncation resulted in data loss
  4. Android 使用第三方SDK 一般流程
  5. 调用其他命名空间中的函数-洋葱先生-杨少通
  6. 遮天、斗破苍穹、凡人修仙传、雪中悍刀行争第四届橙瓜网络文学奖
  7. 计算机教室应注意事项,电子白板教室操作说明及注意事项
  8. javaweb做什么能赚钱_做一个完整的Java Web项目需要掌握的技能
  9. 在Windows 7 Media Center中收听本地FM广播
  10. 【PhpSpreadsheet】实现excel冻结列和行(即左右滚动时指定列和行固定不动)