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 集合练习的更多相关文章

  1. 实现斗地主纸牌游戏---洗牌 发牌 看底牌的具体功能------Map集合存储方法 遍历的应用

    该Demo只是斗地主的游戏的一部分,实现的斗地主的组合牌  洗牌  发牌 看牌的功能,主要应用Map集合进行练习 package cn.lijun import java.util.ArrayList ...

  2. C++分享笔记:扑克牌的洗牌发牌游戏设计

    笔者在大学二年级期间,做过的一次C++程序设计:扑克牌的洗牌发牌游戏.具体内容是:除去大王和小王,将52张扑克牌洗牌,并发出5张牌.然后判断这5张牌中有几张相同大小的牌,是否是一条链,有几个同花等. ...

  3. Java学习笔记34(集合框架八:综合案例:模拟斗地主的洗牌发牌)

    规则: 1.54张扑克牌,有花色 2.顺序打乱,一人一张依次发牌,一人17张,留三张作为底牌 3.看牌:按大小王2A....43的序排列打印 示例: package demo; import java ...

  4. JAVA程序设计(11)-----面对对象0基础设计 麻将 创建麻将牌 然后洗牌 发牌~ 恩 就这样

    zzzzZZZZ 1.開始还想贴图的 实在太懒了-- 这是一张麻将 package com.lovo; import java.awt.Graphics; import java.awt.Image; ...

  5. java算法 蓝桥杯 洗牌

    问题描述 小弱T在闲暇的时候会和室友打扑克,输的人就要负责洗牌.虽然小弱T不怎么会洗牌,但是他却总是输. 渐渐地小弱T发现了一个规律:只要自己洗牌,自己就一定会输.所以小弱T认为自己洗牌不够均匀,就独 ...

  6. 用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,... ...

  7. java——斗地主小游戏之洗牌发牌

    遇到的问题: 1.int和Integer的区别? 1)Integer是int的包装类,int则是java的一种基本数据类型 . 2)Integer变量必须实例化后才能使用,而int变量不需要 . 3) ...

  8. C语言实训——扑克牌洗牌程序

    说明此程序本来是21点扑克程序的一个被调函数,在这里我单独将它拿出来作为一个小程序. #include<stdio.h> #include<time.h> #include&l ...

  9. java集合--模拟斗地主发牌洗牌

    import java.util.*; /** * @Date: 2020/6/17 19:53 */public class Test04 { public static void main(Str ...

随机推荐

  1. CAD安装失败怎样卸载CAD 2013?错误提示某些产品无法安装

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  2. Java异常处理学习

    今天才开通了博客园的博客,希望可以记录自己学习的点点滴滴.最近去处理了一些私人事情,有点烦人,希望自己不要被这些破事所影响. 最近在看马士兵老师的Java基础的视频,(中断了一周)发现本科时候的胡老师 ...

  3. Ubuntu 16.04下安装Charles抓包工具

    Charles是一个跨平台的抓包工具,虽然没有Fiddler做的这么完美,但是也算是另一个选择. 下载: https://www.charlesproxy.com/download/ 注册: http ...

  4. rsync+inotify实现数据的实时同步更新

    rsync可以实现触发式的文件同步,但是通过crontab守护进程方式进行触发,同步的数据和实际数据会有差异,而inotify可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步,这样 ...

  5. php函数内不能访问函数外的变量原因

    执行如下代码: $i = 10; function my(){ echo $i; } my(); xdebug显示是:Undefined variable 以前也知道有这个问题存在,即函数内部不可以访 ...

  6. 用 JS 做一个数独游戏(二)

    用 JS 做一个数独游戏(二) 在 上一篇博客 中,我们通过 Node 运行了我们的 JavaScript 代码,在控制台中打印出来生成好的数独终盘.为了让我们的数独游戏能有良好的体验,这篇博客将会为 ...

  7. php7.0.24-nts配置步骤

    php-cgi.exe文件运行 php-cgi.exe -b 127.0.0.1:9000 -c D:/myphp2017/php7-nts/php.ini nginx命令 启动 start ngin ...

  8. 【转】浅谈https\ssl\数字证书

    转载请注明出处:http://www.cnblogs.com/P_Chou/archive/2010/12/27/https-ssl-certification.html 全球可信的SSL数字证书申请 ...

  9. HttpFlexSession注册失败的怪问题

    web.xml中已经注册了HttpFlexSession <listener> <listener-class>flex.messaging.HttpFlexSession&l ...

  10. xmlDemo4j解析

    package lianxi; import java.util.Iterator;import java.util.List;import java.io.File;import java.io.F ...