当前位置:文档之家› java连连看含代码

java连连看含代码

java连连看含代码
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。功能模块图如上。

程序通过对用户点击的图片进行判断,确定两张图片的路径,判断两张图片是否相同,是否可以相连,如果可以相连并且两张图片相同,那么消除两张图片,否则认为用户没点图片,重新选择。系统会在用户开始的时候进行计时,如果用户在限定时间内没有完成(还有图片枚消除),那么系统提示用户失败信息,反之(图片全部消除),提示用户胜利信息。在游戏过程中,用户可以使用炸弹,如果炸弹存在

定义程序的必要变量的初值使每回开始新游戏,这些初值都会还原:

行数: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); }

/**

* 构造函数,使用默认值

*/

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++)

{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 = array[i - 1];

array[i - 1] = array[j];

array[j] = temp;}}

/* 判断是否在一条直线上,这里不去比较两者值是否相等,主要用于后面两个拐点的情况* @param p1 之前的点

* @param p2 当前所点的点

* @return true 相通,false 不通/

public boolean oneLineWithoutValue(ArrayPoint p1, ArrayPoint p2)

{if (horizonMatch(p1, p2))

{return true;}

else if (verticalMatch(p1, p2))

{return true;}

return false;}

/* 判断是否在一条直线上,其中包括了垂直和水平两种情况

* @param p1 之前的点

* @param p2 当前所点的点

* @return true 相通,false 不通/

public boolean oneLine(ArrayPoint p1, ArrayPoint p2)

{if (p1.value != p2.value)

return false;

if (oneLineWithoutValue(p1, p2))

return true;

return false;}

/* 竖线上的判断

* @param p1 之前的点

* @param p2 当前所点的点

* @return true 相通,false 不通/

public boolean verticalMatch(ArrayPoint p1, ArrayPoint p2)

{if (p1.j != p2.j)

return false;

if (p1.i > p2.i)

{ArrayPoint temp = null;

temp = p1;

p1 = p2;

p2 = temp;}

// 之间的相隔的棋子数

int spaceCount = p2.i - p1.i;

// 如果相邻,直接消除

if (spaceCount == 1 && p1.value == p2.value)

return true;

for (int i = p1.i + 1; i < p2.i; i++)

{ArrayPoint point = new ArrayPoint(i, p1.j, map[i][p1.j]);

// 只要其值为0就表示没有棋子

if (point.value != 0)

return false;}

return true;}

/* 水平方向的判断

* @param p1 之前所选的点

* @param p2 当前选中的点

* @return true 相通,false 不通/

public boolean horizonMatch(ArrayPoint p1, ArrayPoint p2)

{// 如果行行号不等的话,刚不是水平方向的结果if (p1.i != p2.i)

return false;

if (p1.j > p2.j)

{ArrayPoint temp = null;

temp = p1;

p1 = p2;

p2 = temp;}

// 水平相隔棋子数

int spaceCount = p2.j - p1.j;

// 如果相邻,直接消除

if (spaceCount == 1 && p1.value == p2.value)

return true;

for (int i = p1.j + 1; i < p2.j; i++)

{ArrayPoint p = new ArrayPoint(p1.i, i, map[p1.i][i]);

if (p.value != 0)

return false;}

return true;}

/*判断前后点击的是不是同一个点,i,j相同就是一个点

* @param p1 之前所选的点

* @param p2 当前选中的点

* @return true 同一个点,false 不同点/

private boolean isSameOne(ArrayPoint p1, ArrayPoint p2)

{if (p1.i == p2.i && p1.j == p2.j)

return true;

else

return false;}

/*带一个拐点的情况,但不比较值的大小是否相等

* @param p1 初始点

* @param p2 结束点

* @return true 相通,false 不通*/

public boolean oneConnerWithoutValue(ArrayPoint p1, ArrayPoint p2)

{// 获取P1水平方向的拐点

ArrayPoint p1H = new ArrayPoint(p1.i, p2.j, map[p1.i][p2.j]);

// 获取P1垂直方向的拐点

ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]);

if (horizonMatch(p1, p1H) && (p1H.value == 0))

{if (this.verticalMatch(p1H, p2))

return true;}

if (verticalMatch(p1, p1V) && (p1V.value == 0))

{if (horizonMatch(p1V, p2))

return true;}

return false;}

/* 带一个拐点的情况

* @param p1 初始点

* @param p2 结束点

* @return true 相通,false 不通*/

public boolean oneConner(ArrayPoint p1, ArrayPoint p2)

{ // 获取P1水平方向的拐点

ArrayPoint p1H = new ArrayPoint(p1.i, p2.j, map[p1.i][p2.j]);

// 获取P1垂直方向的拐点

ArrayPoint p1V = new ArrayPoint(p2.i, p1.j, map[p2.i][p1.j]);

if (p1.value != p2.value)

return false;

if (oneConnerWithoutValue(p1, p2))

return true;

return false;}

/* 带两个拐点的情况,分四个方向走,上下左右,只要一个方向通过,即通过* @param p1 初始点

* @param p2 结束点

* @return true 相通,false 不通*/

public boolean twoConner(ArrayPoint p1, ArrayPoint p2)

