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

相關文章
相關標籤/搜索