题目就不用介绍了,网上都有。(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--;
}
}
}