创建数组、集合,存放数据

public class FightAgainstLandlords {
/**
* poker集合,存储54张牌
*/
private ArrayList<String> poker; /**
* colors数组存储牌的花色
*/
private String[] colors; /**
* numbers数组存储牌的值
*/
private String[] numbers;
}

构造方法FightAgainstLandlords

public class FightAgainstLandlords {
public FightAgainstLandlords(ArrayList<String> poker, String[] colors, String[] numbers) {
this.poker = poker;
this.colors = colors;
this.numbers = numbers;
}
}

定义打乱牌牌序方法

public class FightAgainstLandlords {
/**
* 存储54张牌
*/
public ArrayList<String> fiftyFive() {
for (String color: colors) {
for (String number: numbers) {
poker.add(color + number);
}
}
poker.add("大王");
poker.add("小王");
// 洗牌,调用Collections类的静态方法shuffle(),用默认随机源对指定列表进行置换
Collections.shuffle(poker);
return poker;
}
}

发牌

public class FightAgainstLandlords {
/**
* 发牌
* 获取玩家牌或者底牌
* j = 1, 2, 3 代表玩家牌
* j = 其他数字 代表底牌
*/
public ArrayList<String> licensing(int j, ArrayList<String> pokers) {
// 三个玩家
ArrayList<String> people1 = new ArrayList<>();
ArrayList<String> people2 = new ArrayList<>();
ArrayList<String> people3 = new ArrayList<>();
// 底牌
ArrayList<String> basePoker = new ArrayList<>(); for (int i = 0; i < pokers.size(); i++) {
String p = pokers.get(i);
if ( i < 51) {
if (i % 3 == 0) {
people1.add(p);
} else if (i % 3 == 1) {
people2.add(p);
} else {
people3.add(p);
}
} else {
basePoker.add(p);
}
} // 返回玩家的牌、底牌
if (j == 1) {
return people1;
} else if (j == 2) {
return people2;
} else if (j == 3) {
return people3;
} else {
return basePoker;
}
}
}

测试FightAgainstLandlords类

import java.util.ArrayList;

public class DemoFightAgainstLandlords {
public static void main(String[] args) { ArrayList<String> poker = new ArrayList<>();
String[] colors = {"红桃", "黑桃", "梅花", "方块"};
String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; // new一个斗地主
FightAgainstLandlords fightAgainstLandlords = new FightAgainstLandlords(poker, colors, numbers);
// 54张牌
ArrayList<String> pokers = fightAgainstLandlords.fiftyFive(); // 获取每个人的牌,和底牌
ArrayList<String> people1 = fightAgainstLandlords.licensing(1, pokers);
ArrayList<String> people2 = fightAgainstLandlords.licensing(2, pokers);
ArrayList<String> people3 = fightAgainstLandlords.licensing(3, pokers);
ArrayList<String> basePoker = fightAgainstLandlords.licensing(4, pokers); // 看一下它们每个人的牌,和底牌
System.out.println("people1:" + people1);
System.out.println("people2:" + people2);
System.out.println("people3:" + people3);
System.out.println("basePoker:" + basePoker);
}
}
输出结果(每个人的牌,和底牌都是随机的):
people1:[红桃3, 梅花J, 梅花K, 方块J, 方块K, 梅花10, 红桃6, 梅花9, 黑桃Q, 红桃Q, 梅花4, 黑桃A, 方块2, 红桃8, 方块4, 黑桃8, 红桃K]
people2:[梅花A, 方块3, 小王, 黑桃J, 红桃7, 方块5, 方块9, 黑桃10, 方块8, 梅花Q, 方块6, 梅花6, 红桃10, 方块Q, 黑桃5, 黑桃2, 红桃A]
people3:[梅花5, 梅花8, 黑桃7, 黑桃4, 红桃9, 黑桃9, 黑桃K, 方块7, 黑桃6, 梅花3, 方块10, 红桃4, 黑桃3, 红桃5, 大王, 红桃J, 方块A]
basePoker:[红桃2, 梅花2, 梅花7]

FightAgainstLandlords类的所有代码

