1.使用枚举类型对一副扑克牌(52张牌,不包括大小王)建模:一副扑克牌有四种花色(Suit):HEART,SPADE,DIAMOND,CLUB;有十三种等级(Rank):

import java.util.EnumMap;
import java.util.EnumSet;

public class EnumSetTest {
    //枚举类型Suit
    enum Suit{"HEART ","SPADE ","DIAMOND ","CLUB "};
    enum Rank{"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
   }

创建2个枚举类型包含这两类实例。

每张扑克牌(Card)对象都会有这两个属性,创建一个带有这两个枚举类型属性的类Card
`package com.Cards.model;

package com.Cards.model;

/**
 * @author Rock Lee
 * @version 2012-10-21 16:51:49
 * @see CardSetting.java
 * @proposal Build A Class Contain All the info for ONE Card in the poker
 * @fix 2012-12-12 13:01:04
 * */
public class Card
{

	private String color = null;
	private String num = null;

	private boolean visible = false;
	private boolean red = false;

	public Card(String color, String num)
	{
		this.color = color;
		this.num = num;

		// if the color is diamond or heart ,then red is true,else false
		if (color.equals(CardSetting.COLOR[CardSetting.INDEX_HEART])
				|| color.equals(CardSetting.COLOR[CardSetting.INDEX_DIAMOND]))
			this.red = true;
		else
			this.red = false;
	}

	/*
	 * 若花色,牌面大小相同,则认为是同一张牌
	 * */
	public boolean equals(Object obj)
	{
		Card anotherCard = (Card) obj;
		return this.color.equals((anotherCard.color))
				&& this.num.equals(anotherCard.num);

	}

	public void setVisiable(boolean visible)
	{
		this.visible = visible;
	}

	public boolean isVisible()
	{
		return visible;
	}

	public boolean isRed()
	{
		return red;
	}

	/*
	 * 1.此方法仅用于 命令行,或调试模式中2.重载了 object的使用方法.在整个列,或者deck suit输出的时候,方便 以字符串的方式拼接
	 */
	public String toString()
	{
		if (this == null)
			return "EMPTY";
		else
		{
			if (this.isVisible())
			{
				return (color + " " + num + " ");
			}

			else
				return "███ ";
		}

	}

	public String getColor()
	{
		return color;
	}

	/* 以数字的方式,返回牌面的大小 */
	public int getNum()
	{
		char ch = num.charAt(0);
		switch (ch)
		{
		case 'A':
			return 1;
		case 'J':
			return 11;
		case 'Q':
			return 12;
		case 'K':
			return 13;
		default:
			return Integer.parseInt(num);
		}

	}

	/* 以String的方式,返回牌面的大小 */
	public String getNumInString()
	{
		return num;
	}
}

初始化扑克牌

public class CardHeap
{
	//这里使用了vector来维护一套 "刚刚从扑克牌盒子里取出的 52张牌"
	private Vector<Card> vector=null;

	public CardHeap()
	{
		this.initialize();
	}

	/*初始化13*4=52张牌*/
	public void initialize()
	{
		vector=new Vector<Card>();
		Card tmp=null;
		for (int i = 0; i < 13; i++)//13 cards in Color Heart
		{
			tmp=new Card(CardSetting.COLOR[CardSetting.INDEX_HEART], CardSetting.NUM[i]);
			tmp.setVisiable(false);
			vector.add(tmp);
		}
		for (int i = 0; i < 13; i++)//13 cards in Color SPADE
		{
			tmp=new Card(CardSetting.COLOR[CardSetting.INDEX_SPADE], CardSetting.NUM[i]);
			tmp.setVisiable(false);
			vector.add(tmp);
		}
		for (int i = 0; i < 13; i++)//13 cards in Color DIAMOND
		{
			tmp=new Card(CardSetting.COLOR[CardSetting.INDEX_DIAMOND], CardSetting.NUM[i]);
			tmp.setVisiable(false);
			vector.add(tmp);
		}
		for (int i = 0; i < 13; i++)//13 cards in Color CLUB
		{
			tmp=new Card(CardSetting.COLOR[CardSetting.INDEX_CLUB], CardSetting.NUM[i]);
			tmp.setVisiable(false);
			vector.add(tmp);
		}
	}


11-26 02:16