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 ...
随机推荐
- Unity Transform
public class PlayerControll : MonoBehaviour { Transform playerTransform; Animation playerAnimation; ...
- 为什么CPU缓存会分为一级缓存L1、L2、L3?有什么意义?
https://baijiahao.baidu.com/s?id=1598811284058671259&wfr=spider&for=pc 简介:CPU缓存是CPU一个重要的组成部分 ...
- PyCharm5 破解汉化
作者博文地址:https://www.cnblogs.com/liu-shuai/ 破解: 将下列序列号复制到软件激活界面即可破解. 43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0 ...
- (转)linux route命令深入浅出与实战案例精讲
linux route命令深入浅出与实战案例精讲 http://blog.51cto.com/oldboy/1119453 深入浅出之-route命令实战使用指南 http://blog.51cto. ...
- 服务间调用--feign跟ribbon
微服务一般来说当然是多服务多实例的,那么这些服务之间如何相互调用呢?spring cloud之前我们用dubbo,把服务开放出来,在xml配好后就可以像调用本地service一样调用其它模块的服务了: ...
- REST与DDD
之前在为什么要使用MVC+REST+CQRS架构我曾经提出DDD是核心,REST是壳的观点,我想在这里详细谈谈我的思路. 今天正好看看到老外一篇博文Why REST is so important:按 ...
- web子项目的路径问题
http://baidu.com/userms/ userms是一个子应用程序,项目中使用的路径 /content/css/.. 从http://baidu.com/ 开始 ~/content/ ...
- hystrix应用介绍(三)
hystrix提供了两种隔离策略:线程池隔离和信号量隔离.hystrix默认采用线程池隔离. 1.线程池隔离 不同服务通过使用不同线程池,彼此间将不受影响,达到隔离效果. 例如: 我们可以通过andT ...
- The eleventh day
What's the damage? Thanks so much for fixing the break on my car . What's the damage for the work yo ...
- IntelliJ、ReSharper 4折 加入慧都“惊喜惠”
慧都2013岁末回馈惊喜不断!著名的软件开发公司JetBrains旗下所有产品加入"惊喜惠"活动环节, JAVA IDE——IntelliJ IDEA,.NET效率工具集——ReS ...