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

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. PowerMock使用遇到的问题——1

    遇到问题:再用PowerMock Mock构造方法时,所有语句都可以通过执行,但当最后执行verify语句时却总是出现如下错误:         java.lang.AssertionError:   ...

  2. java.io中流的操作:字节流、字符流

    java.io中流的操作:字节流.字符流(1)使用File类打开一个文件(2)通过字节流或字符流的子类指定输出的位置(3)进行读/写操作(4)关闭输入/输出 1.字节流:主要是byte类型数据,以by ...

  3. 关于jquery html()方法获取带有OBJECT标签的元素内容时,出现“类型不匹配。”的解决办法

    关于jquery html()方法获取带有OBJECT标签的元素内容时,出现“类型不匹配.”的解决办法 解决办法: $("selector").clone().html()

  4. 微信支付调用JSAPI缺少参数:timeStamp

    一般是安卓没问题,苹果会出现这样的问题,弹出下面这样的提示,如果你也是这样,那就恭喜你,现在,你找到解决的方法了 请看红色框框的timeStamp(图片有点小,可以鼠标右键打开图片 查看) 请注意,这 ...

  5. jQuery 中的 Ajax

    jQuery 对 Ajax 操作进行了封装, 在 jQuery 中最底层的方法时 $.ajax(), 第二层是 load(), $.get() 和 $.post(), 第三层是 $.getScript ...

  6. ios 8.4 Xcode6.4 设置LaunchImage图片

    Step1 1.点击Image.xcassets 进入图片管理,然后右击,弹出"New Launch Image" 2.如图,右侧的勾选可以让你选择是否要对ipad,横屏,竖屏,以 ...

  7. HTML特殊符号对应代码

    HTML中的特殊符号所对应代码,收藏使用 符号 HTML 符号 HTML     & & < < > > ⁄ ⁄ " " ¸ ¸ ° ° ½ ...

  8. iOS 使用两个tableview的瀑布流

    代码 悦德财富:https://www.yuedecaifu.com 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 ...

  9. fdisk分区

    查看文件系统: # df -hFilesystem Size Used Avail Use% Mounted on/dev/sda1 20G 1.1G 18G 6% /tmpfs 1.9G 0 1.9 ...

  10. ZOJ 2672 Fibonacci Subsequence(动态规划+hash)

    题意:在给定的数组里,寻找一个最长的序列,满足ai-2+ai-1=ai.并输出这个序列. 很容易想到一个DP方程 dp[i][j]=max(dp[k][i])+1. (a[k]+a[i]==a[j], ...