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 ...
随机推荐
- GO WEB
1.第一个坑的就是,错误信息如下: 比较常见的错误“Connection reset by peer”,该错误和“Connection reset”是有区别的: 服务器返回了“RST”时,如果此时客户 ...
- 8597 石子划分问题 dpdp,只考虑第一次即可
8597 石子划分问题 时间限制:500MS 内存限制:1000K提交次数:155 通过次数:53 题型: 编程题 语言: G++;GCC;VC Description 给定n个石子,其重量分别 ...
- jQuery的实现编码,解决特殊字符 <script> "
function htmlEncode(value){ if (value) { return jQuery('<div />').text(value).html(); } else { ...
- 解决MyEclipse报errors running builder ‘javascript validator’ on project
今天导入项目的时候,报了以下错误 MyEclipse测到功能代码变化(保存动作触发)就报错: errors running builder ‘javascript validator’ on proj ...
- genymotion安装及使用出现的问题
此处总结genymotion出现的问题. 1)安装好genymotion后,新建一个模拟器.去下载的时候报错 Unable to create Virtual Device: Connection t ...
- 小程序 页面到详情的id传递
比如电影列表页跳转到电影详情页 在movie.js获取movieId; processDoubanData: function (moviesDouban, settedKey, categoryTi ...
- 《Google软件测试之道》之学习笔记01
Google软件测试介绍 软件测试团队->工程生产力(Engineering Productivity) http://googletesting.blogspot.com/2011/01/ho ...
- Redis入门--(二)Jedis的入门
Jedis相应的jar包 编写一段程序来测试一下 1.新建一个Java的项目 2.引入jedis开发包 3.将包添加到构建路径中 4.创建一个测试类 5.创建一个Jedis的单实例的测试
- 从零开始的全栈工程师——JS面向对象(初篇)
面向对象编程 面向对象编程是用抽象方式创建基于现实世界模型的一种编程模式.它使用先前建立的范例,包括模块化,多态和封装几种技术.今天,许多流行的编程语言(如Java,JavaScript,C#,C+ ...
- git 推送代码到远程端
git init git add . git commit -m "first commit" git remote add origin "地址" git p ...