java斗地主扑克 扑克牌 洗牌 发牌 Collection 集合练习
package com.swift.poker; import java.util.ArrayList;
import java.util.Collections; /*训练考核知识点:Collection接口的基本方法、 训练描述:
按照斗地主的规则,完成洗牌发牌的动作。
具体规则:
使用54张牌打乱顺序
三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。 操作步骤描述:
准备牌:
牌可以设计为一个ArrayList<String>,每个字符串为一张牌。
每张牌由花色数字两部分组成,我们可以使用花色集合与数字集合嵌套迭代完成每张牌的组装。
牌由Collections类的shuffle方法进行随机排序。
发牌:
将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
看牌:
直接打印每个集合*/ public class Poker { public static void main(String[] args) { ArrayList<String> huase=new ArrayList<String>();
huase.add("♥");
huase.add("♠");
huase.add("♧");
huase.add("方片");
ArrayList<String> shuzi=new ArrayList<String>();
shuzi.add("A");
shuzi.add("2");
shuzi.add("3");
shuzi.add("4");
shuzi.add("5");
shuzi.add("6");
shuzi.add("7");
shuzi.add("8");
shuzi.add("9");
shuzi.add("10");
shuzi.add("J");
shuzi.add("Q");
shuzi.add("K");
ArrayList<String> puke=new ArrayList<String>();
for(String hua:huase) {
for(String shu:shuzi) {
puke.add(hua+shu);
}
}
puke.add("大王");
puke.add("小王");
for(String str:puke) {
System.out.print(str+" ");
} //随机洗牌
Collections.shuffle(puke);
System.out.println();
for(String str:puke) {
System.out.print(str+" ");
}
//发牌
ArrayList<String> player1=new ArrayList<String>();
ArrayList<String> player2=new ArrayList<String>();
ArrayList<String> player3=new ArrayList<String>();
ArrayList<String> dipai=new ArrayList<String>();
for(int i=0;i<54;i++) {
if(i<3) {
dipai.add(puke.get(i));
}
else if(i%3==0) {
player1.add(puke.get(i));
}
else if(i%3==1) {
player2.add(puke.get(i));
}
else if(i%3==2) {
player3.add(puke.get(i));
}
}
//看牌
look(player1);
look(player2);
look(player3);
look(dipai);
} private static void look(ArrayList<String> pai) {
System.out.println();
for(String str:pai) {
System.out.print(str+" ");
}
System.out.println(); } }
0.2版本,增加发牌后排序功能
package com.swift.lianxi; import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /*按照斗地主的规则,完成洗牌发牌的动作
具体规则:
1. 组装54张扑克牌
2. 将54张牌顺序打乱
3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
手中扑克牌从大到小的摆放顺序:大王,小王,2,A,K,Q,J,10,9,8,7,6,5,4,3 准备牌:
完成数字与纸牌的映射关系:
使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
洗牌:
通过数字完成洗牌发牌
发牌:♣
将每个人以及底牌设计为ArrayList<String>,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
存放的过程中要求数字大小与斗地主规则的大小对应。
将代表不同纸牌的数字分配给不同的玩家与底牌。
看牌:
通过Map集合找到对应字符展示。
通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示*/ public class Demo3 { public static void main(String[] args) { String[] huase = { "♥", "♠", "♣", "♠" };
String[] paimian = { "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3" };
// 生成扑克牌
ArrayList<Integer> numbers = new ArrayList<Integer>();
for (int i = 0; i < 54; i++) {
numbers.add(i);
}
Map<Integer, String> poker = new HashMap<Integer, String>();
poker.put(0, "大王");
poker.put(1, "小王");
int i = 2;
for (String pai : paimian) {
for (String hua : huase) {
poker.put(numbers.get(i), hua + "-" + pai);
i++;
}
}
lookMap(poker);
// 打乱扑克牌
Collections.shuffle(numbers);
System.out.println("=============================");
for (Integer n : numbers) {
System.out.print(n + " ");
}
// 三人摸牌留3张底
List<Integer> player1 = new ArrayList<Integer>();
List<Integer> player2 = new ArrayList<Integer>();
List<Integer> player3 = new ArrayList<Integer>();
List<Integer> dipai = new ArrayList<Integer>();
//这里分牌错了,把指定的 扑克分给了指定的人
/* for (int j : numbers) {
if(j==51||j==52||j==53) {
dipai.add(j);
}else {
if (j % 3 == 0) {
player1.add(j);
} else if (j % 3 == 1) {
player2.add(j);
} else if (j % 3 == 2) {
player3.add(j);
}
}
}*/
//应该把第几号的牌给指定的人,第几号牌面洗牌后是不同的
for (int k=0;k<numbers.size();k++) {
if(k==51||k==52||k==53) {
dipai.add(numbers.get(k));
}else {
if (k % 3 == 0) {
player1.add(numbers.get(k));
} else if (k % 3 == 1) {
player2.add(numbers.get(k));
} else if (k % 3 == 2) {
player3.add(numbers.get(k));
}
}
}
// 3名玩家和底牌排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
System.out.println();
System.out.println(player1);
System.out.println(player2);
System.out.println(player3);
Collections.sort(dipai);
// 看牌
System.out.println();
lookPai(poker, player1);
lookPai(poker, player2);
lookPai(poker, player3);
lookPai(poker, dipai); } private static void lookPai(Map<Integer, String> poker, List<Integer> player1) {
for (Integer p : player1) {
System.out.print(poker.get(p) + " ");
}
System.out.println();
} private static void lookMap(Map<Integer, String> poker) {
for (Integer x : poker.keySet()) {
System.out.print(poker.get(x) + " ");
}
System.out.println();
} }
java斗地主扑克 扑克牌 洗牌 发牌 Collection 集合练习的更多相关文章
- 实现斗地主纸牌游戏---洗牌 发牌 看底牌的具体功能------Map集合存储方法 遍历的应用
该Demo只是斗地主的游戏的一部分,实现的斗地主的组合牌 洗牌 发牌 看牌的功能,主要应用Map集合进行练习 package cn.lijun import java.util.ArrayList ...
- C++分享笔记:扑克牌的洗牌发牌游戏设计
笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏.具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌.然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等. ...
- Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)
规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java ...
- JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样
zzzzZZZZ 1.開始还想贴图的 实在太懒了-- 这是一张麻将 package com.lovo; import java.awt.Graphics; import java.awt.Image; ...
- java算法 蓝桥杯 洗牌
问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌.虽然小弱T不怎么会洗牌,但是他却总是输. 渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输.所以小弱T认为自己洗牌不够均匀,就独 ...
- 用C语言实现的扑克牌洗牌程序
一副牌:54张 从0开始排序: 0-12表示黑桃 A 1,2,3,... 10,J,Q,K 13-25表示红桃 A 1,2,3,... 10,J,Q,K 26-38表示草花 A 1,2,3,... ...
- java——斗地主小游戏之洗牌发牌
遇到的问题: 1.int和Integer的区别? 1)Integer是int的包装类,int则是java的一种基本数据类型 . 2)Integer变量必须实例化后才能使用,而int变量不需要 . 3) ...
- C语言实训——扑克牌洗牌程序
说明此程序本来是21点扑克程序的一个被调函数,在这里我单独将它拿出来作为一个小程序. #include<stdio.h> #include<time.h> #include&l ...
- java集合--模拟斗地主发牌洗牌
import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ...
随机推荐
- 性能测试工具LoadRunner29-LR之测试java代码
步骤: 1.安装配置JDK(注意LR11最高支持jdk1.6的版本) 2.JAR包的导入 在LR中创建java Vuser脚本并且保存,我保存的文件夹名称为lr_java 将jar包放到这个文件夹下 ...
- 创建weblogic受管理服务器和安全文件
启动 admin server Oracle/Middleware/user_projects/domains/base_domain/bin> startWebLogic.sh 1创建受管服务 ...
- 硬盘和显卡的访问与控制(三)——《x86汇编语言:从实模式到保护模式》读书笔记03
上一篇博文我们用了很大的篇幅说了加载器,这一篇我们该说说用户程序了. 先看作者的源码吧. ;代码清单8-2 ;文件名:c08.asm ;文件说明:用户程序 ;创建日期:2011-5-5 18:17 ; ...
- spring的IOC和AOP详细讲解
1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时, ...
- Qmake 配置自定义编译过程
Qmake 配置自定义编译过程 需求:动态更换资源文件 在 Windows10 下编写 Qt 项目时,有这样的需求: 程序用到的资源文件可以动态更换而不需要重新编译整个项目 解决方案 0.1 将所有的 ...
- C# 十进制与二进制、十六进制、八进制之间的转换
1.十进制 转 二进制 将十进制数不断地除2,将所有余数倒叙填写,即可得到所需二进制数据. public static string DecimalToBinary(int vDecimal) { / ...
- JSP中的<%%>,<%! %>,<%= %>,<%-- --%>
<% %> 添加java代码 <%! %> 添加java方法 <%= %> 将变量或表达式输出到页面 <%-- - ...
- 《SQLServer删除重复数据的方法》
方法一: declare @max integer,@id integer open cur_rows fetch cur_rows into @id,@max begin set rowcount ...
- 使用UserLock如何实现工作站登陆访问限制
UserLock允许用户限制受保护账户可登陆的工作站/终端.工作站/终端限制可以通过设置或者使用特定的IP范围,计算机名/IP或组织单位实现. 对于每个工作站限制你需要指定所要限制的会话类型(默认情况 ...
- C++ Knowledge series Inheritance & RTTI & Exception Handling
Inheritance The pointer or reference to base class can address/be assigned with any of the classes d ...