--> 这一次要封装得狠一点...

package com.xm.ddz;

// 每一张牌的属性
public class Card { private String flowerColor;
private String number;
private int level; public int compareTo(Card c) {
return this.level - c.getLevel();
} public String getFlowerColor() {
return flowerColor;
} public void setFlowerColor(String flowerColor) {
this.flowerColor = flowerColor;
} public String getNumber() {
return number;
} public void setNumber(String number) {
this.number = number;
} public int getLevel() {
return level;
} public void setLevel(int level) {
this.level = level;
} @Override
public String toString() {
return "Card [flowerColor=" + flowerColor + ", number=" + number + ", level=" + level + "]";
} public Card(String flowerColor, String number, int level) {
this.flowerColor = flowerColor;
this.number = number;
this.level = level;
} public Card() {
} }

--> Poker 类照样存储54张牌 --> 但是每张牌都有一个 Level 值来确定它在扑克牌中的顺序

package com.xm.ddz;

import java.util.ArrayList;
import java.util.List; public class Poker {
private String[] flowerColors = { "♠", "♥", "♣", "♦" };
private String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" };
private String[] boss = { "小王", "大王" }; private List<Card> list = new ArrayList<>(); public List<Card> getList() {
return list;
} public Poker() {
for (int i = 0; i < flowerColors.length; i++) {
for (int j = 0; j < numbers.length; j++) {
list.add(new Card(flowerColors[i], numbers[j], j));
}
}
list.add(new Card("黑", boss[0], 99));
list.add(new Card("红", boss[1], 100));
} public void printInfo() {
for (Card c : list) {
System.out.println(c.toString());
}
} }

--> Player 类用来接收发到手上的牌

package com.xm.ddz;

import java.util.ArrayList;
import java.util.List; public class Player { private String name;
private List<Card> list = new ArrayList<>(); public Player(String name) {
super();
this.name = name;
} /**
* 玩家 接收 卡片
*
* @param c
*/
public void addCard(Card c) {
list.add(c);
} /**
* 升序排列
*/
public void orderBy() {
for (int i = 0; i < list.size() - 1; i++) {
for (int j = 1; j < list.size() - i; j++) {
if (list.get(j - 1).compareTo(list.get(j)) > 0) {
final Card c = list.get(j);
list.set(j, list.get(j - 1));
list.set(j - 1, c);
}
}
}
} @Override
public String toString() {
orderBy();
StringBuilder sb = new StringBuilder();
sb.append("\n******************" + name + "*********************\n");
for (int i = 0; i < list.size(); i++) {
sb.append(list.get(i).toString());
sb.append("\n");
}
sb.append("***************************************");
return sb.toString();
} }

--> DealPoker 类执行发牌操作

package com.xm.ddz;

import java.util.List;
import java.util.Random; public class DealPoker { private Player[] players;
private Poker p; public DealPoker(Player[] players, Poker p) {
this.players = players;
this.p = p;
} /**
* 发牌
*/
public void dispatchCard() {
final List<Card> list = p.getList();
Random r = new Random();
int i = 0;
while (list.size() > 0) {
int index = r.nextInt(list.size());// 随机从0-list.size()(不包含list.size())的Int值
players[i++ % players.length].addCard(list.remove(index));
} for (int j = 0; j < players.length; j++) {
System.out.println(players[j].toString()); } } }

--> Test 类测试

package com.xm.ddz;

public class Test {

    public static void main(String[] args) {
Poker poker = new Poker();
Player[] players = { new Player("凤姐"), new Player("春哥"), new Player("老王") };
DealPoker dealPoker = new DealPoker(players, poker); dealPoker.dispatchCard(); } }

--> 看起来比上次好多了,不过还是没有实现抢地主啊...

