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

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. lazyload 分页加载

    http://www.neoease.com/lazy-load-jquery-plugin-delay-load-image/ echo $d['pic']; ?>" src=&qu ...

  2. PHP安装pthreads多线程扩展教程[windows篇]

    from:http://blog.csdn.net/aoyoo111/article/details/19020161 一.判断PHP是ts还是nts版 通过phpinfo(); 查看其中的 Thre ...

  3. hihocoder 1236(2015北京网络赛 J题) 分块bitset乱搞题

    题目大意: 每个人有五门课成绩,初始给定一部分学生的成绩,然后每次询问给出一个学生的成绩,希望知道在给定的一堆学生的成绩比这个学生每门都低或者相等的人数 因为强行要求在线查询,所以题目要求,每次当前给 ...

  4. iOS图片攻略之:有3x自动生成2x 1x图片

       关键字:Xcode插件,生成图片资源 代码类库:其他(Others) GitHub链接:https://github.com/rickytan/RTImageAssets   本项目是一个 Xc ...

  5. jQuery 元素遍历

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. AS的快捷键

    Ctrl+Shift+Alt+N 查找类中的方法或变量 Ctrl+P 方法参数提示 Alt+Insert 生成代码(如get,set方法,构造函数等) 删除导入多余的包Ctrl+Alt+o 提取局部变 ...

  7. 转 Learning To Rank之LambdaMART的前世今生

    http://blog.csdn.net/huagong_adu/article/details/40710305

  8. POJ 1185 炮兵阵地(经典的状态压缩DP)

    题意:中文题. 思路,经典的状态压缩题目. 由于列长比较小,我们可以以行为阶段用状态压缩来做. 由于攻击只占两个格,这样从行的角度看,第i行的炮兵只与前i-1和前i-2行有关系.这样如果用j,k,l分 ...

  9. (转) Tomcat部署Web应用方法总结

    原文:http://blog.csdn.net/yangxueyong/article/details/6130065 Tomcat部署Web应用方法总结 分类: Java web2011-01-11 ...

  10. select multiple images in Android Gallery

    http://stackoverflow.com/questions/18520976/all-properties-of-intent-putextra-to-crop-image-in-andro ...