{if (p1.value != p2.value)

return false;

int count = 0;

ArrayPoint temp = null;

// 左

for (int col = p1.j - 1; col >= 0; col--)

{temp = new ArrayPoint(p1.i, col, map[p1.i][col]);

if ((temp.value == 0) && this.oneLineWithoutValue(p1, temp))

{if (this.oneConnerWithoutV alue(temp, p2))

return true;}

else

break;}

右、上和下的方法一样,代码相似。在此不给出方法。

/* 判断两点是否匹配,包括直线,一个拐点,两个拐点三种情况

* @param p1 初始点

* @param p2 结束点

* @return true 相通,false 不通*/

public boolean match(ArrayPoint p1, ArrayPoint p2)

{if (this.isSameOne(p1, p2))

return false;

if (oneLine(p1, p2))

{map[p1.i][p1.j] = 0;

map[p2.i][p2.j] = 0;

LEFTCOUNT -= 2;

return true;}

if (oneConner(p1, p2))

{map[p1.i][p1.j] = 0;

map[p2.i][p2.j] = 0;

LEFTCOUNT -= 2;

return true;}

if (twoConner(p1, p2))

{map[p1.i][p1.j] = 0;

map[p2.i][p2.j] = 0;

LEFTCOUNT -= 2;

return true;}

return false;}}

设计算法是图片可以消除,设计炸弹算法,使用户可以使用炸弹。public class MapUI extends JPanel implements ActionListener

