李敏  
日历
<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567
统计
  • 随笔 - 1
  • 文章 - 40
  • 评论 - 4
  • 引用 - 0

导航

常用链接

留言簿(1)

文章分类

文章档案

相册

收藏夹

它山之石

聚贤庄

搜索

  •  

最新评论

 

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

    }

}

 

posted on 2009-03-17 23:33 李敏 阅读(158) 评论(0)  编辑  收藏 所属分类: 算法

只有注册用户登录后才能发表评论。


网站导航:
 
 
Copyright © 李敏 Powered by: 博客园 模板提供:沪江博客