蜘蛛纸牌java注释_GitHub - tangguangyao/SpiderSolitaire: 蜘蛛纸牌源码学习+注释
SpiderSolitaire
蜘蛛纸牌源码学习+注释
源码分析思路:
首先,用了2个构造函数Spider和Poker
Spider构造函数拥有以下方法:
init:函数初始化
start:游戏开始
continuous:检测扑克牌是否连贯
dealing:发牌
record:记录分数和移动步数
folding:收牌
adjustDistance:调整每列牌的间距
undo:退一步
replay:重新开始
win:游戏胜利
这几个功能函数
Poker构造函数拥以下方法:
init:函数初始化
render:初始化占位符,牌堆,牌的样式和摆放位置
moveTo:移动牌
offset:获取牌位置
soliOffset:获取队列中最后一张牌位置,并设置下一张的牌的位置
disable,enable:牌上面能否移动的开关
expose:翻拍
listener:给牌上面加监听函数
dragStart,draging,dragEnd:拖拽牌的一系列判断功能
初始化游戏:
首先Spider初始化时创建52张牌,牌有3个属性pos(放置位置),style(花色,背面,或者占位符),num(牌的点数);
利用Math.random(),洗牌。打乱初始化有规则的closeCollection数组;
创建占位符和创建牌堆的样式,这里调用Poker函数设置10个占位符和5个牌堆的样式,并且给牌堆绑定点击函数;
点击start开始发牌;
发牌规则从第6行第5列停止发牌,从5行第5列明牌显示,其他则为暗牌;
closeCollection 为未发牌队列,每次发牌从牌堆中的取第一个元素;
每发一张牌利用Poker按照规则这是牌的样式和发到的位置,同时这个过程利用一个动画效果;
在Poker发牌时,对于5行第5列后明牌显示的牌,打开开关(移除fixed),此时牌堆上面可添加事件,这里添加了mousedown事件,按下鼠标时可以执行函数dragStart拖拽;
发牌完毕延迟60毫秒,让牌堆数组的最后一组解除锁定,打开开关(移除fixed),此时牌堆上面可添加事件;
此时就可以开始点击牌堆继续发牌,移动明牌(重新开始,后退一步等稍后考虑):
继续发牌:
通过Spider的dealing发牌函数,并且结合Poker的soliOffset给新牌设置位置;
同时发完牌后减少一个牌堆,然后解锁下一组牌堆 ,此牌堆上点击可触发发牌事件;
最后将这个事件添加到历史记录中;
则一次发牌事件完成。
另外一个操作是移动明牌:
Poker的dragStart函数首先利用Spider的continuous判断点击的牌是否连续,如果连续则可以拖动;
拖动时新建一个容器dragBox,将点击牌以及所在队列的后续牌元素放到dragBox中,将点击牌及所在队列的后续牌从openCollection移除,暂存到一个临时数组dragCollection中;
绑定两个事件:mousemove和mouseup(这里我没有弄明白mousemove.drag是什么意思);
并且记住点击牌所在队列的上一张牌S.soliPoker,移动后这张牌就是这组对列中的最后一张;
记录点击时点击事件的鼠标位置;
绑定的mousemove事件利用Poker的draging函数来拖动牌;
绑定的mouseup事件利用Poker的dragEnd来判断,能否放置牌成功,当牌移动到一定范围松开鼠标时,会判断这个牌是否连贯(连贯就可以方式),成功移动牌后,开始一次记分,记录这次操作历史,判断是否需要翻牌,移除创建存放拖动牌元素的容器,判断移动成功的这一列是否完整可以收牌等一系列规则判断。
另外2个操作:
重新开始其实就是重新初始化函数;
后退一步undo比较麻烦,也是需要各种判断:
读取historyQueue历史数据数组里面的内容,如果是翻牌dealing,直接将所有已发牌队列的最后一张牌移除,并恢复待发牌,这里就需要重新添加一个牌堆,并且将之前的牌堆关上点击事件开关;
如果不是翻牌,检测翻牌历史,如果有,则将重新让翻转至背面,测收牌历史,如果有,则将收起的牌移回原队列,移牌历史处理。
总结:
这个源码写的非常清晰,看上去很好理解,源码读起来也不是那么吃力,值得一看。
蜘蛛纸牌java注释_GitHub - tangguangyao/SpiderSolitaire: 蜘蛛纸牌源码学习+注释相关推荐
- java 注释工具栏_eclipse/intellij idea 查看java源码和注释方法
工作三年了,一直不知道怎么用IDE查看第三方jar包的源码和注释,惭愧啊!看源码还好些,itellij idea自带反编译器,eclipse装个插件即可,看注释就麻烦了,总不能去找api文档吧!现在终 ...
- 蜘蛛池源码php,PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错...
一.源码说明: PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错版源码下载,搭建好php环境之后,设置404.php,而后将域名泛解析,修改目录下的domains文件,启动即可 ...
- Java 源码学习系列(三)——Integer
Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还 ...
- 11没有源码注释_我们为什么要看源码、应该如何看源码?
看源码的意义 看源码只是一种方法.手段,而不是目的.我也曾经给自己制定过"阅读xxx源码"的目标,现在看起来真的很蠢,一点不smart(specific.measurable.at ...
- Java多线程之JUC包:Semaphore源码学习笔记
若有不正之处请多多谅解,并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/go2sea/p/5625536.html Semaphore是JUC ...
- java Integer 源码学习
转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的 ...
- Java并发包源码学习系列:AbstractQueuedSynchronizer
文章目录 本篇学习目标 AQS概述 AbstractOwnableSynchronizer 同步队列与Node节点 同步状态state 重要方法分析 独占式获取与释放同步状态 共享式获取与释放同步状态 ...
- java钢琴键_javapiano Java Piano模拟钢琴效果的完整源码 联合开发网 - pudn.com
javapiano 所属分类:Java编程 开发工具:Java 文件大小:32KB 下载次数:10 上传日期:2014-04-15 21:09:50 上 传 者:王小强 说明: Java Piano ...
- Java的三种代理模式完整源码分析
Java的三种代理模式&完整源码分析 Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCach ...
最新文章
- mysql8.0用mybatis哪个版本_SpringBoot整合MyBatis与MySql8.0
- Entity Framework 实体关系总结:one-to-one, one-to-many, many-to-many
- mysql更新数据索引慢_mysql添加索引,查询反而变慢
- 18行代码AC-Leecode 299. 猜数字游戏——Leecode每日一题系列
- 从C语言到C++的进阶之面向对象、using与命名空间(篇四)
- Thunderspy: 7个硬件漏洞,影响9年来所有安装 Thunderbolt 的电脑
- 查看各浏览器各版本的兼容情况
- Linux基础命令1
- usb gadget 端点halt的产生
- jboot-admin 搭建过程
- 浅谈无线路由器自动掉线解决办法
- 20天从入门到项目实战:学习小组C1任务训练实录
- flink yarn模式HA部署
- 北航计算机科学与技术课表,北航计算机科学与技术五年课程参考
- hdu2198 How many elements you must throw out? C语言动态规划题
- 一文直观理解编译型语言、解释型语言和脚本语言的区别
- qss 画框_PyQt5系列教程(77):QSS入门2
- 小说阅读器未能连接服务器怎么办,vue移动端小说阅读器vue全家桶项目,已部署到服务器可访问预览...
- Linux处理二进制文件工具
- vue + vtk.js读取CT序列,显示3d影像(三个面显示)
热门文章
- GPS功能的相关说明
- 在下列集成电路说法中不正确_关于集成电路(IC),下列说法中,正确的是________。...
- Ubuntu系统修复系统拼音输入法
- 开发板visionpro视觉通用检测框架源码,c#+vp, vp9.0,一个测量的程序可作为通用的检测框架使用
- Unity关于GL绘制和Gizmos绘制的Matrix问题。
- div左右自适应式布局
- 安卓java安装apk代码_Android 通过代码安装 APK的方法详解
- python刷b站视频浏览量_python + selenium 刷B站播放量的实例代码
- C# 汉字转GB2312 编码
- vvic api Alex19970108016微信同步