Java-->发牌流程修改版的更多相关文章

  1. Java-->简单的斗地主发牌流程

    package com.dragon.java.hwddz; import java.util.ArrayList; import java.util.HashMap; import java.uti ...

  2. [C语言]声明解析器cdecl修改版

    一.写在前面 K&R曾经在书中承认,"C语言声明的语法有时会带来严重的问题.".由于历史原因(BCPL语言只有唯一一个类型——二进制字),C语言声明的语法在各种合理的组合下 ...

  3. Java的流程控制和C++的异同

    Java的流程控制和C++基本相似 现将不同的地方总结一下,以便快速掌握. Java的特殊流程控制的特殊部分: 1.顺序结构  -- 没有区别 2.分之结构  -- 没有区别 3.循环结构 1> ...

  4. Medoo个人修改版

    Medoo是一款轻量级的php数据库操作类,下面不会介绍Medoo的使用方法,想学习Medoo请前往官网自学:http://medoo.in/ 在接触Medoo之前,一直是用自己写的php数据库操作类 ...

  5. Android 仿美团网,大众点评购买框悬浮效果之修改版

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17761431),请尊重他人的辛勤劳动成果,谢谢! 我之前写 ...

  6. 黄聪:WordPress图片插件:Auto Highslide修改版(转)

    一直以来很多人都很喜欢我博客使用的图片插件,因为我用的跟原版是有些不同的,效果比原版的要好,他有白色遮罩层,可以直观的知道上下翻图片和幻灯片放映模式.很多人使用原版之后发现我用的更加帅一些,于是很多人 ...

  7. sqm(sqlmapGUI) pcat修改版

    sqlmap是一款开源的注入工具,支持几乎所有的数据库,支持get/post/cookie注入,支持错误回显注入/盲注,还有其他多种注入方法. 支持代理,指纹识别技术判断数据库 .而sqm(sqlma ...

  8. 转载:Eclipse+Spket插件+ExtJs4修改版提供代码提示功能[图]

    转载:Eclipse+Spket插件+ExtJs4修改版提供代码提示功能[图] ExtJs是一种主要用于创建前端用户界面,是一个基本与后台技术无关的前端ajax框架.功能丰富,无人能出其右.无论是界面 ...

  9. JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程

    JNI/NDK Java调用C/C++前言  通过第三篇文章讲解在实际的开发过程中Java层调用C/C++层的处理流程.其实我们在很大的业务里也需要C/C+ +层去调用Java层,这两层之间的相互调用 ...

随机推荐

  1. Oracle练习题20~33

    20.查询score中选学多门课程的同学中分数为非最高分成绩的记录. 21. 查询成绩高于学号为“109”.课程号为“3-105”的成绩的所有记录. 22.查询和学号为108的同学同年出生的所有学生的 ...

  2. 修改PE文件的入口函数OEP

    修改入口函数地址.这个是最省事的办法,在原PE文件中新增加一个节,计算新节的RVA,然后修改入口代码,使其指向新增加的节.当然,如果.text节空隙足够大的话,不用添加新节也可以. BOOL Chan ...

  3. php base64_decode 解码方法

    <?php header('Content-Type:text/html;charset=utf-8'); function encode_file_contents($filename) { ...

  4. 走进AngularJs(七) 过滤器(filter) - 吕大豹

    时间 2013-12-15 16:22:00  博客园-原创精华区 原文  http://www.cnblogs.com/lvdabao/p/3475426.html 主题 AngularJS 过滤器 ...

  5. Java中的深拷贝和浅拷贝

    1.浅拷贝与深拷贝概念 (1)浅拷贝(浅克隆) 浅拷贝又叫浅复制,将对象中的所有字段复制到新的对象(副本)中.其中,值类型字段(java中8中原始类型)的值被复制到副本中后,在副本中的修改不会影响到源 ...

  6. STL 自学

    STL 一.vector动态数组 1 包含头函数 #include<vector> 2 函数的声明: vector<int> v; vector<int> v[ma ...

  7. 使用jsTree动态加载节点

    因为项目的需要,需要做一个树状菜单,并且节点是动态加载的,也就是只要点击父节点,就会加载该节点下的子节点. 大致的效果实现如下图: 以上的实现就是通过jsTree实现的,一个基于JQuery的树状菜单 ...

  8. 踏着前人的脚印学Hadoop——结构、重点

    HDFS作为一个分布式文件系统,是所有这些项目的基础.分析好HDFS,有利于了解其他系统.由于Hadoop的HDFS和MapReduce是同一个项目,我们就把他们放在一块,进行分析. 如果把整个had ...

  9. 每天学一点JAVA

    1.JAVA的反射机制 在运行时判断任意一个对象所属的类:在运行时构造任意一个类的对象:在运行时判断任意一个类所具有的成员变量和方法:在运行时调用任意一个对象的方法:生成动态代理. 2.关于ARRAY ...

  10. 【python】import 模块、包、第三方模块

    xx.py文件,称为模块(module),把不同模块归整到一起的文件夹,叫做包(package) 不同包下的模块可以重名,但是都不能和系统内建模块重名 包里面一定要有个__init__.py文件,否则 ...