斗地主案例(利用集合/增强for等技术)

package Task10;

import java.util.ArrayList;
import java.util.Collections; public class Test { public static void main(String[] args) {
//生成54张牌存入集合中(核心代码用双for循环进行遍历最后存到ArrayList<String> 中)
ArrayList<String> pokers = new ArrayList<String>(); String[] colors = {"♣", "♦", "♠", "♥"};
String[] numbers = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
for(int i = 0;i < colors.length;i++) { //获取花色
String color = colors[i];
for(int j = 0;j < numbers.length;j++) { //获取扑克上的数字
String number = numbers[j] ;
String poker = color + number; //拼接成一张牌
pokers.add(poker);
}
}
pokers.add("大王");
pokers.add("小王"); //洗牌(核心代码是collection类里面的工具类里collections的shuffle方法) Collections.shuffle(pokers); //发牌(核心代码是:三个集合类型的选手,依次发牌,直到只剩最后三张的时候当作底牌)
//三个玩家
ArrayList<String> player01 = new ArrayList<>();
ArrayList<String> player02 = new ArrayList<>();
ArrayList<String> player03 = new ArrayList<>();
ArrayList<String> diPai = new ArrayList<>();
for(int i = 0; i < pokers.size() ; i++) {
//每一张牌的临时接收者
String poker = pokers.get(i);
//当还剩最后三张的时候
if(i >= pokers.size()-3) {
diPai.add(poker);
}else if(i % 3 == 0) {
player01.add(poker);
}else if(i % 3 == 1) {
player02.add(poker);
}else {
player03.add(poker);
}
} //发牌完毕,打印出三个玩家的牌和底牌
System.out.println("发牌完毕!!!");
System.out.println("玩家1:");
for (String p1 : player01) {
System.out.print(p1+" ");
}
System.out.println();
System.out.println("玩家2:");
for (String p2 : player02) {
System.out.print(p2+" ");
}
System.out.println();
System.out.println("玩家3:");
for (String p3 : player03) {
System.out.print(p3+" ");
}
System.out.println();
System.out.println("底牌:");
for (String di : diPai) {
System.out.print(di+" ");
}
System.out.println();
//选地主...将得到大王的选手选为地主(核心代码是collections工具类中的contains方法 和添加底牌的addAll方法)
if(player01.contains("大王")) {
player01.addAll(diPai);
System.out.println("=====================玩家1成为地主=====================");
}else if(player02.contains("大王")) {
player02.addAll(diPai);
System.out.println("=====================玩家2成为地主=====================");
}else{ player03.addAll(diPai);
System.out.println("=====================玩家3成为地主=====================");
} //显示每位玩家手中的牌
System.out.println("===================最终每个人手中的牌是=====================");
System.out.println("玩家1:");
for (String p1 : player01) {
System.out.print(p1+" ");
}
System.out.println();
System.out.println("玩家2:");
for (String p2 : player02) {
System.out.print(p2+" ");
}
System.out.println();
System.out.println("玩家3:");
for (String p3 : player03) {
System.out.print(p3+" ");
} }
}

核心代码总结:

  1,生成牌:

    主要是用ArrayList集合类存生成的牌,每个玩家手中的牌,底牌!

    要用的容器主要有:花色,牌面数字,

    技术是用花色和牌面数字的个数进行双重循环遍历,把遍历出的每一种组合,都存到ArrayList集合中()共有4*13 = 52种,最后不要忘了大小王,一共54张牌

  2.洗牌:

   核心的技术是ArrayList中的一个方法 shuffle,功能是对数组中的元素进行打乱

  3.发牌:

   核心技术是:对已经打乱的牌进行对每个玩家挨个分发,用的是for循环的下标,对3取余,不要忘了最后三张底牌

  4.抢地主:

   核心方法是:ArrayList里面的contains方法,来判断luckyPoker(拥有者获得地主的优先选择权)

  5.显示每个玩家手中的牌面:

   用增强for打印

