012 出牌显示

    玩家出了一手牌,咱们的游戏确定是须要将其显示出来的。无论是给哪一个玩家看,显示出来是必须的,并且得至关的显眼,最好是对每种牌型都提供一种对应的显示方式。固然,目前还不考虑语音方面的设计。
java

    如何才能针对不一样的牌型以不一样的方式显示出来?答案很简单,先重构一下HandCard及其子类,还有就是给HandCardType添加新属性。具体修改以下:
ide

1. HandCard添加了新方法设计

/**
	 * 手牌描述
	 * @return
	 */
	public abstract String getDescribe();

2.HandCardType添加了新属性code

/** 双王描述*/
	public static final String DOUBLE_KING_DESC = "doubleKingDesc";
	/** 四个,炸弹描述 */
	public static final String BOMB_DESC = "bombDesc";
	/** 单牌描述 */
	public static final String A_DESC = "aDesc";
	.....

3.HandCard子类实现了getDescribe方法,例如类A
继承

@Override
	public String getDescribe() {
		return HandCardType.A_DESC;
	}

    经过上面的重构,咱们就能够判断一手牌的牌型了,新建一个DeskView桌面视图类,主要功能就是显示玩家刚出的一手牌。而后用策略模式实现手牌显示模块,咱们定义了一个接口,代码以下
接口

/**
 * <p>Title: IHandCardShow.java</p>
 * <p>Description:手牌显示接口 </p>
 * <p>Copyright: Copyright (c) 2007</p>
 * @author Tunie 
 * @date 2014年9月23日
 * @version 1.0
 */
public interface IHandCardShow {
	void show(Graphics g);
}

只须要往show中传递一个g实例便可,手牌的显示就交给了实现IHandCardShow接口的子类。目前只提供了一种显示方式,这种方式在一个HandCardShow抽象类中实现,咱们看下HandCardShow类代码游戏

/**
 * <p>Title: HandCardShow.java</p>
 * <p>Description: 手牌显示父类</p>
 * <p>Copyright: Copyright (c) 2007</p>
 * @author Tunie 
 * @date 2014年9月23日
 * @version 1.0
 */
public abstract class HandCardShow implements IHandCardShow {

	protected List<CardView> cardViews;
	
	public HandCardShow() {
		cardViews = new ArrayList<CardView>();
	}

	public void show(Graphics g) {
		cardViews.clear();
		List<Card> cards = Judger.handCard.getCardGroup().getCardList();
		CardView cardView;
		for(int j = 0; j < cards.size(); j ++ ){ 
			cardView = new CardView(cards.get(j));
			cardViews.add(cardView);
		}
		doShow(g);
	}

	protected void doShow(Graphics g) {
		doShow(g, 40, 40);
	}
	
	/**
	 * 在一条直线上显示
	 * @param g
	 * @param gap
	 */
	protected void doShow(Graphics g, int gap , int paddingTop) {
		Graphics2D graphics2d = (Graphics2D) g;
		int width = CardView.DEFAULT_WIDTH + (cardViews.size() - 1) * gap;
		BufferedImage image = null;
		
		if(DeskView.DEFAULT_WIDTH < width ) {
			gap -= (width - DeskView.DEFAULT_WIDTH - 20)/cardViews.size();
		}
		width = CardView.DEFAULT_WIDTH + (cardViews.size() - 1) * gap;
		int imageX = (DeskView.DEFAULT_WIDTH - width) / 2;
		
		graphics2d.translate(imageX, paddingTop);
		for (int j = 0; j < cardViews.size(); j++) {
			image = cardViews.get(j).getImage();
			graphics2d.drawImage(image, 0, 0, image.getWidth(),
					image.getHeight(), null);
			graphics2d.translate(gap, 0);
		}
	}
}

而后全部的牌型显示子类继承这个抽象类便可。  ip

该说的都差很少说完了,最后将效果图传上来让你们瞧瞧,就是一种叫作炸弹带双对的牌型。get

相关文章
相关标签/搜索