{private static final long serialVersionUID = 1L;

//private int bombCount = Settings.BOMBCOUNT;

// 棋子数组,用按钮来表示

private ChessButton[] chesses = null;

// 数据模型

private Map map = new Map();

// 判断当前点击的棋子是否是第二次选中的

private boolean two = false;

// 前面点的那个棋子

private ArrayPoint priviousPoint;

// 第二次选中的棋子

private ArrayPoint currPoint;

/** 构造函数*/

public MapUI()

{super();

initialize();}

/** 初始化函数

* @return void/

private void initialize(){

initChesses();

GridLayout gridLayout = new GridLayout(Settings.ROWS + 2,

Settings.COLUMNS + 2);

gridLayout.setHgap(2);

gridLayout.setVgap(2);

this.setLayout(gridLayout);

this.setSize(300, 200);

// 放置按钮,按行

for (int row = 0; row < Settings.ROWS + 2; row++)

{for (int col = 0; col < Settings.COLUMNS + 2; col++)

add(chesses[row * (Settings.COLUMNS + 2) + col]);}}

private void initChesses()

{int[][] values = map.getMap();

// 初始化棋子,和数据模型里保持一样

this.chesses = new ChessButton[(Settings.ROWS + 2)

* (Settings.COLUMNS + 2)];

for (int row = 0; row < 10; row++)

{for (int col = 0; col < 10; col++)

{// 通过二维的数据模型坐标得到一维的棋子坐标

int index = row * (Settings.COLUMNS + 2) + col;

//对棋子的数据模型,即ArrayPoint对象进行设置,指定此棋子具体的位置和值chesses[index] = new ChessButton(row, col, values[row][col]);

// 添加监听器

chesses[index].addActionListener(this);

// 将外围的一圈设为不可见,行,列为0 和为最大值的情况

if (row == 0 || row == (Settings.ROWS + 2 - 1) || col == 0

|| col == (Settings.COLUMNS + 2 - 1))

chesses[index].setVisible(false);}}}

public void clearCheese(ArrayPoint priviousPoint, ArrayPoint currPoint)

{// 处理匹配,看两点中否联通获得数据模型中的数组

int[][] values = map.getMap();

// 将模型中对应的棋子设为0

values[priviousPoint.getI()][priviousPoint.getJ()] = 0;

values[currPoint.getI()][currPoint.getJ()] = 0;

// 使两个已经消除的按钮不可见

int index1 = priviousPoint.getI() * (Settings.COLUMNS + 2)

+ priviousPoint.getJ();

int index2 = currPoint.getI() * (Settings.COLUMNS + 2)

+ currPoint.getJ();

chesses[index1].setVisible(false);

chesses[index2].setVisible(false);

// 如果棋子总数已为0,则程序结束

if (map.LEFTCOUNT == 0)

{JOptionPane.showMessageDialog(this, "恭喜您通过!!");}}

/* 事件监听器处理函数,也是处理棋子消除的地方/

public void actionPerformed(ActionEvent e)

{// 获得当前的柜子

ChessButton button = (ChessButton) e.getSource();

// 获得当前棋子的数据结构

ArrayPoint p = button.getPoint();

// 如果已有两个棋子选中, 则进行判断操作

if (two)

{currPoint = p;

if( map.match(this.priviousPoint, this.currPoint))

clearCheese(this.priviousPoint, this.currPoint);

// 设置为没有两个按钮的选中的状态

two = false;}

else

{// 将当前点击的棋子赋给变量priviousPoint

this.priviousPoint = p;

// 标志位设为TRUE,用于点击下个棋子的时候使用

two = true;}}

/* 炸弹的功能/

public void bomb() {

int[][] values = map.getMap();

ArrayPoint p1 = null;

ArrayPoint p2 = null;

for (int row = 1; row < Settings.ROWS + 1; row++){

for (int col = 1; col < Settings.COLUMNS + 1; col++) {

if (values[row][col] != 0){

p1 = new ArrayPoint(row, col, values[row][col]);

for (int i = 1; i < Settings.ROWS + 1; i++){

for (int j = 1; j < Settings.COLUMNS + 1; j++){

if (values[i][j] != 0)

p2 = new ArrayPoint(i, j, values[i][j]);

else

continue;

//System.out.println(p1 + "|" + p2);

if (map.match(p1, p2)){

clearCheese(p1, p2);

return;}}}}}}}}

三、结果

用户可以通过点击菜单中的“开始游戏”选项,开始新游戏程序。程序会载入图片,并通过特定的算法排列图片,并标记图片,以便判断图片是否相同。记录图片坐标,以方便计算图片是否可以相连。确定图片大小,以确定用户点击的是那张图片。

连连看-JAVA课程设计报告

课程设计 2013 ~ 2014学年第二学期 设计题目连连看游戏程序 院(系) 专业软件工程 班级学号 学生姓名 设计时间 2014年6月24日~2014年6月27日 指导教师 提交日期 2014年6月27日

目录 目录 (2) 1.课程设计的目的与要求 (3) 1.1课程设计目的与要求 (3) 1.2课程设计内容 (3) 1.3课程设计的实验环境 (3) 1.4课程设计的预备知识 (3) 2.系统模块结构图 (4) 2.1 模块设计 (4) 2.1.1 菜单控制模块 (4) 2.1.2 算法模块 (5) 2.1.3 界面显示模块 (7) 3.详细设计 (9) 3.1总体算法思路 (9) 3.2代码实现 (9) 4.小结 (9)

1.课程设计的目的与要求 1.1课程设计目的与要求 1.掌握JA V A语言中面向对象的概念,并能在程序中熟练运用。 2.了解面向对象程序设计(JA V A)的基本概念以及运用面向对象技术进行程序设计的基本思 想。 3.能正确编写和调试JA V A程序。 4.了解在JA V A环境下进行程序设计的基本思想和方法。 1.2课程设计内容 1.设计一个连连看的游戏程序。 2.在JA V A环境下,将上述程序使用GUI、数据结构等内容完成 3.设计思路: (1)界面设计 1)初始测试界面可以考虑使用简单的按钮来代表连连看游戏中的图标。 2)布局可以考虑使用GRID方式。 3)设计菜单选择连连看难度等内容,具体可参照QQ连连看,也可自定义。 4)考虑完善界面,例如动画等。 (2)代码设计 1)本设计的核心为练练看算法的设计,可以考虑数据结构中的图的遍历章 节,合理设计算法,将界面中各按钮的分布映射入数学矩阵进行路径规划。 (可以上网搜索相关算法)。 2)完成连连看游戏的图形、算法等代码的设计。 4.实验步骤(包括操作方法、数据处理) (1)界面设计 (2)算法设计 (3)代码设计 1.3课程设计的实验环境 硬件要求能运行Windows xp/7操作系统的微机系统。JAVA程序设计语言及相应的集成开发环境, ECLIPSE开发工具。 1.4课程设计的预备知识 熟悉JAVA语言及ECLIPSE开发工具。

简易数字连连看Java程序的设计书

简易数字连连看Java程 序设计书 1.1Java程序课程设计任务书 1.1《简易连连看游戏》 本程序基本实现了小游戏连连看的功能,玩家找出游戏中2个相同图案的方块,如果它们之间的连接线不多于3根直线,则将其连接起来,就可以成功将图案相同的方块消除,否则不会消失,当游戏中已没有满足条件的图案时,点击重列,可重新排序,游戏结束会跳出所得分数,该游戏的特点是与自己竞争,超过自己之前所创纪录。 1.1.1具体要求(包括技术要求等): <1>. 该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随机分布一些数字,数字的要至少两两相同,位置随机打乱。 <2>. 当将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则无效,若连接一对成功就消失于界面,继续游戏,直到游戏结束,并能返回所得分数。 <3>. 重列按钮(帮助)的功能:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。 <4>. 退出按钮:击左下方的“退出游戏”按钮,即可结束游戏。 1.2本系统涉及的知识点: 循环,javaGUI组件,函数,数组,分支等 2.功能设计 2.1算法设计 本系统需要实现的功能要求:

图一,数字按钮功能模块 图二,三个功能按钮模块 图三,数据记录模块

图四,鼠标操作模块 2.2部分模块流程图:

3代码设计 package mybase.programe; /* * lianliankan总体算法思路:由两个确定的按钮。若这两个按钮的数字相等,就开始找它们相连的路经。这个找路经 * 分3种情况:(从下面的这三种情况,我们可以知道,需要三个检测,这三个检测分别检测一条直路经。这样就会有 * 三条路经。若这三条路经上都是空按钮,那么就刚好是三种直线(两个转弯点)把两个按钮连接起来了)

基于java的连连看游戏设计毕业设计论文(含源文件)

毕业设计(论文)原创性声明和使用授权说明 原创性声明 本人郑重承诺:所呈交的毕业设计(论文),是我个人在指导教师的指导下进行的研究工作及取得的成果。尽我所知,除文中特别加以标注和致谢的地方外,不包含其他人或组织已经发表或公布过的研究成果,也不包含我为获得及其它教育机构的学位或学历而使用过的材料。对本研究提供过帮助和做出过贡献的个人或集体,均已在文中作了明确的说明并表示了谢意。 作者签名:日期: 指导教师签名:日期: 使用授权说明 本人完全了解大学关于收集、保存、使用毕业设计(论文)的规定,即:按照学校要求提交毕业设计(论文)的印刷本和电子版本;学校有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;学校可以采用影印、缩印、数字化或其它复制手段保存论文;在不以赢利为目的前提下,学校可以公布论文的部分或全部内容。 作者签名:日期:

学位论文原创性声明 本人郑重声明:所呈交的论文是本人在导师的指导下独立进行研究所取得的研究成果。除了文中特别加以标注引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写的成果作品。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本人完全意识到本声明的法律后果由本人承担。 作者签名:日期:年月日 学位论文版权使用授权书 本学位论文作者完全了解学校有关保留、使用学位论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。 涉密论文按学校规定处理。 作者签名:日期:年月日 导师签名:日期:年月日

java(源代码)连连看课程设计

目录 第一章引言 (2) 1.背景 (2) 1.1课程设计内容 (3) 第二章系统介绍 (4) 1.连连看游戏规则 (4) 1.1游戏基本规则 (4) 1.2操作规则 (4) 1.3胜利和失败 (4) 2.游戏流程图分析 (4) 第三章系统游戏设计 (7) 1.系统分析 (7) 1.1游戏系统需求分析 (7) 1.2系统开发及运行环境 (7) 1.3系统功能主要要求 (7) 2.系统总体结构 (8) 3. 系统各模块功能介绍 (8) 第四章系统的具体实现 (9) 1.系统主要运行界面 (9) 1.1运行界面 (9) 1.2执行界面,进入游戏正常运行 (9) 1.3时间到界面 (10) 1.4赢家界面 (11) 1.5进度条界面 (12) 图4.5程序运行进度条 (12) 2.游戏实现代码 (12) 2.1主面板内所需要的组件的声明 (12) 2.2填充一个矩形框,进行显示时间 (12) 2.3主面板及各组件初始化 (13) 2.4创建时间对象,每隔100毫秒刷新一次 (13) 2.5分数代码。 (13) 3.消除图片具体情况 (14) 3.1两次点击相同图片相邻 (14)

3.2水平方向消去算法 (14) 3.3竖直方向消去算法 (15) 第五章程序清单 (16) 第六章结束语 (24) 第七章参考文献 (25) 第一章引言 1.背景 游戏“连连看”顾名思义就是找出相关联的东西,这个连连看在网上基本是用在小游戏中,就是找出相同的两样东西,在一定的规则之内可以做为相关联处理。“连连看”的发展经历了从桌面游戏、在线游戏、社交游戏三个过程。 游戏“连连看”是源自台湾的桌面小游戏,自从流入大陆以来风靡一时,也吸引众多程序员开发出多种版本的“连连看”。这其中,顾方编写的“阿达连连看”以其精良的制作广受好评,这也成为顾方“阿达系列软件”的核心产品。并于2004年,取得了国家版权局的计算机软件著作权登记证书。 随着Flash应用的流行,网上出现了多种在线Flash版本“连连看”。如“水晶连连看”、“果蔬连连看”等,流行的“水晶连连看”以华丽界面吸引了一大批的女性玩家。 2008年,随着社交网络的普及和开放平台的兴起,“连连看”被引入了社交网络。“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行。 网络小游戏、网页游戏越来越受网民欢迎,除了玩的方法简单外(不像其他游戏还需要注册下载繁琐过程),很多游戏不乏经典。连连看游戏就是典型。 不管走到哪个网页游戏网站,连连看游戏总是排在受玩家欢迎排名的前5位,休闲、趣味、益智是连连看玩不厌的精华,且不分男女老少、工薪白领,是一款适合大众的经典网络、单机休闲小游戏。 游戏《连连看》,只要将相同的两张牌用三根以内的直线连在一起就可以消除,规则简单容易上手。游戏速度节奏快,画面清晰可爱,适合细心的玩家。丰富的道具和公共模式的加入,增强游戏的竞争性。多样式的地图,使玩家在各个游戏水平都可以寻找到挑战的目标,长期地保持游戏的新鲜感。 该游戏由30张不同的图片组成,游戏开始将会出现30张随机组合的图片,在规则下点击两张相同的图片后图片将会消失。图片全部消完为游戏成功。游戏还将设置退出,再来一局的按钮,并实现该功能,方便用户进行操作。

基于java的连连看游戏

基于JAVA的《连连看》游戏 一引言 《连连看》游戏在网上种类非常多,比如《水果连连看》,《宠物连连看》等等,虽然版本各种各样,但是其基本玩法,或者说基本算法是相同的,就是显示一些图标,让用户依次去点击两个图标,如果这两个图标相同,并且这两个图标通过直线可以相连,或者通过直角相连,或者通过双折线相连就可以消掉,消掉所有图标即为胜利。如图1所示: 图1 正在进行中的连连看游戏 通过该游戏的制作,我们可以对Java的基础语法、Java图形界面以及简单的算法设计有一个比较全面的了解。 二设计要求 为了避免叙述的繁琐,我们只实现连连看游戏的基本功能,如下: ●制作如图1所示的游戏界面,尽量做到美观大方,使用方便 ●当两个图标相同,且通过直线相连、直角相连、双折线相连时,能够消掉图标 ●能够让游戏随时暂停,然后继续

当游戏进行到一定程度,无法消除剩余图标时,要能够提供重排功能对图标进行重排,从而让游戏继续进行 三实现思路 我们先讲一下程序中的几个难点,主要是说清楚具体的实现思路,具体的代码会在文后给出,大家可以参考。 1、界面设计 需要实现如图2所示的界面: 图 2 连连游戏界面 整个界面分为三个区域:菜单区、功能区、游戏区。首先在窗体上放置三个面板JPanel,分别存放三个区域,如图3所示:

图3 界面的设计 系统菜单区放置菜单即可,用户游戏区放置一个8*9的按钮数组来构成游戏界面,用户交互区放置开始,暂停等功能按钮以及提示信息。 2、生成游戏区 运行程序后,游戏区并不显示按钮数组,当点击开始按钮后,再自动生成。在生成按钮时要求按钮上的图案是随机的,且每个图案必须是偶数,否则会出现无法消除的按钮。如何实现呢?我们可以这样考虑:假设有12个图片,把图片名字按照数字序号从0到11命名;假设游戏区共72个按钮,那么产生36个12以内的随机数字(每个随机数字代表一个图片),放入一个ArrayList中,最后使用ArrayList的addAll方法对已经产生的36个随机数字复制一份,这样就获得了72个随机数字,并且是成对的。因为一个数字对应一个图片,所以72个按钮需要的图片就生成了。代码如下: Random random = new Random(); int imagenum = ROW * COL; for(int i=0; i

连连看源代码

摘要: 近年来,Java作为一种新的编程语言,以其简单性、可移植性和平台无关性等优点, 得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编 程领域的首选编程语言。 Java语言的学习热潮并没有因为时间的推移而消退,相反,由于计算机技术的发展 所带来的新应用的出现,Java越来越流行,这种情况是以往程序设计语言在其生存周期 内所不多见的。Java语言之所以这样长盛不衰,一是因为其众多的技术特点与现今的应 用十分合拍,可以覆盖大部分的需求;二是因为SUN公司不断推出新的版本,完善Java 自身的功能。有了这两点,Java语言成为程序员首选的程序设计开发工具就在情理之中 了. 连连看来源于街机游戏《四川麻将》和《中国龙》,是给一堆图案中的相同图案进 行配对的简单游戏,在2003年,一个叫做朱俊的网友将这种形式搬到了PC上,立刻成 为办公一族的新宠,并迅速传遍了世界各地。饱受工作压力的人们没有太多的时间进行 复杂的游戏,而对于这种动动鼠标就能过关的游戏情有独钟。之后村子的连连看风靡版, 阿达的连连看奥运版,连连看反恐版,还有敏敏连连看,水晶连连看等遍地开花,造就 了一个连连看的新世界。连连看游戏有多种地图样式和道具系统、大大加强了游戏的可 玩性,是一款老少皆宜的休闲佳品。 关键字:发展,java,连连看,程序设计; 1.课程设计介绍 课题设计的目的: 1) 进一步加深对Java语言的理解和掌握;将所学的JAVA知识运用于实践中。 2) 课程设计将理论与实践相结合,提供了一个既动手又动脑,独立实践的机会,锻炼 我们的分析解决;实际问题的能力,提高学生适应实际,实践编程的能力。 3)熟练掌握JAVA语言中图形用户界面程序的编写; 4)大体了解怎样用JAVA来编写小游戏的,增强我们实践能力和创新精神的综合培养。 课程设计的要求: 由于Java语言是当今流行的网络编程语言,它具有面向对象、跨平台、分布应用等 特点。面向对象的开发方法是当今世界最流行的开发方法,它不仅具有更贴近自然的语义, 而且有利于软件的维护和继承学会java程序开发的环境搭建与配置,并在实际运用中学习和掌握Java程序开发的全过程。进一步熟悉掌握Java程序设计语言的基础内容,如用户图形界面 设计、Java多线程编程、Applet程序的设计、文件和网络输入输出流编程、Java数据库编程等。通过亲自动手写程序,一方面拓展知识面,一方面锻炼调试能力。

JAVA 连连看 源代码行行注释

所实现应用的功能及具体实现. 需求规定 退出:退出界面,停止游戏。 重列:重新排列按键。 再来一局:重新开始一局,分数不重计。运行环境 硬件要求:普通计算机即可。 操作系统:windows XP,windows 7 等 开发环境:Myeclipse 8.5

流程图 实现思路 1:将整张地图拆分为n行m列,接着用一个二维数组表示将在地图中显示什么,例如0表示此处没有东西(如果两个按键可以消除时,就可以将数组中对应的元素赋为0)。 2:游戏中需要处理鼠标按下时间和获取鼠标当前点击坐标信息。 3:如果其在地图范围内按下某个按键,则将其转换为在二维数组中对应的行和列。

4:游戏关键就是如何判断两张图片可以消除,这也是连连看游戏的关键吧。在这个简单连连看中可以直接比较两个按键标示的数字,如果数字相等则可以消去,如果不相等则不能消去。 我们可以将开始点的前后左右四个方向的结点都推入队列中,继续查看其前后左右的前后左右,如果其中有为0的(代表此处没有图片,存在通路),还是元素值和开始点相同的都推入队列中。 在判断前后左右时就可以对转弯次数进行累加了,如果还是原来的方向,则保持转弯次数不变,否则转弯次数+1。如果搜索的过程中,发现存在转弯的次数少于或者等于2的,且其结点信息和结束点一样,代表我们已经找到了开始点和结束点之间的通路了,这时也就是两个按键可以消去了。 5:如何画出两张图片消去的路径呢,我的思路是这样的,每次寻找到一个新结点时,我们可以将其上一步结点的信息也保存下来,这样当我们找到结束点时,我们就可以沿着相反的方向,搜索回去,找出原来的整条路径。

代码介绍及分析。 package test; import javax.swing.*; //AWT的扩展 import java.awt.*; //抽象窗口工具包 import java.awt.event.*; class lianliankan implements ActionListener //实现ActionListener接口{ JFrame mainFrame; //主面板,JFrame定义的是一个容器,可向里面添加组件Container thisContainer; //定义一个容器 JPanel centerPanel,southPanel,northPanel; //子面板,JPanel是个轻量级容器,可添加入JFrame中 JButton diamondsButton[][] = new JButton[6][5];//定义存储游戏按钮的数组JButton exitButton,resetButton,newlyButton; //定义退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //定义分数标签,并初始化为0. JButton firstButton,secondButton; //分别记录两次先后被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; // 声明了一个静态布尔类型的变量,判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标 int i,j,k,n;//消除方法控制 public void init(){ //init方法 mainFrame=new JFrame("连连看"); //定义主面板为命名为“连连看”的JFrame容器thisContainer = mainFrame.getContentPane(); //初始化mainFrame. thisContainer.setLayout(new BorderLayout()); //定义布局为东西南北中的形式centerPanel=new JPanel(); //初始化centerPanel southPanel=new JPanel(); //初始化southPanel northPanel=new JPanel(); //初始化northPanel thisContainer.add(centerPanel,"Center"); //将centerPanel加入mainFrame中的Center位置 thisContainer.add(southPanel,"South"); //将southPanel加入mainFrame中的South位置 thisContainer.add(northPanel,"North"); //将northPanel加入mainFrame中的North位置 centerPanel.setLayout(new GridLayout(6,5)); //将centerPanel初始化为6*5

JAVA实验报告3-“连连看”游戏程序设计

目录 一、实验目的与要求 (2) 二、实验方案 (2) 三、实验结果和数据处理 (3) 四、结论 (20) 五、问题与讨论 (20)

一、实验目的与要求 (1)实验目的:通过在指定的窗口界面完成“连连看”小游戏程序的编写和调试,加深对面向对象程序设计的理解。 (2)实验要求:按照Java程序设计教程的要求完成第三章中“连连看”游戏程序的编写和调试。 二、实验方案 定义了一个lianliankan类,实现了接口ActionListener: ①main()方法:主函数; ②actionPerformed()方法,用来实现重来一局按钮的响应事件; ③go()方法:初始化界面,排列图形; ④ex()方法:设置“退出游戏”窗体界面; ⑤suiji()方法:产生随机数,来填充游戏界面对应的数组的各个位置; ⑥chonglie()方法:当无符合条件的图形可消去时,需要重新排列图形; ⑦ling()方法:将数组中为零的成员所对应的按钮消去(设为不可见); ⑧wei()方法:判断并记录每次单击按钮的一些信息; ⑨xiao()方法:判断两个按钮在对应数组元素的值相同时能不能消去。

三、实验结果和数据处理 整个游戏最重要的方法,xiao()方法,用来判断两个按钮在对应数组元素的值相同时能不能消去: import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; //主面板 Container thisContainer; JPanel centerPanel,southPanel,northPanel; //子面板 JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组 JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮JLabel fractionLable=new JLabel("0"); //分数标签 JButton firstButton,secondButton; //分别记录两次被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; //判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateL V; //游戏按钮的位置坐标 int i,j,k,n;//消除方法控制 public void init(){ mainFrame=new JFrame("JKJ连连看"); thisContainer = mainFrame.getContentPane();

java实战之连连看游戏源码(完整版)

import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; // 主面板 JPanel centerPanel,saidPanel; // 子面板 JButton diamondsButton[][] = new JButton[10][10];// 游戏按钮数组 JButton firstButton, secondButton; // 分别记录两次被选中的按钮 JButton backButton, remarkButton, newlyButton, startButton;// 返回,重列,重新,开始|暂停按钮 JLabel lable1 = new JLabel("分数:"); JLabel lable2 = new JLabel("0"); // 分数标签 int grid[][] = new int[12][12]; static boolean pressInformation = false; // 判断是否有按钮被选中 int x0 = 0, y0 = 0, x = 0, y = 0, fristMsg = 0, secondMsg = 0, validateLV; // 游戏按钮的位置坐标 int i, j, k, n;// 消除方法控制 public void AddGif() { for (int cols = 0; cols < 10; cols++) { for (int rows = 0; rows < 10; rows++) { diamondsButton[cols][rows] = new JButton(new ImageIcon(String.valueOf(grid[cols + 1][rows + 1])+".gif")); diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } } } public void create() { mainFrame = new JFrame("连连看"); mainFrame.setLayout(null); centerPanel = new JPanel(); saidPanel = new JPanel(); saidPanel.setLayout(null); saidPanel.setBackground(Color.yellow); centerPanel.setLayout(new GridLayout(10,10)); //10*10的网格布局

Java下连连看算法

两点之间只需要一条直线连接: ( 注意:为了简单省事,我们用java.awt 包中的 Poin(x, y)t 来描述二维数组中元素的坐标,但是有 一点要特别小心,x 和y 与二维数组中元素的下 标值恰好相反,如左上图中A 的下标为 array[1][0] ,Point 的描述却是为Point(0, 1) , 如果不注意这一点,程序会出错的。) 两点之间需要两条直线连接: 如上图, A 、 B 两点如果需要两条直线连接起 来,有可能有两种方式,于是,我们可以巧妙的构 建一个 C 点和一个 D 点,并且规定C 点的横 坐标为 A 点的横坐标,C 点的纵坐标为B 点 的纵坐标, D 点的横坐标为B 点的横坐标,D 点的纵坐标为A 点的纵坐标(这一点很重要,因 为 C 、D 决定了AC 、BC 、AD 、BD 的 连线方式),如下图: 如果此时C 点(或D 点)能同时满足AC (AD )、BC (BD )只需要一条直线相连, 就表示 A 、B 之前能够使用两条直线连接起来, 并且C 点( D 点)为拐点(以后会用上的) //A 、B 之间有一个拐点 boolean oneCorner(Point a, Point b) { Point c, d; boolean isMatch; c = new Point(a.x, b.y); d = new Point(b.x, a.y); if (map[c.x][c.y] == 0) { //C 点上必须没有 障碍 isMatch = horizonMatch(a, c) && verticalMatch (b, c); if (isMatch) { return isMatch; } } if (map[d.x][d.y] == 0) { //D 点上必须没有 障碍 isMatch = verticalMatch (a, d) && horizonMatch (b, d);

【连连看】小游戏初始源代码

【连连看】简单小游戏初始源代码 使用说明:进入Java开发工具eclipse中,在左面建立一个任意名的java project,然后在工程下建立一个名字为Lianliankan的package,最后建立一个名字为lianliankan的class类。 将以下程序代码复制入class内容面板中,点击运行。 package Lianliankan; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; //主面板 Container thisContainer; JPanel centerPanel,southPanel,northPanel; //子面板 JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组 JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮 JLabel fractionLable=new JLabel("0"); //分数标签 JButton firstButton,secondButton; //分别记录两次被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; //判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标 int i,j,k,n;//消除方法控制 public void init(){ mainFrame=new JFrame("JKJ连连看"); thisContainer = mainFrame.getContentPane(); thisContainer.setLayout(new BorderLayout()); centerPanel=new JPanel(); southPanel=new JPanel(); northPanel=new JPanel(); thisContainer.add(centerPanel,"Center"); thisContainer.add(southPanel,"South"); thisContainer.add(northPanel,"North"); centerPanel.setLayout(new GridLayout(6,5)); for(int cols = 0;cols < 6;cols++){ for(int rows = 0;rows < 5;rows++ ){ diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1])); diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } } exitButton=new JButton("退出"); exitButton.addActionListener(this); resetButton=new JButton("重列"); resetButton.addActionListener(this); newlyButton=new JButton("再来一局");

基于JAVA的连连看游戏设计

基于JAVA的连连看游戏设计 【摘要】:1978年第一款PC游戏冒险岛在美国问世至今,随着硬件和软件水平的不断进步,出现许许多多的游戏,其中连连看就非常经典。连连看--在一个画好的格局内,排列着一些不同的图片,选中两张一样的图片并符合消除规则就可以消除这两张图片。在QQ游戏大厅里就有连连看游戏,网上也有各种各样的单连连看游戏。本游戏使用JAVA语言编写,以MyEclipse为开发平台。游戏主界面是基于GUI的开发,使得游戏界面变得简单清晰。并且调用了平台的一些算法,完成了事件的触发功能。游戏首先通过定义动态的二维数组,然后根据一定的规则确定算法。 【关键词】:连连看;游戏;JAVA;数组 1.1 项目背景 最近这段时间腾讯推出的天天爱消除、天天酷跑、神庙逃亡2、连连看等小游戏深受广大网民欢迎,这些游戏简单有趣甚至经典。其中连连看游戏就是典型了。 游戏本身就有很强的吸引力,再加上计算机技术的高速发展,游戏的内容越来越丰富,画面越来越绚丽,音效越来越震撼。游戏所具有的独特魅力吸引了一大批玩家使游戏产业在娱乐领域成为主流。游戏一方面可以打发人们的空闲时间,另一方面可以为玩家创造一个以他为中心的世界,让玩家得到了一定的精神满足。游戏产业的快速发展促动高科技技术不断升级,作为经济增长的一大支撑点,已经成为经济腾飞的“第四产业”[1]。 游戏“连连看”的桌面游戏起源于台湾,进入中国大陆后,一时间成为时尚,同时,很多游戏公司都发展出了不同版本的连连看。其中顾方开发的“阿凡达连连看”一度受到好评,这个连连看游戏也成为此系列软件的核心产品。并且在2004年,得到了国家版权局的颁发的计算机软件著作权登记证书。软件技术的不断进步使Flash技术越来越成熟,这就衍生各种各样的“连连看”游戏随着Flash的成熟应用,网络上出现了许多版本的在线“连连看”。例如“动物连连看”、“水果连连看”等,其中“水晶连连看”以绚丽的界面吸引了大量的女性玩家。 艾瑞咨询收集2007年到2008年各种网络游戏受欢迎程度,并且通过百度、360、谷歌等搜索引擎统计大量的游戏数据,经过分析,发现2008年至2010年小游戏中比较热门的有对对碰、找茬、连连看等,。从2008年开始,风投公司对其他游戏的投资比例大幅度下降,而对一些小游戏研发企业的投资大幅度增加,这些小游戏行业迅速进入高速发展阶段然后慢慢趋于稳定。2008年以后,网络上出现各种各样的社交平台,平台上一般会有一个玩玩小游戏的交流区,连连看正常能名列其中。“连连看”与个人空间相结合,被快速的传播,成为一款热门的社交游戏,其中以开发者Jonevey在Manyou开放平台上推出的“宠物连连看”最为流行[2]。 1.2主要任务与目标 (1)分析游戏的软硬件需求;(2)设计游戏模块;(3)总体功能测试实现;(4)总结。 此次的连连看游戏开发设计使用JAVA语言。游戏规则是效仿网络上一般的连连看,就是用三条以内的直线将两张相同的图片连接在一起就可以消除这两张图片,如果点击的两张图片不一样或者同一张图片,那么就不处理。游戏开始后按照画好的框架随机分布一些图片,要求同一张图片的产生是偶数张。按照游戏设定的方法把两张一样的图片相连就可以消掉这两张图片,在倒计时结束之前必须将框架内的图片清除完不然游戏失败并得到一个相应的分数。

(强烈推荐)JAVA毕业论文连连看游戏的开发

计算机科学与工程学院 集中性实践教学计划书( 2013 — 2014学年第1学期) 课程名称:专业实习 姓名: 专业:计算机科学与技术 班级:计科103班 课程负责人:云健 指导教师:孟佳娜,张恒博

教学起止周:第10至12教学周 摘要 近年来,Java作为一种新的编程语言,以其可移植性和平台无关性等优点,得到了广泛地应用,特别是Java与万维网的完美结合,使其成为网络编程和嵌入式编程领域的首选编程语言。 本设计报告阐述了连连看游戏的分析与设计的全过程,并在论文中相应的位置插入了图片、流程图以及一些具有技巧性的程序代码,更加清晰的描述了该游戏是如何实现的。连连看游戏有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。 连连看游戏采用JAVA语言开发,以MyEclipse为开发平台。游戏主界面是基于SWING(图形用户界面)的开发,使得游戏界面简单清晰。并调用了其中的一些函数,完成了事件的触发功能。希望通过这次开发设计出的连连看小游戏,给大家的生活带来一点乐趣。游戏通过定义动态的二维数组,根据一定的算法实现规定的路径判断。 关键词:连连看游戏;算法设计;路径判断;Java 实习计划:

第十一周编程编程编程调试,总结一 周的工作 撰写实习报告验收,答辩 第十二周修改完善,检查可 能存在的BUG 目录 摘要 (2) 一、绪论 (1) 2.1 技术可行性 (1) 2.2 经济可行性 (2) 2.3 操作可行性 (2) 三、课程设计题目任务描述和要求 (2) 3.1 任务描述 (2) 3.1.1 界面 (2) 3.1.2程序 (3) 3.2 设计要求及目的 (4) 四、需求分析 (4) 4.1 方案选择 (4) 在概要设计阶段,主要有两中方案可供选择: (4) 4.2功能描述 (5) 4.3 功能需求 (5) 4.4 功能模块及思路 (5) 4.5 系统需求分析总结 (7) 五、设计方案 (8) 5.1 总体设计 (8)

连连看java源码分析

因为有朋友在站内信中问到连连看的具体算法,所以我就把算法post出来,这个算法也是参考网上Flash游戏的算法改写的,原来的参考信息已经找不到了,不过非常感谢那些无私的朋友。 改写的连连看算法如下: 前置条件:用一二维数组存放Map,-1表示没有图案可以连通,非-1表示不同的图案。 首先是横向检测: Java代码 1.private boolean horizon(Point a, Point b) 2. { 3. if(a.x == b.x && a.y == b.y)//如果点击的是同一个图案,直 接返回false 4. return false; 5. int x_start = a.y <= b.y ? a.y : b.y; 6. int x_end = a.y <= b.y ? b.y : a.y; 7. for(int x = x_start + 1; x < x_end; x++)//只要一个不是 -1,直接返回false 8. if(map[a.x][x] != -1){ 9. return false; 10. } 11. return true; 12. } 其次是纵向检测:

Java代码 1.private boolean vertical(Point a, Point b) 2.{ 3. if(a.x == b.x && a.y == b.y) 4. return false; 5. int y_start = a.x <= b.x ? a.x : b.x; 6. int y_end = a.x <= b.x ? b.x : a.x; 7. for(int y = y_start + 1; y < y_end; y++) 8. if(map[y][a.y] != -1) 9. return false; 10. return true; 11.} 一个拐角的检测: 如果一个拐角能连通的话,则必须存在C、D两点。其中C点的横坐标和A相同,纵坐标与B相同,D的横坐标与B相同,纵坐标与A相同。 Java代码 1.private boolean oneCorner(Point a, Point b) 2.{ 3. Point c = new Point(a.x, b.y); 4. Point d = new Point(b.x, a.y); 5. if(map[c.x][c.y] == -1) 6. { 7. boolean method1 = horizon(a, c) && vertical(b, c); 8. return method1; 9. } 10. if(map[d.x][d.y] == -1) 11. { 12. boolean method2 = vertical(a, d) && horizon(b, d); 13. return method2;

JAVA课程设计—连连看

Java 课程设计报告 (一):前言: 随着计算机的快速发展,计算机的应用范围越来越广。其内容范围跨越了教育科研、文化事业、金融、商业、新闻出版、体育等各个领域,也应用到了娱乐方面。让人们在业余时间来放松心情。 (二):内容: 1:实验课题:连连看小游戏的开发设计 2:实验任务:完成游戏的运行 3:功能需求和分析: 本程序将涉及一款单机小型连连看游戏,该程序具备以下的功能:(1)该游戏界面为方格类型,由纵6横7的直线平行垂直交叉组成,分别是6行5列方块拼接,共有30格小方块。方块上随 机分布一些数字,数字的要求是至少两两相同,位置随机打乱。(2)游戏规则是将相同数字的方块连接,但要满足只能至少单边无阻碍呈直线趋势连接,否则视为无效,若连接一对成功就 消失于界面,继续游戏,直到游戏结束。 (3)帮助:游戏过程中,遇到困难难以寻找下一符合要求的一对数字,可按左下按钮重置重新排列方可继续游戏。 (4)退出游戏:可点击左下方“退出游戏”按钮,结束游戏。(5)该游戏纯属个人小型休闲游戏。

(三):代码设计 连连看java源代码 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class lianliankan implements ActionListener { JFrame mainFrame; //主面板 Container thisContainer; JPanel centerPanel,southPanel,northPanel; //子面板 JButton diamondsButton[][] = new JButton[6][5];//游戏按钮数组 JButton exitButton,resetButton,newlyButton; //退出,重列,重新开始按钮 JLabel fractionLable=new JLabel("0"); //分数标签 JButton firstButton,secondButton; //分别记录两次被选中的按钮 int grid[][] = new int[8][7];//储存游戏按钮位置 static boolean pressInformation=false; //判断是否有按钮被选中 int x0=0,y0=0,x=0,y=0,fristMsg=0,secondMsg=0,validateLV; //游戏按钮的位置坐标int i,j,k,n;//消除方法控制 public void init(){ mainFrame=new JFrame("JKJ连连看"); thisContainer = mainFrame.getContentPane(); thisContainer.setLayout(new BorderLayout()); centerPanel=new JPanel(); southPanel=new JPanel(); northPanel=new JPanel(); thisContainer.add(centerPanel,"Center"); thisContainer.add(southPanel,"South"); thisContainer.add(northPanel,"North"); centerPanel.setLayout(new GridLayout(6,5)); for(int cols = 0;cols < 6;cols++){ for(int rows = 0;rows < 5;rows++ ){ diamondsButton[cols][rows]=new JButton(String.valueOf(grid[cols+1][rows+1])); diamondsButton[cols][rows].addActionListener(this); centerPanel.add(diamondsButton[cols][rows]); } } exitButton=new JButton("退出"); exitButton.addActionListener(this); resetButton=new JButton("重列"); resetButton.addActionListener(this); newlyButton=new JButton("再来一局");

相关主题
文本预览
相关文档 最新文档