import java.util.ArrayList;
import java.util.Collections; public class FightAgainstLandlords {
/**
* poker集合,存储54张牌
* 不是斗地主也可以存储52张牌(不存储大王、小王牌)
*/
private ArrayList<String> poker; /**
* colors数组存储牌的花色
*/
private String[] colors; /**
* numbers数组存储牌的值
*/
private String[] numbers; public FightAgainstLandlords(ArrayList<String> poker, String[] colors, String[] numbers) {
this.poker = poker;
this.colors = colors;
this.numbers = numbers;
} /**
* 存储54张牌
*/
public ArrayList<String> fiftyFive() {
for (String color: colors) {
for (String number: numbers) {
poker.add(color + number);
}
}
poker.add("大王");
poker.add("小王");
// 洗牌,调用Collections类的静态方法shuffle(),用默认随机源对指定列表进行置换
Collections.shuffle(poker);
return poker;
} /**
* 发牌
* 获取玩家牌或者底牌
* j = 1, 2, 3 代表玩家牌
* j = 其他数字 代表底牌
*/
public ArrayList<String> licensing(int j, ArrayList<String> pokers) {
// 三个玩家
ArrayList<String> people1 = new ArrayList<>();
ArrayList<String> people2 = new ArrayList<>();
ArrayList<String> people3 = new ArrayList<>();
// 底牌
ArrayList<String> basePoker = new ArrayList<>(); for (int i = 0; i < pokers.size(); i++) {
String p = pokers.get(i);
if ( i < 51) {
if (i % 3 == 0) {
people1.add(p);
} else if (i % 3 == 1) {
people2.add(p);
} else {
people3.add(p);
}
} else {
basePoker.add(p);
}
} // 返回玩家的牌、底牌
if (j == 1) {
return people1;
} else if (j == 2) {
return people2;
} else if (j == 3) {
return people3;
} else {
return basePoker;
}
}
}

Java 用集合实现简单的斗地主发牌的更多相关文章

  1. Java Linked集合的简单介绍和常用方法的使用

    LinkedList的简单介绍 java.util.LinkedList 集合数据存储的结构是链表结构.LinkedList是一个双向链表在实际开发中,对一个集合元素的添加和删除,经常涉及到首尾操作, ...

  2. Java用集合实现斗地主发牌

    本文以java双列集合HashMap为核心实现发牌操作:                                思路: 1.准备牌:创建一个Map集合,存储牌的索引和组装好的牌 创建一个lis ...

  3. 使用Java实现简单的斗地主案例

    使用Java实现简单的斗地主案例 案例说明:使用Java实现简单的斗地主洗牌发牌的操作: 具体规则: 共有54张牌,顺序打乱: 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后留三张为底牌(地主牌) ...

  4. Java基础-集合的嵌套

    Java基础-集合的嵌套 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.静态导入 静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准 ...

  5. 计算机网络(13)-----java nio手动实现简单的http服务器

    java nio手动实现简单的http服务器  需求分析 最近在学习HTTP协议,还是希望动手去做一做,所以就自己实现了一个http服务器,主要功能是将http请求封装httpRequest,通过解析 ...

  6. Github优秀java项目集合(中文版) - 涉及java所有的知识体系

    Java资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-java 就是 akullpp 发起维护的 Java 资源列表,内容 ...

  7. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  8. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  9. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

随机推荐

  1. Java开发中RMI和webservice区别和应用领域

    Java开发中RMI和webservice区别和应用领域 一.RMI和webservice区别和联系 0. 首先,都是远程调用技术. 1. RMI是在TCP协议上传递可序列化的java对象(使用Str ...

  2. 2019-7-29-WPF-元素裁剪-Clip-属性

    title author date CreateTime categories WPF 元素裁剪 Clip 属性 lindexi 2019-7-29 10:0:13 +0800 2019-1-3 15 ...

  3. H3C HDLC状态检测

  4. PC端页面如何调用QQ进行在线聊天?

    pc端如何实现QQ在线咨询? html代码如下: <a href="tencent://message/?uin=1234567&Site=Sambow&Menu=ye ...

  5. P1089 过独木桥

    题目描述 今年的 CSP-J/S 比赛马上就要开始了,代码决定的 N 位女学生排队去参加比赛. 期间他们遇到了代码决定的 M 位男生组成的男生队伍. 他们堵在了一座独木桥前.但是独木桥每次只能过一个人 ...

  6. Mockito -- 入门篇

    Mockito是一种mock工具/框架.我理解EasyMock有点过时了,Mockito是现在比较流行的. 什么是mock?说的直白一点,大家都知道unit test应该是尽可能独立的.对一个clas ...

  7. margin为负值的几种情况

    1.margin-top为负值像素 margin-top为负值像素,偏移值相对于自身,其后元素受影响,见如下代码: 1 <!DOCTYPE html> 2 <html lang=&q ...

  8. 2019牛客暑期多校训练营(第八场)E.Explorer

    链接:https://ac.nowcoder.com/acm/contest/888/E来源:牛客网 Gromah and LZR have entered the fifth level. Unli ...

  9. API自动化测试指南

    我相信自动化技能已经成为高级测试工程师总体技能的标配.敏捷和持续测试破坏了传统的测试自动化实践,导致测试工程师重新考虑自动化的完成方式.当今的自动化工程师需要在GUI的下方深入到API级别完成软件质量 ...

  10. Excel基本功能

    公式基础: 比较运算符的种类 flase对应0 而ture对应1 连接运算 利用之前提到的ture就是1 乘以100 注意用括号区分优先级 函数应用基础: 系统已经列好这几个常用的函数 右键单击状态栏 ...