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: 蜘蛛纸牌源码学习+注释相关推荐

  1. java 注释工具栏_eclipse/intellij idea 查看java源码和注释方法

    工作三年了,一直不知道怎么用IDE查看第三方jar包的源码和注释,惭愧啊!看源码还好些,itellij idea自带反编译器,eclipse装个插件即可,看注释就麻烦了,总不能去找api文档吧!现在终 ...

  2. 蜘蛛池源码php,PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错...

    一.源码说明: PHP蜘蛛池泛站群系统完整运行版源码分享,强大的蜘蛛池系统PHP完美无错版源码下载,搭建好php环境之后,设置404.php,而后将域名泛解析,修改目录下的domains文件,启动即可 ...

  3. Java 源码学习系列(三)——Integer

    Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 此外,该类提供了多个方法,能在 int 类型和 String 类型之间互相转换,还 ...

  4. 11没有源码注释_我们为什么要看源码、应该如何看源码?

    看源码的意义 看源码只是一种方法.手段,而不是目的.我也曾经给自己制定过"阅读xxx源码"的目标,现在看起来真的很蠢,一点不smart(specific.measurable.at ...

  5. Java多线程之JUC包:Semaphore源码学习笔记

    若有不正之处请多多谅解,并欢迎批评指正. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/go2sea/p/5625536.html Semaphore是JUC ...

  6. java Integer 源码学习

    转载自http://www.hollischuang.com/archives/1058 Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的 ...

  7. Java并发包源码学习系列:AbstractQueuedSynchronizer

    文章目录 本篇学习目标 AQS概述 AbstractOwnableSynchronizer 同步队列与Node节点 同步状态state 重要方法分析 独占式获取与释放同步状态 共享式获取与释放同步状态 ...

  8. java钢琴键_javapiano Java Piano模拟钢琴效果的完整源码 联合开发网 - pudn.com

    javapiano 所属分类:Java编程 开发工具:Java 文件大小:32KB 下载次数:10 上传日期:2014-04-15 21:09:50 上 传 者:王小强 说明:  Java Piano ...

  9. Java的三种代理模式完整源码分析

    Java的三种代理模式&完整源码分析 Java的三种代理模式&完整源码分析 参考资料: 博客园-Java的三种代理模式 简书-JDK动态代理-超详细源码分析 [博客园-WeakCach ...

最新文章

  1. mysql8.0用mybatis哪个版本_SpringBoot整合MyBatis与MySql8.0
  2. Entity Framework 实体关系总结:one-to-one, one-to-many, many-to-many
  3. mysql更新数据索引慢_mysql添加索引,查询反而变慢
  4. 18行代码AC-Leecode 299. 猜数字游戏——Leecode每日一题系列
  5. 从C语言到C++的进阶之面向对象、using与命名空间(篇四)
  6. Thunderspy: 7个硬件漏洞,影响9年来所有安装 Thunderbolt 的电脑
  7. 查看各浏览器各版本的兼容情况
  8. Linux基础命令1
  9. usb gadget 端点halt的产生
  10. jboot-admin 搭建过程
  11. 浅谈无线路由器自动掉线解决办法
  12. 20天从入门到项目实战:学习小组C1任务训练实录
  13. flink yarn模式HA部署
  14. 北航计算机科学与技术课表,北航计算机科学与技术五年课程参考
  15. hdu2198 How many elements you must throw out? C语言动态规划题
  16. 一文直观理解编译型语言、解释型语言和脚本语言的区别
  17. qss 画框_PyQt5系列教程(77):QSS入门2
  18. 小说阅读器未能连接服务器怎么办,vue移动端小说阅读器vue全家桶项目,已部署到服务器可访问预览...
  19. Linux处理二进制文件工具
  20. vue + vtk.js读取CT序列,显示3d影像(三个面显示)

热门文章

  1. GPS功能的相关说明
  2. 在下列集成电路说法中不正确_关于集成电路(IC),下列说法中,正确的是________。...
  3. Ubuntu系统修复系统拼音输入法
  4. 开发板visionpro视觉通用检测框架源码,c#+vp, vp9.0,一个测量的程序可作为通用的检测框架使用
  5. Unity关于GL绘制和Gizmos绘制的Matrix问题。
  6. div左右自适应式布局
  7. 安卓java安装apk代码_Android 通过代码安装 APK的方法详解
  8. python刷b站视频浏览量_python + selenium 刷B站播放量的实例代码
  9. C# 汉字转GB2312 编码
  10. vvic api Alex19970108016微信同步