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