package ch8;

import java.util.*;

/**
* Created by Jiqing on 2016/11/27.
*/
public class ShowHand { // 梭哈
// 定义该游戏最多支持多少个玩家
private final int PLAY_NUM = 5;
// 定义扑克牌的花色和数值
private String[] types = {"方块","草花","红心","黑桃"};
private String[] values= {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
// cards 扑克牌
private List<String> cards = new LinkedList<String>();
// 定义所有玩家
private String[] players = new String[PLAY_NUM]; // 玩家手上的扑克牌
private List<String>[] playersCards = new List[PLAY_NUM]; /**
* 初始化扑克牌,放入52张扑克牌
* 通过shuffle随机排序
*/
public void initCards() {
for(int i = 0 ; i < types.length ; i ++) {
for (int j = 0;j<values.length;j++) {
cards.add(types[i]+values[j]);
}
}
// 随机排列
Collections.shuffle(cards);
} /**
* 初始化玩家
*/
public void initPlayer(String...names) {
if (names.length > PLAY_NUM || names.length <2) {
System.out.println("玩家数量不对");
return;
} else {
for (int i = 0;i<names.length;i++){
players[i] = names[i];
}
}
} /**
* 初始化玩家手中牌
*/
public void initPlayerCards() {
for (int i = 0;i<players.length;i++) {
if (players[i] != null && !players[i].equals("")) {
playersCards[i] = new LinkedList<String>();
}
}
} /**
* 输出全部扑克
*/
public void showAllCards() {
for (String card :cards) {
System.out.println(card);
}
} /**
* 派发扑克
* @param first最先派给谁
*/
public void deliverCard(String first) {
int firstPos = ArrayUtils.search(players,first);
// 依次给该玩家之后的人发牌
for (int i = firstPos;i<PLAY_NUM;i++) {
if (players[i] != null) {
playersCards[i].add(cards.get(0)); // 获取第一张牌
cards.remove(0);// 移除第一张牌
}
} // 依次给玩家之前的人发牌
for (int i = 0 ; i<firstPos;i++) {
if (players[i] != null) {
playersCards[i].add(cards.get(0));
cards.remove(0);
}
}
} /**
* 输出玩家手上的扑克牌
*
*/
public void showPlayerCards() {
for (int i=0;i<PLAY_NUM;i++) {
if (players[i] != null) {
System.out.println(players[i] + ":");
for (String card:playersCards[i]) {
System.out.print(card+"\t");
}
}
System.out.print("\n");
} } public static void main(String[] args) {
ShowHand sh = new ShowHand();
sh.initPlayer("电脑","纪庆");
sh.initCards();
sh.initPlayerCards(); sh.showAllCards();
System.out.println("--------------");
sh.deliverCard("纪庆");
sh.showPlayerCards(); sh.deliverCard("电脑");
sh.showPlayerCards();
} } class ArrayUtils
{
/**
* 定义一个工具方法,工具方法从字符串数组中找到对应的字符串元素的位置
* @param array 搜索的数组
* @param target 搜索的字符串
* @return 目标字符串出现的位置,-1表明找不到
*/
public static int search(String[] array, String target)
{
for (int i = 0 ; i < array.length ; i++ )
{
if (array[i] != null && array[i].equals(target))
{
return i;
}
}
return -1;
}
}

数据结构与算法的完美结合

输出结果:

黑桃3

草花K

草花10

黑桃2

黑桃9

红心9

草花9

方块2

方块6

草花2

黑桃7

方块3

黑桃10

方块K

黑桃4

草花8

红心3

草花7

黑桃5

黑桃K

红心K

草花6

红心A

红心5

红心J

红心7

方块J

方块A

黑桃8

方块4

红心6

草花J

草花Q

方块8

方块7

黑桃J

方块5

红心4

草花3

黑桃6

红心2

红心10

红心8

草花A

红心Q

草花4

黑桃Q

方块10

草花5

黑桃A

方块9

方块Q

电脑:

草花K

纪庆:

黑桃3

电脑:

草花K 草花10

纪庆:

黑桃3 黑桃2

Java中List、Collections实现梭哈游戏的更多相关文章

  1. python 中的sort 和java中的Collections.sort()函数的使用

