题目就不用介绍了,网上都有。(Random我在这里使用的是我自己写的一个随机类,如果想要更好的效果可以使用java.util.Random这个类,具体方法一样)
标记(修改),当前的错误: |
1 一盒扑克牌使用了组成关系,是由许多张扑克牌构成的(部分),同时它也包含【行为】取出所有的扑克牌。----不要盲目考虑static的事情和性能,先把问题描述清楚。
2 人取来的永远是一【盒】牌,而不是散装的牌。切牌和亮牌则一定是散装的牌。
|
项目:
模拟现实当中的洗牌
需求:
1. 一副牌
2. 玩家进行洗牌
功能列表:
洗牌
用例列表:
用例:
洗牌
|
1. 玩家拿到一副牌
2. 玩家开始洗牌
3. 玩家把牌拿出来 |
场景:
1、2、3 |
Poker
point:Point(点数)
color:Color(花色) |
Point
One,Two |
Color
Tao,Xin,Mei,Fang |
PokerBox
allpokers:List
changePoker(firstIndex:int,lastIndex:int)
length():int |
Player
cutPoker(pokerBox:PokerBox) |
|
public class Test {
/** *//**
* 业务入口
*/
private void service() {
PokerBox pokerBox = new PokerBox();
Player player = new Player();
player.cutPoker(pokerBox);
pokerBox.testPrint();
}
public static void main(String[] args) {
new Test().service();
}
}
花色:
/** *//**
* 扑克牌花色
*
* @author MinLi
*
*/
public enum Color {
Tao, Xin, Mei, Fang
}
点数:
/** *//**
* 扑克牌点数
*
* @author MinLi
*
*/
public enum Point {
One, Two, Three, Four, Five, Six, Seven
}
扑克牌:
public class Poker {
/** *//** 花色 */
private Color color;
/** *//** 点数 */
private Point point;
/** *//**
*
* @param color颜色
* @param point点数
*/
public Poker(Color color, Point point) {
this.color = color;
this.point = point;
}
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
public String toString() {
return color + " " + point;
}
}
一副扑克牌:
import java.util.ArrayList;
import java.util.List;
/** *//**
* 一副牌
*
* @author MinLi
*
*/
public class PokerBox {
/** *//** 52张牌 */
private List<Poker> allPoker = new ArrayList<Poker>();
/** *//** 每张牌的索引 */
private int[] pokerIndexs;
public PokerBox() {
initPoker();
initPokerIndex();
}
/** *//**
* 初始化所有牌
*/
private void initPoker() {
for (Color color : Color.values()) {
for (Point point : Point.values()) {
allPoker.add(new Poker(color, point));
}
}
}
/** *//**
* 初始化所有牌的索引
*/
private void initPokerIndex() {
int total = allPoker.size();
pokerIndexs = new int[total];
int value = 0;
for (int count = 0; count < total; count++) {
pokerIndexs[count] = value;
value++;
}
}
/** *//**
* 两张牌的交互
*/
public void changePoker(int firstIndex, int lastIndex) {
int firstValue = pokerIndexs[firstIndex];
int lastValue = pokerIndexs[lastIndex];
pokerIndexs[firstIndex] = lastValue;
pokerIndexs[lastIndex] = firstValue;
}
/** *//**
* 取出牌数
*
* @return
*/
public int length() {
return allPoker.size();
}
/** *//**
* 打印所有扑克牌
*/
public void testPrint() {
for (int index : pokerIndexs) {
Poker poker = allPoker.get(index);
Point point = poker.getPoint();
Color color = poker.getColor();
System.out.println(color + " " + point);
}
}
}
发牌人:
import java.util.Random;
/** *//**
* 玩家
*
* @author MinLi
*
*/
public class Player {
/** *//**
* 切牌
*
* @param pokerBox
*/
public void cutPoker(PokerBox pokerBox) {
Random rand = new Random();
// 对所有的扑克牌进行前后调换
int total = pokerBox.length() - 1;
int currentTotal = pokerBox.length();
for (int count = 0; count < total; count++) {
int firstIndex = rand.nextInt(currentTotal);
int lastIndex = currentTotal - 1;
pokerBox.changePoker(firstIndex, lastIndex);
currentTotal--;
}
}
}