Swing实现最简单连连看的思路和源码

23 篇文章 0 订阅
国庆闲着没事儿写个连连看,断断续续写了两三天,估计加起来也有8个man hour了。简单记录一下实现流程。

罗马不是一天建成的,从零开始的话还是一步一步走,写一点看一下效果,慢慢东西就出来了。

主要有四个类:主界面,Card,CardHolder,判断卡片是否联通的算法类。
刚开始主要创建主界面、Card和CardHolder:
  • a.先搞个Frame出来
  • b.实现CardHolder和Card,能new出一堆Card来,并且Card记录有自己的位置,自己的value。这里最好用二维数组,刚开始我用的List,结果发现后面写算法不方便。。
  • c.能根据位置把这些Card作为矩形画在Frame上。
  • d.让Card成对出现(其实在new的时候控制下value就行了)
  • e.添加鼠标事件监听,能根据事件点击坐标算出来是哪个Card被点到了,然后设置selectedCard
  • f.实现连接算法(其实是蹲坑时候想到的),根据拐角数算,直连,一个拐角的情况,两个拐角的情况,边缘要特殊处理一下。这一步比较费时间,我写的也不是很好。
  • g.实现重排。刚开始完全没必要在意这些画出来的Card是不是随机的,哪怕都是挨着的也没关系,实现这一步的时候重用一下方法,new Card的时候调用一下就行了。
  • 其他闲杂点,比如加menu,控制消除的card怎么重绘,双缓冲什么的。。。其实主要是功能,软件总有做不完的细节和需求的,慢慢改。



需要优化点和其他未加入功能点:
  • 1.后来想到可以让Card继承Jcomponent,这样可能在绘制上更方便点,事件监听可能也好点。后来解决闪烁问题还是在paint的时候先搞个图,最后画图,这点和awt的重写update实现双缓冲还是有区别的;事件的话还是用的事件委托,等于整个界面只有一个listener,这点和Ext的表格事件很像,如果表格一堆listener的话太浪费了。
  • 2.连接算法感觉略笨,好像自己玩连连看的时候,游戏能自动判断当前是不是还有可消的牌。如果实现的话应该是在另外一个线程里面计算每个牌的可消牌,并且缓存起来,这样点击的时候直接从这个缓存取就行了,也不用实时计算能不能消除了。这个实现起来应该还行,但是貌似每次消除或者重排的话,都得遍历所有卡片重新算一遍。
  • 3.可以加入timer,提示什么什么的功能。
  • 4.可以让value变成一幅画,消除有连接线,消除播放声音,右键取消选择什么的。
  • 5.size现在是写死的。。。
  • 6.可以消掉某牌之后其他的牌移动。
...



里面有些方法名用的也不是很恰当,凑合看看吧~

写完之后被老婆喷:写这么半天功能才这么鶸 =。=



  • 大小: 307.9 KB
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值