博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
012 出牌显示
阅读量:6944 次
发布时间:2019-06-27

本文共 2475 字,大约阅读时间需要 8 分钟。

hot3.png

    玩家出了一手牌,我们的游戏肯定是需要将其显示出来的。不管是给哪个玩家看,显示出来是必须的,而且得相当的显眼,最好是对每种牌型都提供一种对应的显示方式。当然,目前还不考虑语音方面的设计。

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

1. HandCard添加了新方法

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

2.HandCardType添加了新属性

/** 双王描述*/	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桌面视图类,主要功能就是显示玩家刚出的一手牌。然后用策略模式实现手牌显示模块,我们定义了一个接口,代码如下

/** * 

Title: IHandCardShow.java

 * 

Description:手牌显示接口 

 * 

Copyright: Copyright (c) 2007

 * @author Tunie  * @date 2014年9月23日 * @version 1.0 */public interface IHandCardShow { void show(Graphics g);}

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

/** * 

Title: HandCardShow.java

 * 

Description: 手牌显示父类

 * 

Copyright: Copyright (c) 2007

 * @author Tunie  * @date 2014年9月23日 * @version 1.0 */public abstract class HandCardShow implements IHandCardShow { protected List
 cardViews; public HandCardShow() { cardViews = new ArrayList
(); } public void show(Graphics g) { cardViews.clear(); List
 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); } }}

然后所有的牌型显示子类继承这个抽象类即可。  

该说的都差不多说完了,最后将效果图传上来让大家瞧瞧,就是一种叫做炸弹带双对的牌型。

143208_ftPM_2011113.jpg

转载于:https://my.oschina.net/u/2011113/blog/318188

你可能感兴趣的文章
JavaScript 笔记02
查看>>
分享一个前端视频资料的搜索引擎很给力
查看>>
MQ 常见的使用场景
查看>>
Java JDK11基于嵌套的访问控制
查看>>
js经验分享 JavaScript反调试技巧
查看>>
解--头条的算法面试题-圆环开关灯
查看>>
JS中typeof与instanceof的区别
查看>>
Redis 服务器安装
查看>>
前端进击的巨人(七):走进面向对象,原型与原型链,继承方式
查看>>
PAT A1116
查看>>
前嗅ForeSpider教程:配置关键词
查看>>
Android内存泄漏定位、分析、解决全方案
查看>>
DPOS共识机制
查看>>
极限编程 (Extreme Programming) - 发布计划 (Release Planning)
查看>>
【转】初识Node.js和npm
查看>>
微信小程序mpvue项目使用WuxWeapp前端UI组件
查看>>
JavaScript异步基础
查看>>
利用 Pandas 将数据集中的某列文本拆分为多行
查看>>
java分页算法
查看>>
预防cdn链接失效,无缝切换本地文件
查看>>