Java综合实验 连连看.docVIP

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Java综合实验 连连看

综合实验之连连看 实验目的: 熟愁java图形用户界面的设计。 学习java桌面程序的设计。 学会灵活运用java组件。 学习使用java进行算法实现。 案例分析: “连连看”是一种现在比较流行的小游戏,我们尝试编写了一个java版本的“连连看”游戏。 游戏的目标是把两张同样图案的牌找到并消除。需要选择一对相同的图案连线,但此连线在避开其它图案后,呈现的路径应不超过两次转弯,如符合规定则消除此对图案。每一局里玩家需要在规定的时间内消除所有的图案,当出现所有图案均无法连线时,游戏会自动打乱图案,即重新洗牌。 实现连线的规则如下: 两个目标是相同的。 两个目标之间连接线的折点不超过两个(连接线由x轴和y轴的平行线组成)。 根据这个规则可以看出,要将两个相同的牌连接,一般分为如下3种情况: 直线相连 一个析点 两个析点 如图: 通过示意图可以看出,如果有折点,每个折点必定有且至少有一个坐标(x或者y)是和其中一个目标点相同的,也就是说,折点必定在两个目标点所在的x 方向或y方向的直线上。那么通过平移其中一个目标点的x轴或者y轴,得到的一系列路径就是可能的消除路径。检查这此路径上是否有其他的牌,如果没有其他的牌阻挡,就是一条通路,亦即这两个目标图案可以消除;如果检查了所有的可能的路径都没有这样的通路,则这两个图案之间就没有可以消除的路径 另一个算法是随机生成盘面。要保证所有的牌都能消除,就要求每种牌在盘面上都是偶数。案例里面使用的算法是先随机生成一半的序列,拷贝这个序列到另一半,这样就能保证每种牌数目都是偶数,然后再打乱整个序列。打乱序列的办法就是随机从序列中取两个位置,交换这两个位置的元素,交换操作执行的次数也是随机生成的。 程序设计: 程序中主要的类: 类图: Model类图: 主要用户界面类图: CharIcon相差类图: 辅助工具类图: jcase.lianliankan.Model:盘面模型,整个游戏的主要算法都是在其中实现的。Model类使用字符数组作为盘面的数据类型,不同的字符代表不同的牌。 jcase.lianliankan.Stage:游戏舞台,负责根据Model绘制相应的图案 jcase.lianliankan.CharIcon:这个接口定义了将Model中相应的安符绘制成不同的图标。其中SimpleCharIcon和ImageCharIcon都实现了这个接口。 jcase.lianliankan.StageListener:游戏事件监听接口,负责处理超时、游戏结束以及奖励时间等事件。 jcase.lianliankan.Configuration:工具类,其它类通过这个类的静态方法得到程序运行的一些常数和参数。参数可以从配置文件中读取。 jcase.lianliankan.JGrameFrame:游戏的主窗口,同时提供菜单,对话框等。这个类实现了StageListener接口。 jcase.lianliankan.Timer:计时器。以进度条的方式显示逝去的时间。 Log:提供简单的日志记者录功能 Main:程序入口,提供main()方法。 代码实现: 文件名:CharIcon.java package jcase.lianliankan; import javax.swing.Icon; /** * 图标接口,按照给定的字符绘制不同的图标 */ public interface CharIcon extends Icon { /** * 设定该图标的字符。字符不同,在paintIcon方法里面绘制的操作也不同。 * @param c */ public void setChar(char c); public char getChar(); public void setSelected(boolean selected); public boolean isSelected(); } 文件名:WindowCloser.java package jcase.lianliankan; import java.awt.event.*; public class WindowCloser extends WindowAdapter { public void windowClosing(WindowEvent e) { System.exit(0); } } 文件名:Timer.java package jcase.lianliankan; import javax.swing.JProgressBar; public class Timer extends JProgressBar implements Runnable { private boolean clockthr

文档评论(0)

baoyue + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档