java连连看含代码
时间:2025-07-13
时间:2025-07-13
java课程设计、有完整代码和注释
JAVA连连看游戏
一、功能描述:
通过JAVA编一个连连看程序,通过鼠标点击使相同两个图像消掉。程序实现以下几个功能: 1、判断鼠标点击的两张图片是否相同; 2、判断2张图片是否可以相连; 3、判断时间;
4、判断是否使用炸弹,炸弹剩余数目,自动生成路径消除两张相同图片; 5、判断剩余图片,是否胜利。
二、方案:
概要设计:程序分为6个部分:
第一:主窗口部分(MainFrame)定义了程序用函数,实现了程序菜单(initMenuBar)的使用。
第二:按键部分(ChessButton)定义按键的位置,代表的值。
第三:游戏部分(MapUI)判断点击的图片,判断两图片是否可连,是否相同。判断是否胜利。实现炸弹功能。
第四:数组(Settings)确定了游戏各种参数属性。 第五:取值部分(ArrayPoint)定义图片的值。
第六:算法部分(Map)通过算法确定两张图片是否连通。
详细设计:运行效果与程序发布:本程序含有6个JAVA源程序,一个图片文件夹。通过JCreator Pro运行及修改程序。把ChessButton.java,MainFrame.java和MapUI.java文件保存在同一文件夹(如:D:\lianliankan\)。把Settings.java放入一层文件加的\cn\elva文件夹下(如:D:\lianliankan\cn\elva)。把ArrayPoint.java和Map.java放入文件夹的\cn\elva\model文件夹中。在文件夹中建立一个叫Resource的文件夹存放图片。运行JCreator Pro编译JAVA程序,生成相应的字节码文件(.class)文件。然后,用java解释器运行主类:D:\lianliankan\java MainFrame。功能模块图如上。
程序通过对用户点击的图片进行判断,确定两张图片的路径,判断两张图片是否相同,是否可以相连,如果可以相连并且两张图片相同,那么消除两张图片,否则认为用户没点图片,重新选择。系统会在用户开始的时候进行计时,如果用户在限定时间内没有完成(还有图片枚消除),那么系统提示用户失败信息,反之(图片全部消除),提示用户胜利信息。在游戏过程中,用户可以使用炸弹,如果炸弹存在
java课程设计、有完整代码和注释
定义程序的必要变量的初值使每回开始新游戏,这些初值都会还原: 行数:public static final int ROWS = 8; 列数:public static final int COLUMNS=8;
图片后缀名:public static final String RELEX=".gif";
每局所花时间(秒):public static final int PERTIME = 600; 判断的时间间隔:public static final int PER = 1; 炸弹的使用次数:public static final int BOMBCOUNT = 3;
把每一个图片位置都定义为一个按钮,这样在鼠标点击的时候就能确定用户点击的是哪张图片。
public class ChessButton extends JButton { // 按钮所对应的数组中的值和位置,用ArrayPoint结构来表示 protected ArrayPoint point = null; /** * 构造函数,指定按钮所代表的值和位置 * @param row 所在行号 * @param col 所在列号 * @param value 代表的值 */
public ChessButton(int row, int col, int value) {this(new ArrayPoint(row, col, value));}
/**
* 构造函数
* @param point 值和位置的数据结构 */
public ChessButton(ArrayPoint point) {this.point = point; String name ="Resource/"+point.getValue() + Settings.RELEX; URL url = ChessButton.class.getResource(name); // System.out.println(url); ImageIcon icon = new ImageIcon( url ); this.setIcon(icon); }
java课程设计、有完整代码和注释
/**
* 构造函数,使用默认值 */
public ChessButton()
{this(new ArrayPoint(0, 0, 0));
/** * 返回当前按钮代表的位置和值 * @return point */
public ArrayPoint getPoint() {return point; } /**
* 设置此按钮所代表的位置和值 * @param point 要设置的 point */
public void setPoint(ArrayPoint point)
{this.point = point;}}
设计算法排列图片,设计算法判断两张图片是否可以相连
/* @author AXL 数据部分,一个内部数组来表示页面上的具体情况/
public class Map
{public static int LEFTCOUNT = Settings.ROWS * Settings.COLUMNS;
// 让其最外层的数据不显示,可以解决边框消除不掉的情况
private int[][] map = new int[Settings.ROWS + 2][Settings.COLUMNS + 2]; // private ArrayPoint prePoint; // private ArrayPoint currPoint;
// 出现的不同图片个数
private int maxKinds = 4; public Map() {init();}
public int[][] getMap() {return map;}
/* 实现了二维数组的产生/
private void init()
{int[] tempArr = new int[Settings.ROWS * Settings.COLUMNS]; int len = tempArr.length;
// 根据图片的种类数来确定数组大小,如有64张图片,每四个为一样的,则需要图片数为64/4=16 for (int i = 0; i < len / maxKinds; i++) {tempArr[i * 4] = i + 1; tempArr[i * 4 + 1] = i + 1; tempArr[i * 4 + 2] = i + 1; tempArr[i * 4 + 3] = i + 1;}
// 打乱一维数组内数据的排列
random(tempArr);
// 填充到二维数组中
for (int i = 1; i < Settings.ROWS + 1; i++)
{for (int j = 1; j < Settings.COLUMNS + 1; j++)
java课程设计、有完整代码和注释
{this.map[i][j] = tempArr[(i - 1) * Settings.COLUMNS + (j - 1)];}}}
/* 将数组进行重排,使其成无序状态 * @param array 要重排的数组/
private void random(int[] array) {Random random = new Random(); int len = array.length; for (int i = len; i > 0; i--) {int j = random.nextInt(i); int temp = arra …… 此处隐藏:8283字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:辽宁省户口所在地行政区划代码
下一篇:行政案例分析_第三次形考任务0