    x=[1,2,3] x.sort()对的,x这个都变了 y=x.sort()错误 y=sorted(x)对的,x拍好序的一个副本 python中用匿名函数和自定义函数排序:(很奇怪的是比较函数返回的是 ...

  2. 【Java】Java中的Collections类——Java中升级版的数据结构【转】

    一般来说课本上的数据结构包括数组.单链表.堆栈.树.图.我这里所指的数据结构,是一个怎么表示一个对象的问题,有时候,单单一个变量声明不堪大用,比如int,String,double甚至一维数组.二维数 ...

  3. Java中利用随机数的猜拳游戏

    Java中利用随机数的猜拳游戏,实现非常简单,重难点在于随机数的产生. 首先GameJude类是用于判断输赢的一个类: package testGame; public class GameJudge ...

  4. Java中的Collections类

    转载:https://blog.csdn.net/yangxingpa/article/details/80515963 从[Java]Java中的Collections类——Java中升级版的数据结 ...

  5. 说出几点 Java 中使用 Collections 的最佳实践?

    这是我在使用 Java 中 Collectionc 类的一些最佳实践: a)使用正确的集合类,例如,如果不需要同步列表,使用 ArrayList 而不是 Vector. b)优先使用并发集合,而不是对 ...

  6. Java中使用Collections.sort()方法对数字和字符串泛型的LIst进行排序

    在List的排序中常用的是Collections.sort()方法,可以对String类型和Integer类型泛型的List集合进行排序. 首先演示sort()方法对Integer类型泛型的List排 ...

  7. 在Java中使用Collections.sort 依据多个字段排序

    一.如何使用Collections工具类进行排序 使用Collections工具类进行排序主要有两种方式: 1.对象实现Comparable接口,重写compareTo方法 /** * @author ...

  8. Java面试题:Java中的集合及其继承关系

    关于集合的体系是每个人都应该烂熟于心的,尤其是对我们经常使用的List,Map的原理更该如此.这里我们看这张图即可: 1.List.Set.Map是否继承自Collection接口? List.Set ...

  9. 软件工程实践作业2 --梭哈游戏(java) 实践报告

    一,题目简介: 1.创建一副扑克牌 7------k 加入到集合对象中2.对扑克牌洗牌3.定义参与游戏的玩家的人,通过键盘输入,限定人数2-54.人数符合要求继续执行,不符合退出5.对玩家发牌,每个人 ...

随机推荐

  1. c#之xml

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...

  2. easyui tab 关闭

    <div id="mm" class="easyui-menu" style="width:150px;">        &l ...

  3. Unity脚本在层级面板中的执行顺序测试3

    断断续续的写了3篇,以后有时间可以做成一个系列了 前面2篇测试了GameObject的顺序,以及Awake和OnEnable的时机: Unity脚本在层级面板中的执行顺序测试1 http://www. ...

  4. 【转】Linus:利用二级指针删除单向链表

    原文作者:陈皓 原文链接:http://coolshell.cn/articles/8990.html 感谢网友full_of_bull投递此文(注:此文最初发表在这个这里,我对原文后半段修改了许多, ...

  5. Android图形系统之Surface、SurfaceView、SurfaceHolder及SurfaceHolder.Callback之间的联系

    1.Surface Surface extends Objectimplements Parcelable java.lang.Object    ↳ android.view.Surface Cla ...

  6. Duilib 鼠标在某控件例如按钮上悬停后,对目标控件操作

    其实对WM_MOUSEHOVER消息的处理,因为WindowImplBase基类中对此消息未处理,所以在自己的窗口类中实现: .h文件中加入 LRESULT OnMouseHover( UINT uM ...

  7. Struts2的处理结果(一)——处理结果的配置

    Struts2的处理结果(一) --处理结果的配置 1.处理结果 在Action处理完用户请求之后,并不会直接生成响应,而是把一个字符串返回给Struts2框架,再由框架选择此字符串结果对应的物理视图 ...

  8. xtrabackup 安装、备份、还原及错误处理 教程

    xtrabackup 是MYSQL的一个备份软件 Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个 ...

  9. SUSE Linux Enterprise Server 设置IP地址、网关、DNS

    说明: ip:192.168.21.172 子网掩码:255.255.255.0 网关:192.168.21.2 dns:8.8.8.8 8.8.4.4 1.设置ip地址 vi /etc/syscon ...

  10. Latex中关于参考文献的一些经验

    又到了继春节后的又一个投稿高峰,在Latex中写参考文献时经常会出现这样那样的问题,而且出版社不同比如IEEE与Elaver,需要引入的包也有不同.在search解决方案时,发现一篇有用的博文,转载一 ...