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

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. 使用ContentProvider管理多媒体-----查看多媒体数据中的所有图片

    import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; impo ...

  2. 嵌套 click 第二层 click会叠加 导致 触发 多次

    $("#appearHiddenDiv").click(function(){ $("#hiddenDiv").css({display:"block ...

  3. TCP/IP 某些最常见的错误原因码 (errno)列表

    对于在基于 UNIX 的环境中的 TCP/IP 用户,下表列出了某些最常见的错误原因码 (errno).它不是完整的错误列表.可以在文件 /usr/include/sys/errno.h 中找到 Er ...

  4. Section 1.4 Packing Rectangles

    本来是USACO Training的1.4.1的,但是介于今早过了食物链想起了这道题实在是太怨念了,翻出自己写的AC程序居然有5KB!! 思路很简单,枚举,而且就图中的六种情况.但是第六种变化状况太多 ...

  5. Allow windows service to "Interact with desktop"

    Typically, services are designed to run unattended without any UI with any need to interact with des ...

  6. Struts2 和 spring mvc的 迭代标签常用属性对比

    <s:iterator value="#users" var="u" status="st"> <c:forEach  i ...

  7. Ogre骨骼动画

    转自:http://blog.csdn.net/yanonsoftware/article/details/1281516 OGRE的基本动画控制是很简单的,设置一个动画的操作是这样: // Set ...

  8. struts2DMI(动态方法调用)

    DMI(Dynamic Method Invoke)即动态,是strus2的一个特性,我们知道,在最开始学习strus2时,往往一个action中只有一个excute方法,比如说add,delete, ...

  9. 自己搭建Wifi Pineapple Mark V

    创业搞得自己很累,不过一切都是值得的.抽空写下文章,确实好久未更新了. 前段时间由于项目需要,所以就折腾了下wifi pineapple.时间间隔有点久,根据回忆记录下. 淘宝货:TP-Link TL ...

  10. iOS 获取IP地址

    一.获取本机IP地址 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 #import <ifadd ...