基于java的连连看游戏

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于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

imageIndex.add(random.nextInt(12)+"");// 生成随机数索引放入集合

}

imageIndex.addAll(imageIndex);// 连接集合使每个索引都是成偶数的

3、联通消除

点击相连且图片相同的两个按钮可以把两个按钮消除掉。相连有三种情况:直线相连,直角相连,双折线相连。

要消掉相同图标的按钮,首先要想办法判断两个按钮的图标是否相同,这里提示大家一个方

法:按钮有个setActionCommand方法和getActionCommand,把图标名字设置为一个按钮的ActionCommand,然后通过对比两个按钮的ActionCommand就可以知道是否具有相同的图标。

消除按钮就要判断两个按钮是否连通,连通有三种情况,对应三种算法,下面详细说明。算法判断两个点是否连通,那如何跟两个按钮建立联系呢?按钮的位置就可以视作一个点(java中用Point类表示一个点)。这样用一个点代表按钮位置,用ActionCommand代表按钮上的图标。就很容易操作了。下面我们先说清楚实现原理,具体代码一会在给出。

(1)直线相连:只要两点之间横坐标或纵坐标相同,即表示两点在同行或同列;然后判断两点之间有没有障碍,无则联通。

(2)直角相连:两个点的坐标可以生成一个新的点,如果两点都可以与该新点联通,则说明联通。注意:新点有两个,如图所示一个,另外喇叭图标处也可以生成一个,但是因为喇叭图标处不是空点,因此不用该点。但在实际中,新点的两种可能都要考虑到,那个能用用那个。

(3)双折线相连:在单击的第一点处,向四个方向搜索有无空点,如果有则生成一个新点,

如果该新点与另一个按钮联通(直角联通),则说明联通。如果该新点不能与按钮连通,则继续向该新点的方向前进一个位置,再次判断该位置是否为空点,是否可以和另一个按钮连通,以此类推。

4、重排

当游戏进行到一定程度,剩余的按钮无法消掉,这时就需要对按钮位置进行重新排列,从而让游戏继续进行。解决这一问题的思路如下:首先对所有按钮进行搜索,把剩余按钮的ActionCommand(ActionCommand和该按钮显示的图片序号一致,如果按钮被消掉则ActionCommand为空)放入一个集合内;然后依次搜索剩余按钮,找到一个剩余按钮后,保持按钮的位置不动,从集合中随机取出一个ActionCommand赋给该按钮,这样就完成了对剩余按钮的重排。

四具体实现

打开Eclipse,新建一个类LinkGame,该类继承自JFrame,并且需要实现ActionListener方法。

public class LinkGame extends JFrame implements ActionListener{

}

在该类中添加如下变量和方法,见表1和表2。

表1 LinkGame类中的成员变量

变量类型变量名说明

final static int ROW游戏区8行9列共72个按钮

final static int COL

表 2 LinkGame类中的方法

上述方法的具体实现如下:

1、构造方法

// 构造方法建立游戏界面

public LinkGame() {

this.setSize(780, 500);

this.setTitle("连连看游戏");

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

addmyMenu(); // 添加菜单

相关文档
最新文档