斗地主案例(利用集合/增强for等技术)的更多相关文章

  1. Day_12【集合】扩展案例1_利用集合的知识对长度为10的int数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序

    分析以下需求,并用代码实现 1.定义一个长度为10的int数组,并存入10个int类型的数据,其中有一些数据是重复的 2.利用集合的知识对数组进行去重,产生新数组,不能改变数组中原来数字的大小顺序 3 ...

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

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

  3. hadoop笔记之MapReduce的应用案例(利用MapReduce进行排序)

    MapReduce的应用案例(利用MapReduce进行排序) MapReduce的应用案例(利用MapReduce进行排序) 思路: Reduce之后直接进行结果合并 具体样例: 程序名:Sort. ...

  4. MCP|WJ|Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex proximity extension assay(利用多重邻位延伸分析技术进行宫颈癌血浆蛋白候选生物标记物的鉴定研究)

    文献名:Identification of candidate plasma protein biomarkers for cervical cancer using the multiplex pr ...

  5. fastjson反序列化漏洞实际案例利用

    fastjson反序列化rce实际案例利用全过程: 存在问题网站:http://***.com/ 在网站上寻找一些安全漏洞的时候,发现一条json数据包 数据包如下: POST /*** HTTP/1 ...

  6. 乒乓球队比赛,甲队有abc三人,乙队有xyz三人。 抽签得出比赛名单:a不和x比,c不和x,z比, 利用集合求出比赛名单

    import java.util.HashMap; import java.util.Map; /** * 乒乓球队比赛,甲队有abc三人,乙队有xyz三人. * 抽签得出比赛名单:a不和x比,c不和 ...

  7. java语言进阶(四)_Map_斗地主案例

    第一章 Map集合 1.1 概述 现实生活中常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射.Java提供了专门的集合类用来存放这种 ...

  8. Java斗地主案例、异常和自定义异常整理

    模拟斗地主洗牌发牌 1.1 案例介绍 按照斗地主的规则,完成洗牌发牌的动作. 具体规则: 1. 组装54张扑克牌 2. 将54张牌顺序打乱 3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张 ...

  9. 第28天学习打卡(Date和Calendar类 基本类型的包装类 集合 增强for循环 )

    Date和Calendar类 简介 日期和日历类,用于操作日期相关信息. 构造方法 Date(): 构造一个日期对象,当前系统时间,精确到毫秒. Date(long): 构造一个日期对象,时间为自&q ...

随机推荐

  1. ACL访问控制列表

    acl是基于文件系统的,所以支不支持acl在于使用什么文件系统. FAT32文件系统不支持权限,也不区分大小写 如果一个分区不是安装系统时分的分区,是一个新的分区的话,默认是不支持acl CentOS ...

  2. 多文件工程的编译-Makefile的简便写法

    通常我们在命令行使用GCC对程序进行编译,如果对于单个或者几个文件时比较方便的,但当工程中的文件逐渐增多甚至变得十分庞大的时候,使用GCC显然力不从心,不好管理.因此我们有必要编写一个Makefile ...

  3. Linux 系统裁剪笔记 软盘2

    第一步:裁减内核打开终端,输入:cd /usr/src/linux2.4,然后输入make xconfig.现在编译内核正式开始了1.1 "code maturity level optio ...

  4. Android之PendingIntent的深入理解

    PendingIntent字面意义:等待的,未决定的Intent.要得到一个pendingIntent对象,使用方法类的静态方法 getActivity(Context, int, Intent, i ...

  5. Error Code: 1068. Multiple primary key defined

    1.错误描述 10:10:38 alter table user add num int(8) primary key first Error Code: 1068. Multiple primary ...

  6. (八)java垃圾回收和收尾

    垃圾回收机制:当一个对象不再被引用时,或者说当一个对象的引用不存在时,我们就认为该对象不再被需要,它所占用的内存就会被释放掉.     垃圾回收只是在程序执行过程中偶尔发生,java不同的运行时刻会产 ...

  7. Android 开发环境搭建与Hello World

    Hello World 到这里, 环境搭建就没问题了. 接下来, 创建一个Android 的Hello World. 1.  添加一个安卓虚拟设备 直接点击虚拟设备管理图标或是  Window--&g ...

  8. PCI-E配置MSI中断流程解析

    在传统的pci中断体系中,每一个pci总线上的设备被分配一个特定的中断号,然后当设备需要中断cpu时,设备直接发出int信号,然后在cpu的inta引脚拉低的时候将自己的中断号放在数据总线上,一切都要 ...

  9. AHCI模式安装XP以及驱动下载

    一.准备AHCI驱动 1.关于AHCI基础知识,请参考<AHCI模式的驱动下载.安装及蓝屏问题综合>一文. 2.安装AHCI驱动之前,请先确认桌面上.系统盘没有重要的东西需要备份,因为如果 ...

  10. freemarker.template.TemplateException:Error parsing including template

    1.错误描述 freemarker.template.TemplateException:Error parsing including template ftl/main.ftl:on line 6 ...